Nodes/radiance/Video Sampler
ComfyUI Node

Video Sampler

The KSampler-shaped part of a video graph, minus the shape guesswork

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
Video Sampler
  • model
  • positive
  • negative
  • latent_noise
  • samples
  • sampler_report
◄steps25►
◄cfg7.0►
◄sampler_nameeuler►
◄schedulernormal►
◄seed0►
◄dit_config{}►
◄cfg_schedule_json►
◄denoise1.00►

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.

CategoryFXTD STUDIOS/Radiance/Video

Inputs (12)

NameTypeDefaultDescription
modelMODELVideo diffusion model to sample with.
positiveCONDITIONINGPositive (prompt) conditioning.
negativeCONDITIONINGNegative conditioning, used by classifier-free guidance.
latent_noiseLATENTNoise latent, e.g. from RadianceVideoLatentNoise. It is used as both the noise and the start latent, so its shape must match the model.
stepsINT251–200Sampling steps. Ignored when dit_config carries a model_name.
cfgFLOAT7.00–30Classifier-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_nameCOMBOeulerComfyUI sampler. Ignored when dit_config carries a model_name.
schedulerCOMBOnormalComfyUI sigma scheduler. Ignored when dit_config carries a model_name.
seedINT00–2147483648Seed for the sampler's own noise (ancestral and SDE samplers). The initial noise comes from latent_noise.
dit_configoptSTRING{}JSON from RadianceVideoModelInfo — when connected, overrides steps/cfg/sampler/scheduler with model-specific defaults.
cfg_schedule_jsonoptSTRINGJSON float array from RadianceAudioCFGSchedule — first value overrides CFG
denoiseoptFLOAT1.000–1Fraction 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)

NameTypeDescription
samplesLATENT—
sampler_reportSTRING—