Files
hao-ai-lab-FastVideo/examples/inference/basic
SolitaryThinker 3464cb8b03 [refactor] magi-human: lazy-load Wan VAE from upstream (drop bundling default)
Extends the existing lazy-load pattern for text_encoder, tokenizer,
and audio_vae to the video VAE: each MagiHuman variant's converted
repo no longer needs to bundle a copy of the Wan 2.2 TI2V-5B VAE.
The four cross-variant shared components are now all fetched from
their canonical upstream HF repos at first build:

  * text_encoder, tokenizer  -> google/t5gemma-9b-9b-ul2 (gated)
  * audio_vae                -> stabilityai/stable-audio-open-1.0 (gated)
  * vae                      -> Wan-AI/Wan2.2-TI2V-5B-Diffusers

Per-variant converted repo shrinks to transformer/ + scheduler/ +
model_index.json (~5 GB for base bf16, ~30 GB for distill bf16). All
variants share the same ~25 GB cache of upstream weights, so a user
running 4 variants ends up with ~75 GB total instead of ~400 GB.

Implementation:

  * fastvideo/utils.py:verify_model_config_and_directory now treats
    the contents of model_index.json as authoritative for which
    component subfolders must exist locally. Pipelines that emit a
    minimal model_index.json (omitting vae / text_encoder / etc.)
    pass verification; pipelines that DO declare a component must
    still ship its subfolder. transformer/ remains mandatory.

  * fastvideo/pipelines/basic/magi_human/magi_human_pipeline.py adds
    vae to the deferred list in load_modules and a new
    _load_video_vae helper that prefers a bundled vae/ subfolder
    (legacy converted repos) and falls back to snapshot_download +
    the standard FV VAELoader. Both paths produce the same FV
    AutoencoderKLWan, so production behavior is unchanged.

  * convert_magi_human_to_diffusers.py docstring updated; --bundle-vae
    flag is unchanged (still optional) but the README example now
    omits it so new converted repos default to the minimal layout.

Verification:
  * basic_magi_human.py with bundled vae/: byte-identical mp4 (md5
    dcf5f2bf...) to pre-refactor output.
  * basic_magi_human.py with vae/ moved out and removed from
    model_index.json: same byte-identical mp4 via the lazy-load path.
  * 4/4 magi-human parity tests pass with diff_max=0.0 / diff_mean=0.0
    (DiT, pipeline, smoke + typed surface preflight).
2026-05-05 10:55:49 -07:00
..
2026-02-21 16:06:55 -08:00

Basic Video Generation Tutorial

The VideoGenerator class provides the primary Python interface for doing offline video generation, which is interacting with a diffusion pipeline without using a separate inference api server.

Requirements

  • At least a single NVIDIA GPU with CUDA 12.4.
  • Python 3.10-3.12

Installation

If you have not installed FastVideo, please following these instructions first.

Usage

The first script in this example shows the most basic usage of FastVideo. If you are new to Python and FastVideo, you should start here.

# if you have not cloned the directory:
git clone https://github.com/hao-ai-lab/FastVideo.git && cd FastVideo

python examples/inference/basic/basic.py

For an example on Apple silicon:

python examples/inference/basic/basic_mps.py

For an example running DMD+VSA inference:

python examples/inference/basic/basic_dmd.py

For the typed config/request path added during the inference API refactor:

python examples/inference/basic/basic_dmd_new_api.py

Basic Walkthrough

All you need to generate videos using multi-gpus from state-of-the-art diffusion pipelines is the following few lines!

from fastvideo import VideoGenerator

def main():
    generator = VideoGenerator.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
        num_gpus=1,
    )

    prompt = ("A curious raccoon peers through a vibrant field of yellow sunflowers, its eyes "
             "wide with interest. The playful yet serene atmosphere is complemented by soft "
             "natural light filtering through the petals. Mid-shot, warm and cheerful tones.")
    video = generator.generate_video(prompt)

if __name__ == "__main__":
    main()