Parameter Snapshot Saver
Stop losing your best settings — snapshot node parameters and bring them back
- node_1
- node_2
- node_3
- node_4
- node_5
- node_6
- node_7
- node_8
ComfyUI has a talent nobody advertises: quietly destroying your favorite settings. You dial in a prompt, seed, CFG, and sampler combo that finally looks right, then you nudge one slider to test a variant, and the image is gone - and with it, the exact recipe that made it. Your workflow file and the PNG metadata only remember the last run, not the version you liked. That's the itch this node scratches. Parameter Snapshot Saver grabs the widget values off a handful of nodes, saves them under a name, and lets you apply them back whenever you want.
What it actually is
Here's the funny part: the node itself does nothing. Look at its Python source and you'll find a noop function returning an empty tuple. It has no outputs, it's not an output node, and it touches nothing during generation. The real logic lives in the pack's frontend JavaScript and a couple of tiny HTTP routes that ride on the aiohttp server ComfyUI already ships. That's why installation is painless: there's no requirements.txt, no model downloads, no CUDA deps - just drop it in and restart.
How to use it
Wire up to eight upstream node outputs into the node's node_1 through node_8 inputs - your CLIPTextEncode, a KSampler, an Empty Latent, whatever you're tuning. Type a name into snapshot_name, then hit the Save Snapshot button the pack adds to the node. The frontend reads every widget value off those connected nodes and bundles them into one named snapshot, keyed by node type. Save again with the same name and it overwrites the old bundle instead of piling up duplicates. Everything lands in a single JSON file at ComfyUI/user/default/comfyui-parameter-snapshot.json.
Restoring is where the pack earns its keep. Right-click any node and you get Snapshots > Save Current Values (a type-specific snapshot of just that one node) and Snapshots > Manage Snapshots (a dialog that applies, overwrites, renames, and deletes). There's also a Snapshots tab in the sidebar that lists everything, bundles included. The apply logic matches by node type: if your bundle captured a KSampler, applying it sets the matching widget names on every KSampler in the graph. Two samplers doing different jobs? Both get hit. A bundle isn't bound to a specific node instance, it's bound to a type - plan your wiring around that.
What gets captured
Snapshots record plain widget values only. control_after_generate is skipped - that's the randomize/increment dropdown on seed widgets, a control rather than a parameter - and anything you've converted to an input isn't a widget anymore, so it won't be captured either. If your seeds live in a Primitive node feeding the sampler, wire that primitive in too, or your "full" snapshot will quietly omit the seed.
Installation
ComfyUI Manager is the easy route: search for comfyui-parameter-snapshot and install. Or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/hahajaja/comfyui-parameter-snapshot
Then restart ComfyUI. No pip install step, no models to fetch.
Where it bites
The README owns up to one real bug: the sidebar panel's A and O buttons can fail on subgraph container nodes. The right-click dialog handles those fine, so if you've collapsed part of your workflow into a subgraph, use the right-click path and treat the panel as a non-subgraph tool for now.
Also remember where the data lives. Snapshots are a plain JSON file tied to your user profile - delete ComfyUI/user/default or switch profiles and your presets are gone. The upside of that is it's just JSON: back it up, or hand-edit it if you're brave.
This isn't a flashy node and it won't change how your images come out. It's a small, honest preset manager for people who iterate on settings all day and are tired of relearning the same recipe twice. For that, it does exactly what it claims - no API, no keys, no overhead.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| snapshot_name | STRING | — | |
| node_1opt | * | — | |
| node_2opt | * | — | |
| node_3opt | * | — | |
| node_4opt | * | — | |
| node_5opt | * | — | |
| node_6opt | * | — | |
| node_7opt | * | — | |
| node_8opt | * | — |
Outputs (0)
No outputs