Nodes/ComfyUI-FlashVSR-Stock/FlashVSR Tiny Decode
ComfyUI Node

FlashVSR Tiny Decode

The fast decode that doesn't blow up your VRAM

By Pizzawookiee·Created about a month ago·Updated 7 days ago· 2
FlashVSR Tiny Decode
  • samples
  • decoder
  • video
  • IMAGE
output_chunk_size4
temporal_batch_size1
profile_cuda_eventsfalse

After the FlashVSR One-Step Sampler hands you a latent, something has to turn it into actual pixels. You have two choices in this pack: the stock Wan VAE (the quality reference, loaded with ComfyUI's regular VAE loader) or this node, which runs FlashVSR's Tiny Conditional Decoder. TCDecode is the fast path - a smaller decoder that's a lot friendlier to low-VRAM cards - with the honest caveat that it's a different decoder than the Wan VAE, so its output won't byte-match the VAE's. Fast and good, just not identical.

How it works

Three required inputs: samples (the LATENT from the sampler path), decoder (the FLASHVSR_DECODER from Load FlashVSR TCDecoder), and video (the FLASHVSR_VIDEO metadata from Prepare Video for FlashVSR). It returns a single IMAGE batch, ready for FlashVSR Postprocess and then your save node. The video metadata matters because the decoder uses it to know the true output size, frame count, and where the real frames start - the crop step runs inside the decode, so don't skip wiring it.

The VRAM trick is in the two optional knobs:

  • temporal_batch_size (default 1) - latent timesteps decoded together. At 1, it's a true frame-sequential path with one high-res frame active at a time - the minimum-VRAM config. Bump to 2 and GPU utilization often improves substantially; 4 is faster when it fits but can use roughly 1.5–3x the decoder activation VRAM. The important property: it's bounded, so it doesn't grow with clip length the way a naive whole-video decode would.
  • output_chunk_size (default 4) - decoded frames staged on GPU before one copy into the final tensor. 1 minimizes VRAM further; 4 matches TCDecoder's temporal output group. The README's lowest-VRAM recipe is temporal_batch_size=1 plus output_chunk_size=1, and that's exactly the configuration to try when a decode OOMs on you.

There's also profile_cuda_events (default off) - it prints resolution-grouped timings plus peak allocated/reserved VRAM, which is genuinely useful for diagnosing a decode that's right on the edge, but it adds a final CUDA synchronization, so leave it off in normal runs.

Installing it

It's part of the ComfyUI-FlashVSR-Stock pack with the other nine nodes - one install covers all of them. ComfyUI Manager: search ComfyUI FlashVSR Stock Wan, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/Pizzawookiee/ComfyUI-FlashVSR-Stock.git
cd ComfyUI-FlashVSR-Stock
python -m pip install -r requirements.txt

Restart afterward. The decoder weights (TCDecoder.safetensors) come from pizzawookiee/FlashVSR-1.1 on Hugging Face into lowercase ComfyUI/models/flashvsr/. Python deps are light - einops, safetensors, a Triton runtime.

Common issues

  • Decode OOM. Drop to temporal_batch_size=1 and output_chunk_size=1 - that's the documented floor, and it's the pack's whole reason to exist (the README opens with "If you're having OOM errors with other ComfyUI FlashVSR nodes, try this one").
  • Output looks different from the stock VAE's. Yes - different decoder. If the difference bothers you, decode with the stock Wan VAE instead; the README treats that as the quality reference and the graph supports both.
  • Colors look off. TCDecoder emits display-range RGB, so if something upstream assumed the usual latent-roundtrip convention, your colors can shift. The decode clamps to display range; wire the output straight to FlashVSR Postprocess, which can run an optional AdaIN/wavelet color correction against the resized input if you want the color matched back.

Tiny Decode is the node that makes FlashVSR viable on a 6 GB card - if you can run the sampling, this is usually where the pack proves it's worth the setup.

CategoryFlashVSR/decoding

Inputs (6)

NameTypeDefaultDescription
samplesLATENT
decoderFLASHVSR_DECODER
videoFLASHVSR_VIDEO
output_chunk_sizeoptINT41–16Decoded frames staged on the GPU before one copy to the final IMAGE tensor. 1 minimizes VRAM; 4 matches TCDecoder's temporal output group.
temporal_batch_sizeoptINT11–4Latent timesteps decoded together. 1 uses a true depth-first path with one generated high-resolution frame active at a time; 2 often improves GPU utilization substantially; 4 is faster when it fits but can use roughly 1.5-3x the decoder activation VRAM. This remains bounded and does not grow with the complete clip duration.
profile_cuda_eventsoptBOOLEANfalsePrint TCDecoder CUDA-event timings grouped by resolution for conditioning transfer, pixel unshuffle, convolutions, MemBlocks, TGrow, state updates, crop/clamp and output copies, plus wall time and peak allocated/reserved VRAM. Profiling adds a final CUDA synchronization.

Outputs (1)

NameTypeDescription
IMAGEIMAGE