Input Parameters (Citron Image Saver)
Six sampler settings, eight wires, no duplicated typing
- seed
- steps
- cfg
- sampler
- sampler_name
- scheduler
- scheduler_name
- denoise
This is the node I'd actually put on the canvas first. Six widgets - seed, steps, cfg, sampler, scheduler, denoise - and eight outputs, so the same numbers that drive your sampler also feed your save node, your filename template, and anything else in the graph that wants them. One place to change a value, no drift, and metadata that can't contradict reality.
The pack's README calls it "Combined node for seed, steps, cfg, sampler, scheduler and denoise," which is exactly right and slightly undersells it: the useful part is that it hands out both the combo-typed and the string-typed version of the sampler and scheduler, which is otherwise a two-node adapter job.
How it works
Six inputs, all required, all with the docstrings ComfyUI's own KSampler uses - the CFG tooltip is verbatim the core one about balancing creativity against prompt adherence. seed goes up to the 64-bit ceiling and has control_after_generate attached, so the familiar fixed/increment/decrement/randomize dropdown is there. steps runs 1–10000. cfg runs 0–100 in 0.1 steps; the SD-lineage sweet spot lives in 5–9, distilled and flow models want about 1, and at exactly 1 ComfyUI skips the unconditional pass entirely, which is a real speed win rather than a rounding detail. sampler is the 44-name core list, scheduler the nine-name list, denoise 0–1 in 0.01 steps.
Eight outputs: seed, steps, cfg, sampler, sampler_name, scheduler, scheduler_name, denoise. The values go through untouched; sampler and sampler_name carry the same selection in two types, and so do scheduler and scheduler_name.
That split is the entire value proposition. Wire sampler into the KSampler's sampler input (converted to a socket) and sampler_name into the Citron saver's sampler_name text input. Same for scheduler. Now try a different sampler and both the run and the record change together. Everything else - steps, cfg, seed, denoise - goes to the sampler and to the saver and, if you're using the templated filename, into %steps and %cfg as well.
What it doesn't cover: prompts, model name, width/height, clip skip. Those come from elsewhere - a String Literal for prompts, the pack's checkpoint/UNet loader for the model name, a width/height literal for size. This node is the sampler's parameter block, not the whole metadata block.
One quirk worth expecting: because these are six widgets feeding eight outputs, the canvas gets a bundle of wires from a single small node, and people often assume it's a "package" that must be unpacked before use. It isn't - the outputs are ordinary typed sockets, and you wire the ones you need. Leave the rest dangling.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/citronlegacy/ComfyUI-CitronNodes
# restart ComfyUI
Manager search is unreliable - README says support is "coming soon", the repo metadata is placeholder - so clone it. Only pip dependency is piexif, needed by the savers and required for the pack to import at all:
pip install piexif
No models. It's under Citron_ImageSaver/utils.
Common issues
- Sampler or scheduler won't connect. You're wiring the string output into a combo socket. Use
sampler/schedulerfor the KSampler and the*_nameversions for the saver. - Metadata disagrees with the run. Some other node is still driving the sampler from its own widget. The sampler's widget wins over a dangling wire every time.
- Seed changed after the run instead of before. That's
control_after_generatedoing what it says - it fires after the queue finishes, so the number in the box isn't the one that ran. Switching ComfyUI's global widget control mode to "before" fixes that permanently. - CFG of 1 makes the metadata look wrong. It isn't - CFG 1 genuinely means the negative pass was skipped, so the negative prompt in the file did nothing.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | The random seed used for creating the noise. |
| steps | INT | 201–10000 | The number of steps used in the denoising process. |
| cfg | FLOAT | 7.00–100 | The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality. |
| sampler | COMBO | The algorithm used when sampling, this can affect the quality, speed, and style of the generated output. | |
| scheduler | COMBO | The scheduler controls how noise is gradually removed to form the image. | |
| denoise | FLOAT | 1.000–1 | The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| seed | INT | seed (INT) |
| steps | INT | steps (INT) |
| cfg | FLOAT | cfg (FLOAT) |
| sampler | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | sampler (SAMPLERS) |
| sampler_name | STRING | sampler name (STRING) |
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | scheduler (SCHEDULERS) |
| scheduler_name | STRING | scheduler name (STRING) |
| denoise | FLOAT | denoise (FLOAT) |