Nodes/radiance/T2V Pipeline
ComfyUI Node

T2V Pipeline

A whole text-to-video graph in one node, minus the honesty

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
T2V Pipeline
  • model
  • clip
  • vae
  • character_conditioning
  • video_latent
  • preview_frames
  • positive_cond
  • pipeline_report
◄positive_promptcinematic HDR video, stunning visuals, 4K, film grain►
◄negative_promptwatermark, blurry, low quality, sdr, flickering►
◄width768►
◄height512►
◄frames25►
◄seed0►
◄dit_config{}►
◄cfg_schedule_json►
◄steps0►
◄cfg0.0►
◄sampler_nameeuler►
◄schedulernormal►
◄peak_nits1000►
◄target_gamutBT.2020►
◄hdr_eotfPQ (ST.2084)►
◄hdr_strength0.50►

Normally a text-to-video graph is a dozen nodes: model loader, text encoders, two prompt encodes, latent noise, sampler, VAE decode, save. T2V Pipeline collapses the middle of that into one node you wire a MODEL, a CLIP and a VAE into. It's a convenience wrapper, and provided you understand one thing about it - the HDR part is prompt text, not pixels - it's a genuinely pleasant way to run video.

What it does

You give it model, clip and vae, two prompts, a size, a frame count and a seed, and it does the whole sampling loop through ComfyUI's own sampler infrastructure. No custom kernels, no shipped weights. The pack's own header for this file lists the supported families: LTX-Video 2.x, HunyuanVideo, Wan 2.1, CogVideoX, Mochi-1. Image models are rejected outright - a 2-D latent model gets a clear error instead of a strange result.

The HDR controls deserve the honest framing up front. peak_nits, target_gamut and hdr_eotf append descriptors to your prompt text - "wide color gamut rec2020 vivid, HDR10 PQ specular highlights, 1000 nits HDR" and so on. Pixel change: none. The node's docs say it twice: "Prompt text only, no pixel change." What they do is steer a model that has seen HDR-described footage toward a punchier, specular-heavy look. hdr_strength (default 0.5) is the weight of that appended text, encoded as (text:weight) with weight = 2 × strength. 0.5 is neutral, 1.0 doubles the emphasis, 0 leaves it out entirely.

That's not a scam, it's just a different job from the pack's HDR Decode nodes. If you want real PQ pixels, sample here and encode later with Video HDR Decode.

The settings that matter

frames (default 25) - the tooltip is the most useful line in the node: the latent holds ceil(frames / temporal compression) frames, so use a multiple of the compression plus 1 (25, 49, 81) to get exactly this many frames back. Ask for 24 and you'll get a slightly different count than you asked for.

steps and cfg default to 0, which means "use the model default" - the LTX-Video preset's 25 steps and 3.5 CFG when no dit_config is connected. Don't read 0 as "zero guidance"; it's "you decide, node."

dit_config is the string output of Video Model Info. Connect it and, if it carries a model_name, that model's defaults replace steps, cfg, sampler_name and scheduler - the widgets stop mattering. This is the difference between an LTX clip and a Wan clip sampling correctly, so it's worth the extra node.

character_conditioning is optional CONDITIONING whose tokens get appended to the positive prompt at weight 0.75; it's skipped without complaint if the embedding width differs. cfg_schedule_json takes a JSON float array from the pack's CFG schedule node and uses only its first value - a static override, because CFG doesn't vary per step here. The known-issues file says that plainly rather than pretending otherwise.

Outputs: video_latent, preview_frames, positive_cond and pipeline_report. The preview is decoded through your VAE so you can look at a frame without a separate decode node - convenient, and it does cost VRAM, so on a long clip it's the first thing to disconnect.

Install

Manager → search 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: python_embeded\python.exe. Note this node ships no model weights and no video codecs - you still need your own video model, VAE and text encoder, which for a 2026 setup means something like LTX 2.3 or Wan 2.2 loaded through the pack's own Video Loader (or ComfyUI's). Gated repositories on Hugging Face need the licence accepted and HF_TOKEN set.

Where people get burned

The frame-count arithmetic above, mostly - expecting exactly frames back from a non-conforming number.

Then the decode: the latent is not a video file. Wire video_latent into Video Batch Decode (turn output_linear on if the next node is an HDR one), and note the pack's own warning that the VAE is lossy in the highlights - "HDR through a VAE" is documented in the known-issues list, so don't judge a final HDR master by what the preview frame looks like.

And read pipeline_report. It's the node's own account of what it actually ran, which is the fastest way to discover that your dit_config overrode the steps you carefully set.

CategoryFXTD STUDIOS/Radiance/Video

Inputs (20)

NameTypeDefaultDescription
modelMODELVideo diffusion model. Image models (2-D latents) are rejected.
clipCLIPText encoder matching the model, used for both prompts.
vaeVAEVAE matching the model. Its compression sets the latent shape and it decodes preview_frames.
positive_promptSTRINGcinematic HDR video, stunning visuals, 4K, film grainWhat to generate. HDR descriptors from peak_nits, target_gamut and hdr_eotf are appended unless hdr_strength is 0.
negative_promptSTRINGwatermark, blurry, low quality, sdr, flickeringWhat to steer away from, encoded with the same text encoder.
widthINT76864–4096Output width in pixels, rounded down to a multiple of the VAE's spatial compression.
heightINT51264–4096Output height in pixels, rounded down to a multiple of the VAE's spatial compression.
framesINT251–512Requested frames. The latent holds ceil(frames / temporal compression) frames; use a multiple of the compression plus 1 (e.g. 25, 49, 81) to get exactly this count back.
seedINT00–2147483648Seed for the initial noise and the sampler.
dit_configoptSTRING{}JSON from RadianceVideoModelInfo. When it carries a model_name, that model's defaults replace steps, cfg, sampler_name and scheduler.
character_conditioningoptCONDITIONINGOptional conditioning whose tokens are appended to the positive prompt at weight 0.75. Skipped if its embedding width differs.
cfg_schedule_jsonoptSTRINGJSON float array from RadianceAudioCFGSchedule. Only the first value is used, as a static CFG override; CFG does not vary per step.
stepsoptINT00–200Sampling steps. 0 uses the model default (the LTX-Video preset's 25 when no dit_config is connected). Ignored when dit_config carries a model_name.
cfgoptFLOAT0.00–30Guidance scale. 0 uses the model default (the LTX-Video preset's 3.5 when no dit_config is connected). cfg_schedule_json overrides it.
sampler_nameoptCOMBOeulerComfyUI sampler. Ignored when dit_config carries a model_name.
scheduleroptCOMBOnormalComfyUI sigma scheduler. Ignored when dit_config carries a model_name.
peak_nitsoptCOMBO1000Adds '<n> nits HDR' to the prompt. Prompt text only, no pixel change; 100 requests an SDR look.
target_gamutoptCOMBOBT.2020Adds the selected gamut descriptor to the prompt. Prompt text only, no pixel conversion.
hdr_eotfoptCOMBOPQ (ST.2084)Adds a transfer-function descriptor to the prompt. Prompt text only, no pixel encoding.
hdr_strengthoptFLOAT0.500–1Prompt weight of the appended HDR descriptors (gamut, EOTF, peak nits), as (text:weight) with weight = 2 x strength: 0.5 is neutral, 1.0 doubles their emphasis, 0 leaves them out.

Outputs (4)

NameTypeDescription
video_latentLATENT—
preview_framesIMAGE—
positive_condCONDITIONING—
pipeline_reportSTRING—