Skip to content

Self-Forcing

Self-Forcing is a text-to-video (T2V) model based on Wan2.1. It uses a training paradigm for autoregressive video diffusion that simulates inference-time rollout during training with KV caching, reducing the train-test gap and enabling efficient streaming generation quality.

Self-Forcing teaser figure.

Teaser image source: Self-Forcing project page.

Quick Start

T2V

uv sync --package flashdreams-self-forcing --inexact
uv run --no-sync flashdreams-run-v2 \
  t2v-self-forcing-wan2.1-t2v-1.3b \
  --output-path artifacts/self-forcing.mp4 --timeout unbound -- \
  --prompt "A cat surfing" --total-blocks 7

Demo Presets

T2V

Preset Description
t2v-self-forcing-wan2.1-t2v-1.3b Official checkpoint and Wan VAE decoder.
t2v-self-forcing-wan2.1-t2v-1.3b-taehv Official checkpoint with the faster TAEHV decoder.
t2v-self-forcing-wan2.1-t2v-1.3b-sink5-window7-rerope Long-rollout preset with static sink 5, rolling window 7, and KV-cache-relative RoPE.

Developer Details

  • Minimum VRAM: about 24 GB.
  • PyTorch: 2.9 or newer.

Performance (Outdated)

Here is the profiling benchmark on total DiT runtime for FlashDreams Self-Forcing compared to the official Self-Forcing implementation and the FastVideo implementation under matched settings.

This chart shows the DiT total runtime (4 denoising steps in milliseconds) at the 6th autoregressive rollout on a single GPU. For an apples-to-apples comparison, all implementations are forced to use cuDNN attention backend and torch.compile for DiT network. For profiling the official implementation, see this instruction. For profiling the FastVideo implementation, see this instruction.

Citation

If you use Self-Forcing, please cite the original work:

@article{huang2025self,
  title={Self Forcing: Bridging the Train-Test Gap in Autoregressive Video Diffusion},
  author={Huang, Xun and Li, Zhengqi and He, Guande and Zhou, Mingyuan and Shechtman, Eli},
  journal={Advances in Neural Information Processing Systems},
  volume={38},
  pages={167283--167308},
  year={2025}
}