Kandinsky S2V 1.0 Pro

arXiv Project Page GitHub Hugging Face Demo

Speech-to-video generation: an avatar video is produced from a reference frame and a speech track. The whole figure is animated, not only the head. The audio is a condition β€” the model does not generate sound, it animates the person in the reference frame to match the speech it is given.

Examples

Each is one reference frame plus one speech track. More examples β€” other languages, cartoon characters and animals, long videos β€” are on the project page.

Pipeline

Latent diffusion with flow matching.

  • Qwen2.5-Omni-7B supplies both conditions: Thinker hidden states for the text prompt, and audio-tower features (3584-dim, 25 tokens/s) for the speech.
  • CLIP ViT-L/14 supplies a pooled text embedding.
  • HunyuanVideo 3D VAE encodes and decodes video.
  • DiT (21.4B parameters, 60 visual blocks) is the generative backbone. Speech enters through per-layer cross-attention adapters on 18 of the visual blocks, frame-aligned so each latent frame attends only to its own audio tokens. FramePack memory at three temporal scales carries context from one chunk to the next.

Related

Kandinsky-S2V-1.0-Pro-distill β€” pi-Flow distillation of this checkpoint, 16 steps instead of 50.

Contents

File Size Precision
model/kandinsky_s2v_pro.safetensors 39.8 GiB bf16, with the time embedding and all normalisations in fp32

Text encoders and the VAE are not part of this repository; the code fetches them from their own repositories on first run:

Component Source
Qwen2.5-Omni-7B Qwen/Qwen2.5-Omni-7B
CLIP ViT-L/14 openai/clip-vit-large-patch14
HunyuanVideo 3D VAE hunyuanvideo-community/HunyuanVideo (vae/)

Output

25 fps in SD or, with the *_hd.yaml configurations, HD resolution, at the reference frame's aspect ratio. Long speech is generated in 5-second chunks.

Usage

The code is in kandinskylab/kandinsky-s2v:

git clone https://github.com/kandinskylab/kandinsky-s2v
cd kandinsky-s2v
uv sync
uv run kandy-s2v generate \
    --config src/kandinsky_s2v/configs/s2v_pro.yaml \
    --audio speech.wav \
    --image reference.png \
    --out out.mp4

The first run downloads this checkpoint, the encoders and the VAE from the Hub. For HD, pass src/kandinsky_s2v/configs/s2v_pro_hd.yaml instead; it uses the same weights. To speed a generation up, split it across the GPUs of one node β€” see the repository README.

Performance

Time to generate one second of video and peak GPU memory, on one H100 with FlashAttention 3 at 512Γ—768 (1280Γ—768 for HD), from a warm run of one chunk (125 frames, 5 s). with compile is compile.strategy: torch (off by default); on top of these times, a run spends ~20 s compiling once at the start. 8 GPUs is the same generation split across 8 GPUs and counts DiT sampling alone.

Config Time per 1 s of video with compile 8 GPUs Peak VRAM
s2v_pro.yaml 189 s 152 s 32 s 46 GiB
s2v_pro_hd.yaml 773 s 678 s 114 s 55 GiB

Peak memory is dominated by the VAE decode rather than the transformer; tiling the decode cuts the peak substantially at the cost of faint tile seams.

Responsible use

The model animates a real person from a single photograph, driven by a voice that need not be theirs. Use a reference frame you have the subject's consent to animate, and do not present the result as a genuine recording of anyone.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Collection including kandinskylab/Kandinsky-S2V-1.0-Pro

Paper for kandinskylab/Kandinsky-S2V-1.0-Pro