Files
hao-ai-lab-FastVideo/docs/inference/configuration.md
T
Davids048andClaude Opus 5.5 4117696a4f [refactor]: describe and use the resolved config in docs, examples, and local tests
- Docs, AGENTS.md files, and skills describe ResolvedGeneratorConfig,
  resolve_inference_config, typed YAML, and --config plus dotted
  overrides for training and preprocessing instead of FastVideoArgs and
  flat flags.
- The local tests build resolved configs (or small fakes that expose typed
  paths) instead of FastVideoArgs; the LoRA extraction scripts build
  pipelines with from_pretrained(model_path, resolved_config=...).
- The mixkit README's NVFP4 snippet uses from_config with
  engine.quantization.transformer_quant (the from_pretrained keyword it
  used is rejected).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012M91wnVFmPEvJ9h39r5BH7
2026-10-03 06:16:10 +00:00

4.5 KiB

Configuration

Multi-GPU Setup

FastVideo automatically distributes the generation process when multiple GPUs are specified:

# Will use 4 GPUs in parallel for faster generation
generator = VideoGenerator.from_pretrained(
    "Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
    num_gpus=4,
)

One node uses the multiprocessing executor (execution_backend: mp, the default). Two machines — for example two DGX Sparks, one GPU each — need Ray:

generator:
  engine:
    num_gpus: 2
    execution_backend: ray
    parallelism:
      sp_size: 2

Set RAY_ADDRESS and FASTVIDEO_HOST_IP to the interconnect IPs, not Wi-Fi. The FastH3 example selects Ray automatically when RAY_ADDRESS is set. Full bring-up: Pair two NVIDIA DGX Sparks.

Customizing Generation

VideoGenerator.from_pretrained accepts only common engine and offload keywords, such as num_gpus and dit_cpu_offload. The full list is fastvideo.api.compat.FROM_PRETRAINED_KWARGS. Pass every other startup setting to VideoGenerator.from_config at its config path, and pass generation settings to VideoGenerator.generate as a request:

from fastvideo import VideoGenerator

def main():
    model_name = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers"

    # Create the generator
    generator = VideoGenerator.from_config({
        "model_path": model_name,
        "engine": {
            "num_gpus": 1,
            "offload": {"dit_layerwise": True},
            "precision": {"vae": "fp16"},
        },
    })

    # Generate video with custom parameters
    prompt = "A beautiful sunset over a calm ocean, with gentle waves."
    video = generator.generate({
        "prompt": prompt,
        "sampling": {
            # How many frames to generate
            "num_frames": 45,
            # Video resolution (width, height)
            "width": 1024,
            "height": 576,
            # How many steps we denoise the video (higher = better quality, slower generation)
            "num_inference_steps": 30,
            # How strongly the video conforms to the prompt (higher = more faithful to prompt)
            "guidance_scale": 7.5,
            # Random seed for reproducibility
            "seed": 42,  # Optional, leave unset for random results
        },
        "output": {
            "output_path": "my_videos/",  # Controls where videos are saved
            "save_video": True,
        },
    })

    # If return_frames=True, frames are available in video.frames
    print(f"Generated {len(video.frames)} frames")

if __name__ == '__main__':
    main()

JSON/YAML Config Files (CLI)

The inference CLI is config-first. Use an explicit subcommand with --config, then apply optional dotted overrides on top, matching the training CLI style. By default, CLI generation uses return_frames=false unless you set request.output.return_frames: true in config or via a dotted override.

fastvideo generate --config config.yaml

Example nested config:

generator:
  model_path: FastVideo/FastHunyuan-diffusers
  engine:
    num_gpus: 2
    parallelism:
      sp_size: 2
request:
  prompt: A capybara relaxing in a hammock
  sampling:
    num_frames: 45
    height: 720
    width: 1280
    num_inference_steps: 6
    seed: 1024
  output:
    output_path: outputs/

Override individual values from the CLI with dotted paths:

fastvideo generate --config config.yaml --request.sampling.seed 42

Where a Value Came From

FastVideo resolves the generator config once at startup and records the source of every value: the input config (input; explicit tells whether you wrote the value or it is the schema default), a FASTVIDEO_* environment variable, the model's defaults, or a derived value. A worker's device policy and values read from checkpoint files are recorded too.

generator = VideoGenerator.from_config(config)
generator.resolved_config.provenance("engine.parallelism.sp_size")
# PathProvenance(path='engine.parallelism.sp_size', value=2, source='derive_parallel_sizes', ...)

result = generator.generate(request)
result.resolved_request.provenance("sampling.num_frames")
# PathProvenance(..., value=81, source='fill_sampling_defaults[preset wan_t2v_1_3b]', explicit=False)

resolved_config.provenance_table() lists every path. After startup, resolved_config is read-only; a later change is a recorded override (resolved_config.with_override(source, values)) that returns a new object.

Performance Optimization

For configuring optimizations, please see our optimizations guide