Nodes/ComfyUI-Prompto/Prompto LoRAs
ComfyUI Node

Prompto LoRAs

Stop rebuilding your LoRA stack by hand

By EY4O·Created 7 days ago·Updated 3 days ago· 0
Prompto LoRAs
  • model
  • clip
  • model
  • clip
  • loras
◄recipe▾►
◄character▾►
◄strength1.00►

Every LoRA stack you've ever liked was a list of filenames plus a weight for each, and every time you want it back you're opening the Load LoRA node and hunting through a dropdown that shows you your entire loras folder. Three LoRAs in, one of them in a subfolder, and you've lost the thread.

Prompto LoRAs applies a recipe's LoRAs - or a cast member's LoRA, or both - as a single node, matching them against your actual loras folder by filename.

What it is

One of six nodes in ComfyUI-Prompto, the ComfyUI half of the Prompto Chrome extension. Recipes in Prompto can carry a LoRA list; cast members can carry a single character LoRA. This node reads those lists and loads the files, so the thing you saved as "the noodle-shop setup that worked" stays one click instead of a hunt.

It's a plumbing node in the honest sense - it touches no pixels, and the pipeline it replaces is three chained LoraLoader nodes plus a mental note about ordering.

How it works

model and clip come in from your checkpoint, and both come back out with the LoRAs applied. Under the hood it calls ComfyUI's own LoraLoader once per LoRA, passing the same weight to the model and the CLIP - the usual convention, and the one the node's own summary output reports.

The interesting part is the matching. Prompto stores LoRAs by Civitai-ish name, so the node reduces both sides to a stem: basename, lowercased, extension stripped (.safetensors, .ckpt, .pt, .pth, .bin), folders ignored. That means WAI/char_rin_v3.safetensors on your disk matches char_rin_v3 from the library without you configuring a path. It also means the match is by name only - nothing checks that the LoRA is for the base model you loaded.

Order is preserved: the recipe's LoRAs first, in the order Prompto listed them, then the cast member's LoRA. Duplicates are dropped by stem, so a recipe that includes the character LoRA and a character node that names the same file don't apply it twice.

Missing files are handled the way you'd hope and not the way you'd fear: it's skipped, a warning goes to the ComfyUI console ([Prompto] LoRAs not in the loras folder: …), and the third output tells you about it. Nothing throws.

The inputs and outputs that matter

  • model, clip - from your checkpoint loader. Both required.
  • recipe - (none) or a recipe from the library. Applies "the LoRAs listed in this recipe's settings".
  • character - (none) or a cast member, applying that character's LoRA.
  • strength - a multiplier over every Prompto weight, default 1.0, range −10 to 10. It scales the whole stack, it doesn't rebalance it: a recipe with 0.8 and 0.5 at strength 1.5 becomes 1.2 and 0.75.

Outputs are model and clip (into your KSampler and text encoder), plus loras, a string like char_rin_v3 0.8, style_painterly 0.6; missing: noodle_shop_v2. Wire loras into a Show Text or note node and your workflow documents itself - including the honest list of what didn't load.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/EY4O/ComfyUI-Prompto.git

Restart ComfyUI. No Python dependencies past ComfyUI itself, and no model downloads - the LoRAs are the ones you already have. ComfyUI Manager with the search term Prompto will also pull it, since the pack is published on the Comfy Registry.

To have anything to pick in the dropdowns you need the Prompto Chrome extension (not yet published; load it unpacked from its folder via chrome://extensions → Developer mode → Load unpacked) and a sync. Press R in the ComfyUI tab after adding recipes in Chrome - the dropdown options are built when ComfyUI loads node definitions.

Where people get burned

A silently missing LoRA is a quality change, not an error. The node runs fine, the summary says missing: …, and if you don't read it you'll conclude the recipe is bad rather than that your folder doesn't have the file under that name. Rename a file char_rin_v3_final_FINAL.safetensors and the match is gone.

Strength multiplies, so dialing it up scales your mistakes too. If a recipe is stacked for a reason - a style LoRA at 0.4 because it eats detail at higher weights - turning strength to 1.5 doesn't make it better, it makes it louder.

Nothing validates the base model. Cross-architecture stacks load cheerfully and produce mush. Check that the recipe's LoRAs came from the same family as the checkpoint you're loading them onto.

Bypassing this node is the intended off-switch. Left bypassed, model and clip pass through untouched, and the rest of the workflow is unaffected. Which is a nice way to A/B a stack without rewiring anything.

CategoryPrompto

Inputs (5)

NameTypeDefaultDescription
modelMODEL—
clipCLIP—
recipeCOMBOApply the LoRAs listed in this recipe's settings
characterCOMBOApply this cast member's LoRA
strengthFLOAT1.00-10–10Multiplies every LoRA's weight from Prompto

Outputs (3)

NameTypeDescription
modelMODEL—
clipCLIP—
lorasSTRING—