Preset Loader π
Preset Loader π
- text
You know the ritual. You've got three style blocks you actually like - the Mucha Art Nouveau one, the ukiyo-e one, the Jack Kirby krackle one - and you type them out, or paste them in, every single time you switch moods. Then you misplace the text file you were keeping them in and the whole afternoon goes sideways. Preset Loader π is the node that ends that: it keeps your reusable prompt text in one place, named and organized, and hands it to your workflow with a dropdown instead of a copy-paste.
The pack author built it for exactly this - "switching between group of texts for my favourite art styles or characters" - and it ships with seven Flux-style presets (Aivazovsky, Van Gogh, Frazetta, Munch, Kirby, ukiyo-e, Mucha) so you can see the shape of it before you delete them and add your own.
What it actually is
Under the hood this is a tiny text server with a nice face. Your presets live in a JSON file at ComfyUI/custom_nodes/ComfyUI-text-preset-loader/data/user_presets.json - one entry per named preset, each holding its text and an optional preview image. The node registers a small REST API (/preset_loader/list, /save, /delete, β¦) plus a JavaScript frontend that draws the dropdown, the search box, the save/delete buttons and the preview pane. The node itself is dead simple: it takes a string and outputs a string. All the cleverness is in the storage and the UI.
A nice touch: the shipped presets.json is only a git-tracked seed, copied into your user_presets.json on first run. Your live file is gitignored, so updating the pack can't clobber your collection. The author still puts "PLEASE BACKUP YOUR PRESETS BEFORE UPDATING" in the project description, so grab data/ occasionally - it's a single small file, and JSON is easy to back up.
The inputs and outputs that matter
text(multiline string) - the editable box. Whatever you type here is what comes out, so you can load a preset and tweak it in place before generating.preset- the dropdown. Pick a name and the box fills with that preset's text (and the preview shows, if it has one). If the text box is empty, the selected preset's text is emitted directly.preset_idandseed(optional sockets) - the power-user path. Presets get positional IDs down the tree -1,2,1means group 1, subgroup 2, preset 1 - andpreset_idaccepts numbers, ranges like1,1,[3:8]for a random pick, or lists like1,1,[1,4,6]. Theseedmakes the random pick reproducible. Wire an int node set to randomize to sweep presets every run. Leave both unwired and the node behaves normally.- Output
text(string) - the only output, and it wires straight into a Text Concatenate node, where you append your per-image specifics before feeding it to CLIP Text Encode as usual. That's also the standard trick for LoRA trigger words: the README shows it driving badjeff'scomfyui_lora_tag_loader.
Priority order when the node runs: a wired preset_id wins, then anything in the text box, then the dropdown selection.
Installing it
ComfyUI Manager β search "ComfyUI Text Preset Loader" β install, or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/INuBq8/ComfyUI-text-preset-loader
Restart ComfyUI. No model downloads, no heavy deps - the only requirement is Pillow, which ComfyUI already ships, so this installs clean even on a fresh setup.
Where people get burned
Categories are just slashes in the name - Characters/Heroes/example creates the tree. Don't fight it with nested folders; that is the folder.
Saving is easy to fumble. "Save" on the node updates the currently selected preset; to keep a new variant, change the name before saving - that's "save copy" and it preserves the preview image. Delete is a click away, so don't click it twice.
New presets appear in the dropdown after a frontend refresh (the choices are rebuilt when ComfyUI's /object_info is re-fetched). And one gotcha the README flags honestly: preset IDs are positional, so adding or deleting a preset shifts the numbers of everything after it. A workflow with a hardcoded preset_id may silently point somewhere else later - great for random picking, not a permanent address.
Finally, Nodes 2.0: the author says it's "tested it a little bit β¦ seems to work, but it was designed for classic." On the new Vue-based frontend it mostly behaves; if a button misbehaves, that's the known rough edge, and the browser library at http://localhost:8188/preset_loader/browse is a solid workaround - it manages the same presets from a plain web page.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | β | |
| preset | COMBO | (none) | Pick a preset. Used only when the text box is empty β anything typed in the text box overrides it. |
| preset_idopt | STRING | Pick a preset by number, e.g. 1,2,1 β see the README for the range and choice syntax. | |
| seedopt | INT | Drives random picks in preset_id. The same seed always gives the same preset. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | β |