LoRA Preset Saver
Save a LoRA Stack — and Its Prompts — as a Reusable Preset
- STRING
Every LoRA preset in this pack has to come from somewhere, and the LoRA Preset Saver is the somewhere. You've dialed in a stack - a LoRA, its strength, the exact prompt fragment that makes it work - and you don't want to remember all of it next time. This node writes it down for you as a JSON file that the Loader and Selector nodes read back.
How it works
The Saver is a configuration node with five slots, each holding six fields: lora_X_name (the model dropdown), lora_X_nickname (the friendly display name), lora_X_strength, lora_X_clip_strength, and the prompt_positive / prompt_negative text for that LoRA. There's also a suffix string you can use to version presets - a suffix of _v2 turns a file into mypreset_v2_preset.json.
Here's the part that trips people up: the Saver only writes when the triggered boolean is on. It's a widget, not a wire - set it to True, queue a run, and it writes one JSON file per filled slot into your loras model folder, then returns a status string telling you where the files landed. Flip it back to False and rerun if you want it to stop re-saving every queue. It ignores slots whose name is "none", so you can reuse one Saver for stacks of different sizes.
Two structural things worth knowing:
- One preset file per LoRA, not per stack. A preset is a single LoRA plus its prompt fragment. The stack is assembled by the Loader or Selector from several preset files. That matches the file naming - the preset name is derived from the LoRA file name, not from a stack name you invent.
- The files land inside your models/loras folder, with the same directory structure you use there. Each file is plain JSON:
lora_name,lora_path,strength,clip_strength,prompt_positive,prompt_negative, andnickname.
After you save
The saved presets show up in the dropdowns of the LoRA Preset Loader & Encoder and the LoRA Preset Selector once they reload (reload the workflow or hit the selector's refresh). Since the Selector supports subfolders, organizing presets into loras/category/… keeps long lists manageable. You can also manage the whole thing over HTTP: the pack registers /lora_presets and /lora_presets/refresh endpoints on your ComfyUI instance.
Installing it
Same pack, no special dependencies:
cd ComfyUI/custom_nodes
git clone https://github.com/JEONG-JIWOO/ComfyUI_Eugene_Nodes
Restart ComfyUI, or install via ComfyUI Manager (search "Eugene Nodes").
Where people get burned
The number one "bug" report for this node is that it does nothing - because triggered was left off. Toggle it on, run once, toggle it back off.
The second is expecting a new preset to appear instantly. Node dropdowns are built when the node loads, so save a preset and you'll need to reload the workflow (or hit the Selector's refresh) before it shows up in a Loader.
And a tip if your presets look generic in dropdowns: fill in the nickname. The preset list is sorted by display name, and nicknames make a folder full of files you don't remember readable again.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| triggered | BOOLEAN | false | — |
| suffix | STRING | — | |
| lora_1_nameopt | COMBO | 1 options: none | |
| lora_1_nicknameopt | STRING | — | |
| lora_1_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_1_clip_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_1_prompt_positiveopt | STRING | — | |
| lora_1_prompt_negativeopt | STRING | — | |
| lora_2_nameopt | COMBO | 1 options: none | |
| lora_2_nicknameopt | STRING | — | |
| lora_2_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_2_clip_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_2_prompt_positiveopt | STRING | — | |
| lora_2_prompt_negativeopt | STRING | — | |
| lora_3_nameopt | COMBO | 1 options: none | |
| lora_3_nicknameopt | STRING | — | |
| lora_3_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_3_clip_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_3_prompt_positiveopt | STRING | — | |
| lora_3_prompt_negativeopt | STRING | — | |
| lora_4_nameopt | COMBO | 1 options: none | |
| lora_4_nicknameopt | STRING | — | |
| lora_4_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_4_clip_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_4_prompt_positiveopt | STRING | — | |
| lora_4_prompt_negativeopt | STRING | — | |
| lora_5_nameopt | COMBO | 1 options: none | |
| lora_5_nicknameopt | STRING | — | |
| lora_5_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_5_clip_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_5_prompt_positiveopt | STRING | — | |
| lora_5_prompt_negativeopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |