Nodes/GPS' Supplements for ComfyUI/KSampler to Image Saver
ComfyUI Node

KSampler to Image Saver

The real fix when your saved images lie about their sampler settings

By Goshe-nite·Created about a year ago·Updated about a year ago· 11
KSampler to Image Saver
  • ksampler
  • seed_value
  • steps
  • cfg
  • sampler_name
  • scheduler
  • denoise
seed_value0
steps30
cfg8.0
sampler_name
scheduler
denoise1.00

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.

CategoryGPSupps

Inputs (7)

NameTypeDefaultDescription
ksampler*
seed_valueINT0
stepsINT30
cfgFLOAT8.0
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1

Outputs (6)

NameTypeDescription
seed_valueINT
stepsINT
cfgFLOAT
sampler_nameSTRING
schedulerSTRING
denoiseFLOAT