Nodes/ComfyUI_FlashVSR/FlashVSR_SM_Model
ComfyUI Node

FlashVSR_SM_Model

FlashVSR_SM_Model is the loader that decides which FlashVSR you're actually running

By smthemex·Created about a year ago·Updated 8 days ago· 406
FlashVSR_SM_Model
    • FlashVSR_SM_Model
    ◄dit▾►
    ◄proj_pt▾►
    ◄emb_pt▾►
    ◄version▾►
    ◄tiny_longfalse►
    ◄offloadfalse►
    ◄plus_temporal▾►
    ◄plus_attn▾►

    Nothing renders in this node. It loads weights, and then it decides - silently, from two dropdowns - whether you get FlashVSR v1.0, v1.1, or the newer FlashVSR+ (plus). Get those dropdowns wrong and the whole graph runs beautifully and looks worse than a bilinear resize.

    That's worth understanding before you touch anything else, because this pack is a manual build, not an all-in-one. You wire the pipeline yourself: model loader → sampler → VAE → decoder. FlashVSR_SM_Model is step one.

    What FlashVSR is, and why the loader matters

    FlashVSR is OpenImagingLab's streaming video super-resolution model - a one-step, DMD-distilled diffusion restorer that arrived in October 2025 and got adopted fast for one reason: speed. It's the model people actually switched to from SeedVR2 for normal-looking footage, and the split has stayed roughly there: FlashVSR when the source is already decent and you want it done, SeedVR2 when the source is genuinely tiny and you can afford the compute. Later reporting has FlashVSR reading as higher fidelity and faster, SeedVR2 as sharper and slower.

    The loader is where that model gets assembled: a DiT checkpoint (diffusion_pytorch_model_streaming_dmd*.safetensors), the LQ 4× projection that feeds your low-res frames into it (LQ_proj_in.ckpt), and the positional/cross-KV embedding file (posi_prompt.pth). Those three are version-specific, and mixing them is the single most common way to make FlashVSR look bad.

    The inputs that matter

    The three file pickers - dit, proj_pt, emb_pt - are combos built by matching filenames in ComfyUI/models/FlashVSR, not by inspecting the files. dit only lists names containing "dmd" or "dit", proj_pt only names containing "proj", emb_pt only names containing "prompt". Rename your download to something sensible and it vanishes from the list. Leave one on "none" and the node refuses to run with Please select the emb pt, dit, proj_pt file.

    Then version, which is the actual decision:

    • 1.1 or 1.0 - the classic path. Pick the one your weights belong to. The README is blunt that a 1.1 DiT needs the 1.1 projection (and vice versa) or quality degrades.
    • plus_turbo / plus_base - FlashVSR+. One-step, hybrid attention, and the thing that makes untiled 4K plausible on a 24GB card. Turbo vs base must match the weight file you downloaded; it's not a speed slider.

    The booleans:

    • offload - keeps the DiT on the CPU and shuffles it to the GPU only while it's denoising. Turn it on when you're short on VRAM. It costs you the load-everything-once convenience, so leave it off if you can.
    • tiny_long - swaps in the chunked long-video pipeline instead of the whole-clip one, for footage too long to hold at once. This one has a hard requirement: your FlashVSR_SM_Vae node must be loading the TCDecoder, because that's the only decoder the long path supports. Queue a long run with a Wan VAE selected and you get a clear error about it.

    Two more, which only apply in plus mode: plus_temporal (4, 2 or 1 frames per latent frame - the README suggests 2 or 1 for high-motion footage, at a speed cost) and plus_attn (sdpa, auto, block_sparse, triton_block_sparse). Leave plus_attn on sdpa unless you've actually built something better; triton_block_sparse needs the optional operators/flashvsr_attn build, and block_sparse wants the compiled Block-Sparse-Attention library and, per the pack's own comments, data-centre-class cards. Selecting a backend you never installed fails at build time.

    Output

    One thing: a FlashVSR_SM_Model wire. It goes into FlashVSR_SM_KSampler's model input, and nowhere else.

    Install

    Via ComfyUI Manager, search the pack title, or from a terminal:

    cd ComfyUI/custom_nodes
    git clone https://github.com/smthemex/ComfyUI_FlashVSR
    cd ComfyUI_FlashVSR
    pip install -r requirements.txt
    

    Restart ComfyUI. Then drop the weights in place - the FlashVSR folder is created automatically if it's missing:

    ComfyUI/models/FlashVSR/
    ├── diffusion_pytorch_model_streaming_dmd.safetensors   # the DiT
    ├── LQ_proj_in.ckpt                                     # projection
    └── posi_prompt.pth                                     # 4MB, the embeddings
    

    Both v1.0 and v1.1 checkpoints live on HuggingFace under JunhaoZhuang/FlashVSR and JunhaoZhuang/FlashVSR-v1.1; plus weights under ruchangyao/FlashVSR_plus. The plus embedding file is a different posi_prompt.pth from the GitHub repo's prompt_tensor folder - don't reuse the v1.0 one. Block-Sparse-Attention is optional and compiling it is its own afternoon; the README documents the route if you want the official-quality attention path.

    Troubleshooting

    Empty dropdowns. Your file names don't contain the magic substrings. Rename to include dmd/dit, proj, and prompt respectively, then refresh.

    Output looks washed out or over-sharpened. You've mixed a 1.1 DiT with a 1.0 projection, or picked the wrong version for the weights. Match all three files to one release.

    Plus mode throws a CUDA error. The plus pipeline is NVIDIA-only by construction in this pack; there's no CPU or MPS fallback.

    Out of memory before anything appears to happen. This node is what fills the GPU. Set offload, and read the KSampler and Decoder pages next - resolution and decode tiling are where the rest of your VRAM goes.

    CategoryFlashVSR

    Inputs (8)

    NameTypeDefaultDescription
    ditCOMBO1 options: none
    proj_ptCOMBO1 options: none
    emb_ptCOMBO1 options: none
    versionCOMBO4 options: 1.1, 1.0, plus_turbo, plus_base
    tiny_longBOOLEANfalse—
    offloadBOOLEANfalse—
    plus_temporalCOMBO3 options: 4, 2, 1
    plus_attnCOMBO4 options: sdpa, auto, block_sparse, triton_block_sparse

    Outputs (1)

    NameTypeDescription
    FlashVSR_SM_ModelFlashVSR_SM_Model—