TL;DR
NAVA è un generatore audio-video congiunto da 6,3 B parametri che sintetizza video e audio sincronizzati a partire da un singolo prompt. Gestisce parlato multi-parlante con controllo del timbro di riferimento e continuazioni condizionate da immagini, il tutto in un unico modello.
Invece di architetture a doppia torre allineate a posteriori o stack tri-modali completamente unificati, NAVA utilizza un'architettura Align-then-Fuse MMDiT. Uno spazio di allineamento dedicato stabilisce prima la corrispondenza audio-video, quindi il contesto viene fuso tramite cross-attention.
Punti salienti:
- Generazione rapida 720p in 1 minuto — audio-video sincronizzati a 720p in circa 1 minuto utilizzando il parallelismo di sequenza Ulysses su 8 GPU.
- Audio a doppio canale — audio stereo (scena + parlato) denoised congiuntamente al video, senza allineamento post-hoc del vocoder.
- Controllo multi-timbrico preciso — WAV di riferimento associati a span di parlato
~~...per l'identità vocale di ciascun parlante. - Controllo della telecamera descritto a linguaggio — composizione dell'inquadratura, movimento e ritmo direttamente dal prompt.
- Multi-risoluzione — rapporti d'aspetto orizzontale/verticale/quadrato dallo stesso checkpoint.
Architettura
NAVA concretizza l'Allineamento Nativo Audio-Visivo come uno stack Align-then-Fuse MMDiT costruito sulla backbone Wan2.2.
Layer di Allineamento Gerarchico — 10 blocchi double-stream. Video e audio mantengono proiezioni QKV e FFN separate ma condividono l'auto-attenzione congiunta su [video_tokens; audio_tokens] concatenati, più una cross-attention dedicata al testo.
Questo costruisce uno spazio di allineamento in cui la corrispondenza AV viene appresa senza interferenze del contesto semantico.
Layer di Fusione Unificata — 20 blocchi single-stream. Video e audio condividono QKV/FFN; un'attenzione congiunta unificata tratta tutti i token come un unico flusso, con un unico percorso di cross-attention al testo. Qui avviene il denoising condizionato dal contesto.
Iperparametri chiave: dim=3072, ffn_dim=14336, 24 teste di attenzione, 30 layer. 3D RoPE gestisce il video (temporale + altezza + larghezza), mentre 1D RoPE gestisce l'audio, applicati congiuntamente nel percorso di attenzione congiunta.
Timbre-in-Context e CFG Cross-Modale
Per scene multi-parlante, il Timbre-in-Context Conditioning inietta gli embedding del parlante da WAV di riferimento (ReDimNet, 192-d) attraverso il percorso di contesto.
Questi embedding sono associati a span di parlato ~~..., consentendo il controllo del timbro per ciascun parlante.
In fase di inferenza, il CFG cross-modale 3D applica scale di guida classifier-free indipendenti per video, audio e la direzione di allineamento cross-modale (video_align_guidance_scale, audio_align_guidance_scale).
Questo mantiene stretta la sincronizzazione AV senza sacrificare la qualità della generazione.
Cosa distingue NAVA dai modelli AV open-source esistenti:
| Asse di progettazione | Baseline tipiche | NAVA |
|---|---|---|
| Layout del flusso | Doppia torre (allineamento post-hoc) o tri-modale completamente unificato | Align-then-Fuse — prima spazio di allineamento, poi contesto fuso |
| Controllo del parlato | Solo didascalia, nessun timbro per parlante | Timbre-in-Context tramite WAV di riferimento |
| Budget parametri | 10 B – 32 B | 6.3 B |
Valutazione — VerseBench e Qualità del Parlato
NAVA ottiene la migliore sincronizzazione AV, qualità video e WER audio su VerseBench, con il budget di parametri più ridotto tra i modelli AV congiunti.
| Model | Params | Sync-C ↑ | Sync-D ↓ | Video Quality ↑ | WER ↓ |
|---|---|---|---|---|---|
| Ovi 1.1 | 10 B | 7.4839 | 7.9791 | 0.636 | 0.102 |
| MOVA | 32 B | 7.2888 | 7.808 | 0.603 | 0.126 |
| Davinci | 15 B | 7.1487 | 7.8158 | 0.600 | 0.151 |
| LTX 2.3 | 19 B | 7.2476 | 7.6902 | 0.576 | 0.106 |
| NAVA | 6.3 B | 7.7914 | 7.5655 | 0.659 | 0.099 |
Su Seed-TTS-eval, NAVA offre una qualità del parlato vicina ai sistemi dedicati solo audio, con 5.81 WER e 62.4 di similarità del parlante — molto avanti rispetto ad altri modelli AV congiunti come DreamID-Omni.
Fatti Rapidi e Componenti
| Architecture | Align-then-Fuse MMDiT (backbone Wan2.2) |
| Parameters | 6.3 B |
| Resolution | 1280×704 (consigliato) · 960×960 supportato |
| Frames / FPS | 37 frame @ 24 fps ≈ 6 s · 55–61 frame ≈ 9–10 s |
| Audio | 25 token latenti/sec, ≤ 10 s |
| Sampling | Flow matching · UniPC scheduler · 50 passi predefiniti |
| Precision | bf16 |
| Parallelism | GPU singola o parallelismo di sequenza Ulysses (fino a 8 GPU) |
Componenti forniti: backbone WanAVModel (6,3 B), Wan2.2 Video VAE (ConvNet 3D causale, compressione 16×16×4), LTX Audio VAE + Vocoder (128 canali latenti, decoder di forma d'onda integrato), umt5-xxl Text Encoder e ReDimNet speaker embedder.
Come Usare — Avvio Rapido
Dopo la configurazione, esegui uno degli script forniti:
bash scripts/inference.sh # T2AV Generale bash scripts/inference_timbre.sh # I2AV + controllo timbro
I risultati si trovano in eval_results/.
Configurazione iniziale:
git clone https://github.com/ernie-research/NAVA && cd NAVA pip install torch torchvision torchaudio pip install diffusers transformers accelerate safetensors einops scipy PyYAML tqdm sentencepiece pip install flash-attn --no-build-isolation huggingface-cli download --local-dir .
Batch Personalizzati e Riscrittura dei Prompt
Scrivi un file JSONL con un prompt per riga:
{"prompt": "一位男子在海边奔跑,镜头跟随。背景是海浪声和风声。"} {"prompt": "两人对话~~Hello~~Hi there", "spk_wavs": ["spk1.wav", "spk2.wav"]} {"prompt": "镜头跟随主体...", "image_path": "/abs/path/first_frame.png"}
Avvia con torchrun (8 GPU con Ulysses SP):
SETUPTOOLS_USE_DISTUTILS=stdlib torchrun \ --nnodes=1 --nproc_per_node=8 \ inference_nava.py \ --config configs/baseline_t2av_demo_mmdit_no_split_ltx_control_unipc.yaml \ --ckpt NAVA.ckpt --out_dir ./outputs \ --data_file my_prompts.jsonl \ --width 1280 --height 704 --frames 37 --fps 24 \ --steps 50 --save_sample --gen_turn 1 --use_sp
NAVA è addestrato su didascalie dense in cinese.
I prompt brevi o in inglese beneficiano di una riscrittura prima dell'inferenza.
Sono forniti tre percorsi: un server batch vLLM (< 2 s/prompt), uno script transformers locale e un pulsante "Rewrite" in Gradio — tutti utilizzano Qwen3-4B-Thinking-2507, con gli intervalli ~~... preservati testualmente.



