Nodes/Umbra Nodes/KSampler (Umbra Lab)
ComfyUI Node

KSampler (Umbra Lab)

A KSampler that tells the truth about what it ran

By Nocturne-Ai-Labs·Created 2 months ago·Updated 10 days ago· 0
KSampler (Umbra Lab)
  • model
  • positive
  • negative
  • latent_image
  • samples
  • model_name
  • seed
  • steps
  • cfg
  • sampler_name
  • scheduler
seed0
steps20
cfg7.0
sampler_name
scheduler
denoise1.00
seed_modeincrement_per_image
seed_step1
repeat_behaviorinherit
repeat_step1
style_seed_behaviornormal

KSampler (Umbra Lab) is a stock-compatible sampler wrapper with one genuinely useful upgrade: it hands you back everything it actually did. Beyond the samples latent, it outputs model_name, seed, steps, cfg, sampler_name, and scheduler as typed values. Wire those into Umbra's Save Image node and the PNG's metadata matches reality - no more opening an image and finding "euler, normal" recorded while the graph was actually running dpmpp_2m with Karras.

How it works

Under the hood it calls ComfyUI's own common_ksampler, so the sampling math is identical to the core node - this is not a reimplementation, it's a wrapper with better plumbing. The extras:

  • Metadata passthrough. The model name is discovered from your graph (it walks the workflow to find what checkpoint feeds the model input), and the seed/steps/cfg/sampler/scheduler you set come back out as typed outputs. This is the piece that makes the save nodes' self-documenting PNGs work, and it's genuinely handy even if you never use the save node - you can show the seed on a Note widget or log it somewhere.
  • Seed management for batches and repeats. The optional seed_mode, seed_step, repeat_behavior, and repeat_step inputs let one sampler run a batch with per-image seeds, and control what happens across queue runs. The default seed_mode is increment_per_image, so a 4-image batch with seed 10 samples at 10, 11, 12, 13. repeat_behavior defaults to inherit, which is smart: it checks where the seed came from - if an upstream UmbraSeedValue already owns repeat progression, this node stands down; if the seed is a plain static widget, it increments per repeat so you get variation on re-run.
  • style_seed_behavior - the same_seed_style_cycle mode ties into Umbra's Power Prompter prompt-card system: style-expanded jobs reuse the base seed instead of advancing, so you iterate on style without churning the seed.

The inputs that matter

Required set is the familiar one - model, positive, negative, latent_image, seed, steps, cfg, sampler_name, scheduler, denoise. For a beginner, denoise is the dial that separates txt2img (1.0) from img2img (lower = keep more of the source), and seed/seed_mode is where you get per-image variation in a batch. The repeat_* inputs are worth leaving alone until you're comfortable with the seed node, because both nodes cooperating is the design - configure one owner, not two.

Installing it

Part of Umbra-Nodes, the ComfyUI companion pack for Umbra Studio (NocturneLabs' open-source, local-first AI creation suite). Install via ComfyUI Manager (search "Umbra Nodes") or:

cd ComfyUI/custom_nodes
git clone https://github.com/Nocturne-Ai-Labs/Umbra-Nodes

Restart ComfyUI. The pack declares no pip dependencies and this node needs nothing beyond stock ComfyUI.

Gotchas

The always-recompute behavior: when a seed mode or repeat behavior is set to vary per run, the node deliberately marks itself as changed every execution (the NaN trick the plumbing docs describe), so ComfyUI re-runs the whole branch each time. That's by design - a sampler that varies seeds can't cache. If your graph suddenly feels like it re-runs everything on every queue, this is why. Second: it's easy to wire an upstream seed with its own control_after_generate and also set repeat_behavior here - then the seed advances twice. The node tries to detect this, but the clean rule is: one seed owner per graph.

CategoryUmbra Lab

Inputs (15)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
seedINT00–18446744073709550000
stepsINT201–10000
cfgFLOAT7.00–100
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
seed_modeoptCOMBOincrement_per_image3 options: fixed, increment_per_image, random_per_image
seed_stepoptINT11–18446744073709550000
repeat_behavioroptCOMBOinherit4 options: inherit, increment_per_repeat, random_per_repeat, none
repeat_stepoptINT11–18446744073709550000
style_seed_behavioroptCOMBOnormal2 options: normal, same_seed_style_cycle

Outputs (7)

NameTypeDescription
samplesLATENT
model_nameSTRING
seedINT
stepsINT
cfgFLOAT
sampler_nameSTRING
schedulerSTRING