Prepare Video for FlashVSR
Resize first, then let this node pack your frames
- images
- video
- latent
- width
- height
- output_frames
The display name says "Prepare," and the description says the same thing, and neither is marketing spin: this node does not upscale. It is the one that catches people out most, because it sits at the front of a video-super-resolution pack and looks like the "do the thing" node. It isn't. You do the resizing before this node, with any stock ComfyUI image-resize node, and then this node packs the already-resized frames into the shape FlashVSR's Wan model actually wants.
FlashVSR is a 4x video super-resolution model - one-step, fast, the open video upscaler the community actually adopted back in late 2025. It's designed to take a low-res clip and produce a 4x larger one, so the workflow is: load your video, resize the frames up to your target output dimensions, then feed those resized frames here. The node's own tooltip says it plainly: "Frames already resized to the intended output width and height. Use stock ImageScale/ImageScaleBy or any other resizing node first."
How it works
The node takes your resized IMAGE frames and does two quiet jobs. First, it adds FlashVSR's padding: spatial padding to make dimensions line up on 128-pixel boundaries, and temporal padding at the tail. Second, it builds the matching Wan latent - the empty latent that the FlashVSR One-Step Sampler will fill through FlashVSR's single-step model calls. It also records the metadata that the later nodes use to undo all that padding, which is the part beginners forget exists.
That's why it has five outputs:
- video (
FLASHVSR_VIDEO) - the metadata bundle. Wires into Configure FlashVSR Upscaling and FlashVSR Postprocess. - latent (
LATENT) - the initial latent for the sampler path. - width / height / output_frames (
INT) - handy for a Show Text node or for wiring into downstream video nodes that need to know the shape.
Don't be surprised the "video" output isn't images - it's a struct describing the prepared clip, not the pixels. The pixels travel in the latent.
Installing it
It ships in the ComfyUI-FlashVSR-Stock pack with the other nine nodes. 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. Dependencies are just einops, safetensors, and a Triton runtime; the model weights are a separate download from pizzawookiee/FlashVSR-1.1 on Hugging Face into ComfyUI/models/flashvsr/.
Common issues
- Everything comes out the wrong size. You fed it source-resolution frames. Resize to your target output resolution first - that's the whole contract.
- "No lq safetensors found" / empty model menus downstream. This node doesn't check the model folder, but the next nodes do. Confirm the files are in lowercase
ComfyUI/models/flashvsr/and restart. - Tiny Decode or Postprocess crop your video strangely. They're reading the
videometadata from this node to remove the padding it added. If you swap in avideofrom a different source, the crop math goes wrong - keep this node'svideooutput wired straight through.
One more thing worth internalizing: FlashVSR is intended for 4x restoration, but the node lets other scales run. If you're upscaling 2x, it works - you're just not using the model the way it was trained, and nobody should be surprised if the result isn't the model's best foot forward.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Original low-resolution input frames. Do not bicubic upscale them before this node. | |
| scale_multiplier | FLOAT | 4.001–8 | Target spatial scale. LQ, TCDecoder and optional color correction resize only the frames they currently need. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| video | FLASHVSR_VIDEO | — |
| latent | LATENT | — |
| width | INT | — |
| height | INT | — |
| output_frames | INT | — |