Video Sampler
The KSampler-shaped part of a video graph, minus the shape guesswork
- model
- positive
- negative
- latent_noise
- samples
- sampler_report
Here's an annoying truth about video sampling: the sampler settings that ship as defaults in every ComfyUI graph are wrong for most video models. Steps 20, CFG 7, euler - that's a reasonable still-image starting point and a recipe for fried LTX output, which wants CFG around 3.5, or an underbaked Wan clip, which wants a DPM++ sampler on Karras.
Video Sampler is the low-level sampler behind Radiance's T2V and I2V pipelines, exposed as a node. It's a thin wrapper around ComfyUI's own sampling loop - no custom kernels, no shipped weights - but it does three things a stock KSampler doesn't.
What it does differently
It takes pre-built noise. latent_noise is used as both the initial noise and the start latent, so it comes from Video Latent Noise with a shape that already matches the model. There's no guessing and no "Empty Latent Image plus a noise node bolted on."
dit_config overrides your widgets. Connect the JSON from Video Model Info and, when it carries a model_name, that model's defaults replace steps, cfg, sampler_name and scheduler. The shipped defaults are opinionated and reasonable: LTX-Video 25 steps at CFG 3.5 with euler/normal, Wan 2.1 30 steps at CFG 5 with dpmpp_2m/karras, HunyuanVideo 50 steps at 7.0 with euler/simple, Wan 2.2 TI2V 5B 20 steps at 5.0 with uni_pc/simple, Mochi-1 64 steps at 4.5, CogVideoX 50 steps at 6.0 with ddim/ddim_uniform. Leave dit_config disconnected and your widget values are used exactly as typed.
It applies the per-sampler quirks. The sigma calculation replicates ComfyUI's KSampler.set_steps() behaviour including the penultimate-sigma discard for dpm_2, dpm_2_ancestral, uni_pc and uni_pc_bh2, and the partial-denoise slicing. Getting that wrong by hand is why hand-rolled video samplers drift from the reference result.
The inputs
Required: model, positive, negative, latent_noise, steps, cfg, sampler_name (25 ComfyUI samplers), scheduler (7 sigma schedules), seed.
The seed deserves a note - it seeds the sampler's own noise for ancestral and SDE samplers. The initial noise comes from latent_noise, so if you want a reproducible clip you need both seeds fixed, not just this one.
Optional: dit_config, cfg_schedule_json, and denoise.
cfg_schedule_json takes a JSON float array - from RadianceAudioCFGSchedule, say - and uses the first value as a CFG override. The pack's own known-issues list is upfront that this is a static override, not a per-step schedule; real CFG scheduling needs a sampler hook that isn't implemented.
denoise below 1.0 shortens the schedule, but the start latent is raw noise, so this is not the img2img/video-to-video strength you might assume from a stock KSampler. The tooltip says so; it's worth believing.
Outputs: samples (LATENT, into Video Batch Decode) and sampler_report (STRING) listing the model, sampler, scheduler, steps, CFG and the ultimate output shape. Connect it to a preview node once and you'll never wonder which settings actually ran again.
Install
Manager → Radiance → install → restart → refresh. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt
Windows portable users should use python_embeded\python.exe. The pack's heavy dependencies (OpenImageIO, OpenColorIO, OpenCV, imageio-ffmpeg) all install into ComfyUI's environment; there's no isolated venv and no model download for this node.
Where people get burned
CFG 7 because it was the default. Without dit_config connected you get the widget default, and 7.0 on an LTX model is a different (worse) picture. The defaults live in the JSON for a reason.
The retired tiling input. Older workflows can still send it. It's a no-op, and the report says so explicitly - ComfyUI has no model-level tiled sampling. Tile the decode instead, via Video Batch Decode's tiled decode option.
Reading denoise as video-to-video. It isn't. There's nothing in the latent but noise, so there's no original to preserve. Real v2v starts with an encoded video latent.
Two video models, one sampler. A high/low-noise Wan 2.2 pair needs the experts routed by the pipeline node; a single model input here is one expert.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Video diffusion model to sample with. | |
| positive | CONDITIONING | Positive (prompt) conditioning. | |
| negative | CONDITIONING | Negative conditioning, used by classifier-free guidance. | |
| latent_noise | LATENT | Noise latent, e.g. from RadianceVideoLatentNoise. It is used as both the noise and the start latent, so its shape must match the model. | |
| steps | INT | 251–200 | Sampling steps. Ignored when dit_config carries a model_name. |
| cfg | FLOAT | 7.00–30 | Classifier-free guidance scale. Replaced by the model default when dit_config carries a model_name, then by the first value of cfg_schedule_json. |
| sampler_name | COMBO | euler | ComfyUI sampler. Ignored when dit_config carries a model_name. |
| scheduler | COMBO | normal | ComfyUI sigma scheduler. Ignored when dit_config carries a model_name. |
| seed | INT | 00–2147483648 | Seed for the sampler's own noise (ancestral and SDE samplers). The initial noise comes from latent_noise. |
| dit_configopt | STRING | {} | JSON from RadianceVideoModelInfo — when connected, overrides steps/cfg/sampler/scheduler with model-specific defaults. |
| cfg_schedule_jsonopt | STRING | JSON float array from RadianceAudioCFGSchedule — first value overrides CFG | |
| denoiseopt | FLOAT | 1.000–1 | Fraction of the noise schedule to run (1.0 = full). The start latent is latent_noise itself, so below 1.0 this is not a video-to-video strength. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| samples | LATENT | — |
| sampler_report | STRING | — |