ScarlotSoft Prompt Builder + AutoLoader
Prompts from files, LoRAs auto-loaded from the text — ScarlotSoft Prompt Builder + AutoLoader
- model
- clip
- MODEL
- CLIP
- PROMPT
- LOADED LORAS
This is the node that wants to replace half your prompt-building graph. ScarlotSoft Prompt Builder + AutoLoader takes your model and clip, assembles a prompt from a couple of text boxes and lines pulled from text files, scans that assembled prompt for LoRA and embedding tags, loads the LoRAs into the model itself, and hands you a clean prompt with the tags stripped out. Prompt builder, file reader, and LoRA loader in one node - that's a lot of jobs, and it does them all.
How the assembly works: string_a and string_b are the fixed boxes (the JS relabels them "Quality Prompt" and "Styles Loras" so you remember which is which), and file_data is a JSON list, built by the custom UI, of file entries - each with a path (relative to ComfyUI's input folder), a mode (Auto/Index), an index, and an on/off toggle. In Auto mode a file contributes its next line each run, cycling like the suite's EasyLineFromFile; in Index mode it contributes a specific line. Everything gets joined with blank lines into one prompt. Because Auto-mode files force a re-run every queue, the node re-picks lines each time - your text file becomes a rotating variation deck.
Then the magic part: the assembled text is scanned for <lora:name:strength>, <lyco:...>, and <hypernet:...> tags plus embedding:name references. Each LoRA gets loaded into the model/clip via the standard load_lora_for_models, and the tags are stripped out of the text before it's emitted. So your text files can say "use this LoRA" and the node obeys - no separate LoRA loader, no wiring. The LOADED LORAS output reports exactly what got applied, with ✅/❌ marks and strengths, and missing LoRAs or embeddings are reported rather than silently dropped. Embeddings are validated against your embeddings folder but not loaded (CLIP encoders handle those); LoRAs are genuinely fused into the model.
Outputs: MODEL, CLIP, PROMPT (the cleaned text), and LOADED LORAS (the report string). Wire MODEL/CLIP to a KSampler and PROMPT into any CLIP encoder - the node deliberately does not encode, so you keep control of that step.
What you trade for all this: less transparency. The actual prompt is now spread across two boxes and N files, so when a run surprises you, you're debugging several places. The LOADED LORAS output (pipe it into a text preview) is your first stop. Also worth knowing: the tag format is <lora:name:strength> - if your files use A1111-style bare lora mentions, they won't trigger anything. The path-traversal protection on the file reads (from the pack's security pass) is a genuinely reassuring touch for a node that reads arbitrary files.
Install with the pack - ComfyUI Manager → search ScarlotSoft → install → restart:
cd ComfyUI/custom_nodes
git clone https://github.com/scarlotsoft/ComfyUI_ScarlotSoft
No extra dependencies. Suite theme; hard-refresh after a UI-mode switch if the custom list doesn't render.
It's opinionated - ScarlotSoft clearly builds prompt pipelines their way - but if you live on text-file prompt decks and LoRA-heavy workflows, collapsing three node types into one is a real ergonomic win. Start with one file and one LoRA before you trust it with your whole library.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| string_a | STRING | — | |
| string_b | STRING | — | |
| file_data | STRING | [] | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| PROMPT | STRING | — |
| LOADED LORAS | STRING | — |