Nodes/ComfyUI_Node_Pack/KSampler Bridge to Text (SEB)
ComfyUI Node

KSampler Bridge to Text (SEB)

A KSampler 'Controller' That Actually Just Captures Your Settings as Text

By Seb-Lis·Created 9 months ago·Updated 9 months ago· 0
KSampler Bridge to Text (SEB)
  • latent
  • text_overlay
  • latent
  • seed
  • steps
  • cfg
  • sampler_name
  • scheduler
  • start_time
seed0
steps9
cfg1.0
sampler_name
scheduler

Let's get the misleading name out of the way: KSampler Bridge to Text (SEB) - the class is KSamplerControl - does not sample anything. It doesn't touch your denoising, it isn't a better KSampler, and you still need a real KSampler node downstream. What it does is sit at the front of your sampling block, capture the parameters you set, stamp a start time, and hand you a formatted text string describing the generation. It's the "bridge" between your sampler and a text overlay, and it's the first node in a three-node chain that burns your seed, steps, CFG, and sampler into the final image.

What it actually does

Every time it runs, KSamplerControl does three things:

  • Records time.time() as start_time.
  • Peeks at the latent you fed it, reads the tensor shape, and multiplies by 8 to work out the real image resolution (the VAE downsamples 8×, so the node corrects for it).
  • Builds a multi-line string like Seed: 123\nSteps: 9 | CFG: 1.0\neuler | simple\nResolution: 1024x1024.

Then it passes everything through untouched. All your inputs flow straight out again, which is the point - you wire those outputs into the actual KSampler, and the string goes to the rest of the overlay chain.

That's a clean design detail: the sampler and scheduler dropdowns come directly from comfy.samplers.KSampler, so the values it emits are guaranteed to be valid for the KSampler you're feeding. No out-of-range enum, no "unknown sampler" validation errors.

The inputs that matter

  • latent - from an Empty Latent Image or a previous sampler. Needed mainly so the node can report resolution.
  • seed, steps, cfg - these are just integers/floats; set them here and they become your overlay text and your KSampler's inputs.
  • sampler_name / scheduler - 44 sampler choices and 9 scheduler choices, identical to what the stock KSampler offers.

One thing to notice: the defaults are steps=9 and cfg=1.0. That's not a classic SDXL setup (which usually wants 20–30 steps, CFG 4–7) - it's distilled-model territory. The author clearly built this for the modern Turbo/Lightning/flow-matching era where 8 steps and CFG 1 are normal. If you're on a conventional SD 1.5 or SDXL checkpoint, override those defaults, or your overlay will lie about what a sensible generation looks like.

How to install it

This pack has zero Python dependencies of its own and downloads no models - the code only needs torch, PIL, and comfy.samplers, all of which ship with ComfyUI. So install is the easy kind:

cd ComfyUI/custom_nodes/
git clone https://github.com/Seb-Lis/ComfyUI_Node_Pack

Restart ComfyUI. Or, lazier and recommended: open ComfyUI Manager → Install Custom Nodes, search for "ComfyUI_Node_Pack" (the display name you'll see in the node list is "KSampler Bridge to Text (SEB)"), and click install.

Gotchas

  • Don't skip the real KSampler. The node only records and passes through. Feed its latent, seed, etc. outputs into a normal KSampler or you get no image at all.
  • start_time is when this node executes, not when sampling finishes. Because the KSampler depends on this node's outputs, that's effectively the moment before sampling - which is exactly what the pack's Generation Time node expects.
  • No model name, no prompt. The overlay only contains what you feed it. If you want the checkpoint baked in too, you're wiring that yourself with a text node.
Categorysampling/control

Inputs (6)

NameTypeDefaultDescription
latentLATENT
seedINT00–18446744073709550000
stepsINT91–10000
cfgFLOAT1.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

Outputs (8)

NameTypeDescription
text_overlaySTRING
latentLATENT
seedINT
stepsINT
cfgFLOAT
sampler_nameeuler,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
schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal
start_timeFLOAT