Files
hao-ai-lab-FastVideo/tests/local_tests/kandinsky6

Kandinsky-6 Local Tests

Local-only parity tests for the kandinsky6 FastVideo port (T2IVA and T2IVA distilled: text, optionally plus an image, to video with audio). Compares the FastVideo Kandinsky6 transformer against the Diffusers reference (diffusers.Kandinsky6Transformer3DModel); skipped in CI.

Reference Assets

Field Value
Model family kandinsky6
Workload types T2V, I2V (one merged TI2VA pipeline serves both)
Official reference diffusers.Kandinsky6Transformer3DModel (used by diffusers.Kandinsky6TI2VAPipeline)
Local reference dir set KANDINSKY6_DIFFUSERS_REPO_PATH to a diffusers checkout that provides Kandinsky6 (its src/ is prepended to sys.path); only needed when the installed diffusers does not
Official commit/version not pinned; the official repos are exported with _diffusers_version 0.41.0.dev0
HF weights kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers (T2IVA), kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers (T2IVA distilled)
HF revision main
Local weights dir official_weights/kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers (env: KANDINSKY6_DIFFUSERS_PATH, KANDINSKY6_TRANSFORMER_PATH)
Source layout diffusers
Needs conversion no: the official repos are in Diffusers layout and load directly

Use only the env-var name for tokens (e.g., HF_TOKEN). Never paste a token value.

Why this differs from tests/local_tests/kandinsky5/

Kandinsky5's parity test imports its diffusers reference class directly from the pip-installed diffusers package. test_kandinsky6_transformer_parity.py tries the same import first and, when the installed diffusers does not provide Kandinsky6Transformer3DModel, falls back to a diffusers checkout at KANDINSKY6_DIFFUSERS_REPO_PATH. The test skips when the transformer weights are missing, when CUDA is unavailable, or when the reference cannot be imported; a skip is not a verified pass (see the model porting guide).

The reference's forward() also uses a packed/ragged (sum_T, H, W, C) layout (cu_seqlens-addressed) rather than FastVideo's ordinary batched (B, T, H, W, C) tensor. The test converts between them (batch size 1, so it is a plain squeeze/unsqueeze).

Shared Environment Setup

Run from the FastVideo repo root in the same env used for FastVideo.

export KANDINSKY6_DIFFUSERS_REPO_PATH=/path/to/diffusers-checkout-with-kandinsky6
export KANDINSKY6_DIFFUSERS_PATH=official_weights/kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers

Do not change core dependency versions (torch, diffusers, transformers, flash-attn, triton, CUDA packages) without explicit approval.

Weight Setup

hf download "kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers" \
    --local-dir "official_weights/kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers"

The base repo is about 90 GB (the transformer alone is 70 GB); set KANDINSKY6_TRANSFORMER_PATH to a different transformer/ directory to test another checkpoint.

Tests in this directory

pytest tests/local_tests/kandinsky6/ -v
Component Test Concerns Status
transformer (Kandinsky6Transformer3DModel) test_kandinsky6_transformer_parity.py Packed-vs-batched shape conversion; needs a CUDA GPU that holds the 60 GB transformer scaffold_skip

Audio codec (MMAudioVAE + BigVGANV2) has no dedicated parity test here: Kandinsky6 reuses those classes unmodified from FastVideo's existing MMAudio port (verified via byte-identical DATA_MEAN_128D/DATA_STD_128D constants against the diffusers reference), so their existing parity coverage applies.

Review Notes

  • Required before handoff: non-skip PASS for each component parity test, including reused components that own weights or numerical behavior.
  • Pipeline parity may start as a scaffold; final handoff requires non-skip PASS or an explicit blocker accepted via the escape-hatch process.