KSampler to Image Saver
The real fix when your saved images lie about their sampler settings
- ksampler
- seed_value
- steps
- cfg
- sampler_name
- scheduler
- denoise
ComfyUI-Image-Saver writes rich, Civitai-friendly metadata into every PNG - but only if you hand it the sampling settings, and it expects them in a specific shape. The moment you swap a stock KSampler for a config-driven one (rgthree's KSampler Config is the classic culprit), that information stops flowing and your saved images start claiming seed 0 with default settings. KSampler to Image Saver is the pack's flagship: you plug it onto any sampler's output and it extracts seed, steps, cfg, sampler name, scheduler and denoise, and hands them to Image Saver in exactly the format it wants.
This is the node that makes your metadata honest again.
How it works
The graph-introspection trick, done at scale. It parses the embedded workflow, traces its ksampler input back to the source node, then pulls values out of that node's recorded inputs by key matching. Two paths:
- If the source is a plain KSampler, it reads the six inputs directly (seed, steps, cfg, sampler_name, scheduler, denoise) and even follows wired values backward - if your seed comes from another node, it walks the chain to resolve the actual number, up to a hard stop at 99 hops.
- For anything else - KSampler Config, "alike" nodes, whatever you've got - it falls back to regex-matching input keys (
.*seed.*,^steps.*,cfg,sampler_name,scheduler,denoise) and fills whatever matches. Where the source exposes no matching key, the node's own input boxes are used as fallbacks.
The inputs on the node are real widgets, not decoration: they double as the default values for low-compatibility sources, so you can still get a sensible record out of a sampler that hides its settings.
The six outputs, all typed
Wire these straight into ComfyUI-Image-Saver's matching inputs:
- seed_value (INT)
- steps (INT)
- cfg (FLOAT)
- sampler_name (STRING)
- scheduler (STRING)
- denoise (FLOAT)
The sampler and scheduler names come from ComfyUI's own registry (44 samplers, 9 schedulers), so the enums match what KSampler itself offers, and cfg/denoise get rounded to two decimals before they travel. The description on the node says it should work with rgthree's KSampler Config - that's the setup it was built for.
Install
Ships in GPS' Supplements for ComfyUI (Goshe-nite), no pip dependencies, no models to download. ComfyUI Manager → search "GPS' Supplements for ComfyUI", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Goshe-nite/comfyui-gps-supplements
Restart; nodes land under GPSupps. It's useless without ComfyUI-Image-Saver (that's where the six outputs go), so install that pack too if it isn't already there.
Where people get burned
The Over 99 nodes searched error is the pack's most literal one - it fires when a value's wiring chain is absurdly deep, and the fix is in the error message: connect the root node directly instead. Unable to get node info means it couldn't trace the sampler behind your input, usually a bypass or a graph running without its embedded workflow. And remember it reads recorded state: if you changed a setting after the last run and expect to see it, re-run. None of that is exotic - for the normal "KSampler Config → this node → Image Saver" setup, it just works, and your Civitai uploads finally show the settings that made the image.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| ksampler | * | — | |
| seed_value | INT | 0 | — |
| steps | INT | 30 | — |
| cfg | FLOAT | 8.0 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 1.000–1 | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| seed_value | INT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| sampler_name | STRING | — |
| scheduler | STRING | — |
| denoise | FLOAT | — |