Skip to main content
Causal Forcing is a video generation technique that applies recurrent conditioning during inference, where each generated frame is fed back into the model to predict the next frame. This produces smooth, temporally consistent videos from a single start image in as few as 1 to 4 inference steps. This workflow uses Wan2.1 and supports both Causal Forcing (standard) and Causal Forcing++ (enhanced) modes. Causal Forcing I2V workflow
Make sure your ComfyUI is updated.Workflows in this guide can be found in the Workflow Templates. If you can’t find them in the template, your ComfyUI may be outdated. (Desktop version’s update will delay sometime)If nodes are missing when loading a workflow, possible reasons:
  1. You are not using the latest ComfyUI version (Nightly version)
  2. Some nodes failed to import at startup

Download Workflow

Download JSON or search “Causal Forcing” in Template Library

How it works

Unlike standard video generation which processes all frames in parallel, Causal Forcing treats video generation as a sequential process:
  1. The model takes an input image as the first frame
  2. It generates the next frame conditioned on the previous one
  3. Each new frame becomes the input for the next prediction
  4. This repeats for the desired number of frames
This recurrent approach creates strong temporal consistency — each frame naturally follows from the one before it — and can produce high-quality results with very few inference steps (1 to 4).

Learn about Subgraph

This workflow uses a Subgraph node for modular processing. Check out the Subgraph documentation to learn how to customize and extend the workflow.

Causal Forcing vs Causal Forcing++

ModeDescription
Causal ForcingStandard recurrent conditioning. Good quality with 2–4 steps.
Causal Forcing++Enhanced mode that applies additional conditioning for better temporal coherence. Works well with just 1–2 steps.

Using the workflow

Inputs

The workflow accepts a single input image (the first frame) and a text prompt describing the desired video content (optional).
SettingDescription
first_frame (required)The starting image for the video. Load a PNG/JPG via the LoadImage node.
positive_prompt (optional)A text description of the desired video content. Leave empty for no conditioning.
duration (optional)The number of frames to generate. Default: number of frames in the model’s expected output.

WAN I2V subgraph parameters

These are exposed as controls on the blueprint subgraph node:
ParameterDefaultDescription
unet_nameThe Wan2.1 I2V model checkpoint to use
clip_nameThe CLIP / text encoder model for the prompt
vae_nameThe VAE model for encoding/decoding
widthOutput video width
heightOutput video height
noise_seedSeed for reproducibility

Steps to run

  1. Load an image — use the LoadImage node to load your starting frame
  2. Write a prompt (optional) — describe the desired video content
  3. Set duration — how many frames to generate
  4. Select models — choose Wan2.1 I2V checkpoint, CLIP, and VAE
  5. Choose mode — Causal Forcing or Causal Forcing++ (set via the subgraph’s internal configuration or a Causal Forcing-specific input if available)
  6. Run — frames will be generated sequentially and saved to ComfyUI/output/

Model downloads

Download the Wan2.1 I2V model and required files. Place them in the corresponding models/ subdirectories.

Wan2.1 I2V

Wan2.1 I2V 14B

wan2.1_i2v_480p_14B_fp16.safetensors — Wan2.1 I2V 14B checkpoint

Wan2.1 I2V 1.3B

wan2.1_t2v_1.3B_fp16.safetensors — Wan2.1 1.3B checkpoint (8GB VRAM minimum)

CLIP and VAE

CLIP (google-bert)

google-bert/bert-base-uncased — CLIP text encoder

VAE (Wan2.1)

Wan2.1_VAE_bf16.safetensors — Wan2.1 VAE

Model storage location

📂 ComfyUI/
├── 📂 models/
│   ├── 📂 diffusion_models/
│   │      └── wan2.1_i2v_480p_14B_fp16.safetensors (or 1.3B variant)
│   ├── 📂 text_encoders/
│   │      └── bert-base-uncased (folder with model.safetensors)
│   └── 📂 vae/
│          └── Wan2.1_VAE_bf16.safetensors