KSampler (Arctenox's Essentials)
KSampler (Arctenox's Essentials)
- model
- positive
- negative
- latent_image
- optional_vae
- script
- MODEL
- CONDITIONING+
- CONDITIONING-
- LATENT
- VAE
- IMAGE
- seed_used
- steps
- cfg
- sampler_name
- scheduler
The classic beginner graph is Checkpoint → two CLIP Text Encode nodes → Empty Latent Image → KSampler → VAE Decode. This node collapses two of those steps into one. It's a stock KSampler that builds its own empty latent from a width, height and batch size, so you can go straight from conditioning into sampling without the Empty Latent node sitting in your way.
There's a second, sneakier reason people reach for it: it also passes out the parameters it just used - actual steps, cfg, sampler_name, scheduler - as wireable outputs, plus a seed_used that tells you the seed it really sampled with. That's the kind of thing that makes metadata workflows and batch setups a lot less fiddly.
How it works
The mechanism is unglamorous in the best way. When you give it no latent, it creates a zeros tensor shaped [batch, 4, height/8, width/8] - exactly what Empty Latent Image builds, at the usual 8× latent downsampling - then runs ComfyUI's standard comfy.sample.sample path. "No Empty Latent node" isn't a different sampler, it's just the same sampling with the latent construction folded in. If you plug a latent_image in instead, it happily becomes an img2img node and denoise suddenly matters.
The extras are where the author's personality shows up:
- Sonar. A
sonarof 0 is a pure pass-through. Any other value deterministically transforms the seed using golden-ratio math (φ⁻¹ ≈ 0.618), so you get related-but-different variations you can reproduce.seed_usedtells you what was actually sampled after the transform, which is a genuinely nice touch. - Negative seeds get hashed into a deterministic positive space instead of misbehaving.
- CFG and step safety rails. Values beyond sane ranges get scaled or capped rather than blowing up. Honest caveat: the widget sliders top out at 100 CFG and 10,000 steps, so this mostly matters if you hand-edit the workflow JSON.
The inputs that matter
model, positive, negative are obvious. Then it's mostly the normal sampler set, and these are the ones a beginner actually touches:
width,height,batch_size- defaults are 960×1280×1, a portrait SDXL-ish canvas, stepped by 8. This is your Empty Latent replacement.seedandsonar- leave sonar at 0 until you're curious.steps,cfg,sampler_name,scheduler,denoise- same dials as the stock KSampler. Default cfg is 4, which is in the right zone for SDXL-lineage models; on guidance-distilled models you'll be dropping it toward 1.vae_decode- decode to IMAGE inside the node or not. Leave it off and feed the LATENT output into a refiner for a hi-res fix.
The outputs worth wiring
LATENTandIMAGE(IMAGE only exists ifvae_decodeis on).MODEL,CONDITIONING+,CONDITIONING-,VAEpass-throughs - handy when you want to run a second pass with the same model and conditionings without rerouting everything.seed_used,steps,cfg,sampler_name,scheduler- metadata outputs that slot into Save Image With Metadata or your own logging.
Install
Via ComfyUI Manager, search Arctenox's Essentials and install, then restart. Or manually:
cd ComfyUI/custom_nodes/
git clone https://github.com/Arctenox/Arctenoxs-Essentials_ComfyUI
Then restart ComfyUI. Dependencies are just torch and numpy, plus psutil for CPU memory monitoring - no model downloads, no heavy install.
Gotchas
- Cancelling a running generation can throw
"Sampling failed: . Check that all inputs are valid tensors."The README says this is expected on cancel, safe to ignore, and can't be suppressed. Don't chase it. - Keep
sonarunder about ±1,000,000; the author warns huge values get unpredictable. - The pack itself is flagged DEPRECATED - Arctenox plans to remaster this stuff into a new combined pack. It works fine today, but don't build a workflow you'll need to maintain for years on it.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| width | INT | 96064–8192 | — |
| height | INT | 128064–8192 | — |
| batch_size | INT | 11–64 | — |
| seed | INT | 0-9223372036854776000–18446744073709550000 | — |
| sonar | INT | 0-18446744073709550000–18446744073709550000 | — |
| steps | INT | 251–10000 | — |
| cfg | FLOAT | 4.000–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 | |
| denoise | FLOAT | 1.000–1 | — |
| vae_decode | COMBO | 2 options: true, false | |
| latent_imageopt | LATENT | — | |
| optional_vaeopt | VAE | — | |
| scriptopt | SCRIPT | — |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CONDITIONING+ | CONDITIONING | — |
| CONDITIONING- | CONDITIONING | — |
| LATENT | LATENT | — |
| VAE | VAE | — |
| IMAGE | IMAGE | — |
| seed_used | INT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| sampler_name | STRING | — |
| scheduler | STRING | — |