Settings Save πΎ
Stop remembering, start a preset library that scores itself
- sampler_settings
- latent
- sampler_settings
- report
Every "what settings did I use for that good one?" is a memory problem that Settings Save turns into a lookup. It's a pass-through node - wire it between a Sampler Settings chain and Ouroboros / Chimera, fill in a preset_name, and the whole multi-stage recipe is filed into a model's preset library, optionally tagged with the measured score and time it actually took. The next time you want that look, Settings Select (or Model Select) pulls it back out with "β
4.40 Β· 31.2s" right there in the picker.
The one rule that trips people up
It saves only while preset_name is non-empty, and re-saving the same name overwrites. That's a deliberate design choice: the values worth recording arrive over wires (score, time), and a frontend button can't see those. But it means the node sits in your graph permanently, saving nothing, until you type a name - and if you leave a name in there, every re-run overwrites the preset. Get in the habit of clearing the field when you're done exploring, or use it as intended: name it when a recipe earns it.
The inputs that make it worth wiring
sampler_settings- the chain, passes through unchanged. Chain severalSampler Settingsnodes and the whole multi-stage recipe is stored as one preset; Chimera flattens it back into stages.modelvsmodel_id- the dropdown is the manual route; wiringModel Select'smodel_idoutput here files the preset under the model that actually ran, with no second pick to keep in sync and no way to file it under the wrong model by mistake. The wired input wins.scoreandseconds- the part that makes the library useful instead of a notebook. WireOuroboros'sbest_score(or a Vision Judge score pulled out of its results_json) andChimera'ssecondsoutput - Chimera times its own sampling, so the number can't be skewed by the rest of the graph. Model Select then shows and sorts by them.latent- optional, but its size is stored with the preset and comes back out of Model Select's width/height, so the preset carries the resolution the model likes.shared+families- save into the family-wide pool instead of under one model. A model declares families (e.g.flow-1024); a shared preset with matching families shows up for every model in them, so one good generic recipe isn't copied per model. The classic footgun: a typo'd family is silent - the preset simply never appears anywhere. Use theοΌ familydropdown of existing families rather than typing.tags,set_default,notes- filtering, which preset the picker lands on, and what the recipe traded off.
Outputs: sampler_settings (the passthrough) and report.
Installing it
Same pack: ComfyUI Manager β "Kinburg-Nodes", or git clone https://github.com/Kinburg/Kinburg-Nodes into ComfyUI/custom_nodes, restart. No dependencies. It's part of the pack's model-preset system (Model Capture β Model Select β Settings Save/Select), so it's most useful once you've registered at least one model - but the shared/family path works without per-model capture if that's all you need.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| sampler_settings | KINBURG_SAMPLER_CFG | The chain to save β passes through unchanged. Chain several Sampler Settings and the whole multi-stage recipe is stored as one preset (Chimera flattens it back into stages). | |
| model | COMBO | π« None | Which model these settings belong to. Register models with Model Capture first. Ignored when 'shared' is on, and overridden when 'model_id' is wired. |
| preset_name | STRING | Name to save under β SAVING HAPPENS WHEN THIS IS NON-EMPTY, and re-saving the same name overwrites. Clear the field to leave the library alone. | |
| model_idopt | STRING | Wire Model Select's 'model_id' output here and the preset is filed under the model that actually ran β no second pick to keep in sync, and no way to file it under the wrong one by mistake. Wins over the 'model' dropdown. | |
| sharedopt | BOOLEAN | false | Save into the family-wide pool instead of under one model. Fill 'families' too β the preset then shows up in Model Select for every model that declares a matching family, so a good generic recipe isn't copied per model. |
| familiesopt | STRING | Comma-separated families this preset applies to (only meaningful with 'shared'), e.g. 'flow-1024'. | |
| tagsopt | STRING | Comma-separated labels for filtering a growing library, e.g. 'fast, portrait'. | |
| set_defaultopt | BOOLEAN | false | Make this the model's default preset β what the picker lands on when you choose the model. Clears the flag on the model's other presets. |
| notesopt | STRING | What this preset is for / what it traded off. Shown in Model Select's info. | |
| scoreopt | FLOAT | Measured quality β wire Ouroboros' 'best_score', or a Vision Judge score pulled out of its results_json. Stored with the preset and shown in the picker. | |
| secondsopt | FLOAT | Measured cost β wire Chimera's 'seconds' output (it times its own sampling, so it can't be skewed by the rest of the graph). | |
| latentopt | LATENT | Optional: the latent this preset was run at. Its size is stored with the preset and comes back out of Model Select's width / height, so the preset carries the resolution the model likes. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| sampler_settings | KINBURG_SAMPLER_CFG | β |
| report | STRING | β |