Preset Switcher (Style)
Save checkpoint, LoRAs, and prompts together
- current_preset
Switching models in ComfyUI is manual busywork. You want to try a different checkpoint, the LoRA stack that goes with it, and the prompts - that's a good ten clicks and one "wait, did I update the negative?" moment, every single time. Preset Switcher (Style) is the fix: point it at the nodes in your graph that define a look, hit Save Current Config, and the whole combo becomes one named entry in a dropdown. Later, picking that entry rewrites those nodes back for you.
It's one of three nodes in the small, recent MosnowLab ComfyUI-Preset-Switcher pack, sitting alongside a LoRA-focused twin and a visual gallery. Nothing to download, nothing to configure, no API key.
How it works (read this, it explains everything)
The node cheats, in a good way. The Python class behind it is nearly empty - its execute method just returns an empty string. All the real logic lives in the pack's JavaScript, which grows a row of widgets onto the node and talks to ComfyUI's backend through small HTTP routes (/preset-switcher/presets/save, etc.). When you save, the JS reads the current values off the nodes you bound it to and writes a JSON file into custom_nodes/ComfyUI-Preset-Switcher/presets/. When you switch, it writes those values back into the bound nodes' widgets. Nothing flows through wires - the switcher edits its neighbors in place, which is why there's no data to pipe anywhere.
The inputs and outputs that matter
The schema is thin on purpose: one optional preset_trigger string input and one current_preset string output. Neither carries real data. current_preset always comes back empty, and the JS never reads preset_trigger - they're leftover plumbing, so don't build a workflow around that socket. The widget row is the actual interface:
- Save Current Config - snapshots whatever the binders point at.
- Preset Select - the dropdown; switching here applies the preset.
- Model / LoRA / Positive Prompt / Negative Prompt - four binders that list matching nodes in your graph (checkpoint loaders; any node whose type or title mentions LoRA; CLIP Text Encode nodes). Set these once per workflow, then save.
The LoRA binder reads whatever LoRA stack node you bind with a simple/advanced "input mode" layout (per-slot name + weights). If the node you bind doesn't have that widget shape, the LoRA half of the preset just comes back empty - the model and prompts still save.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/MosnowLab/ComfyUI-Preset-Switcher.git
Restart ComfyUI. Easier: ComfyUI Manager, search Preset Switcher. No extra Python packages - the README says so outright and requirements.txt only notes that core ComfyUI is enough. No model downloads.
Where people get burned
Presets are scoped per workflow: filenames embed the workflow name, so "Sunset" in one workflow and "Sunset" in another are two separate files. Don't expect a saved preset to follow you into a fresh graph. Second, bindings are stored by node ID - rebuild part of the graph and the switcher can't find its targets; it warns, but you'll need to re-pick the nodes in the binders. Third, it sanity-checks that the saved checkpoint still exists in the loader's list and warns if a model file was renamed or deleted. One rough edge: the apply summary alert is hardcoded Chinese even on an English UI - the buttons are bilingual, the alert text isn't. And the honest caveat: a tool that rewrites widgets invisibly is exactly the kind of convenience the ecosystem argues about (see the "Anything Anywhere" backlash). It's fast, but a half-applied preset is silent until you look at the loader. Give the little summary alert a glance and you're fine.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| preset_triggeropt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| current_preset | STRING | — |