KSampler Bridge to Text (SEB)
A KSampler 'Controller' That Actually Just Captures Your Settings as Text
- latent
- text_overlay
- latent
- seed
- steps
- cfg
- sampler_name
- scheduler
- start_time
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()asstart_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_timeis 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 91–10000 | — |
| cfg | FLOAT | 1.00–100 | — |
| 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 |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| text_overlay | STRING | — |
| latent | LATENT | — |
| seed | INT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| sampler_name | 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 | — |
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | — |
| start_time | FLOAT | — |