CodaxiKing/MOVA

Python

1

49 commits

updated Sep 25, 2026

See the code

README

MOVA — Character Motion Control

Motion Control de Personagens · open-source · low-VRAM


🖼️ Reference image  +  🎥 Motion video
⬇️
🎬 Your character performing the motion


🕺  Full-body motion transfer · Transferência de movimento do corpo

🙂  Facial expression & head pose · Expressão facial e pose da cabeça

✋  Hands & fingers · Mãos e dedos

👤  Identity preservation · Preservação de identidade

🎞️  Temporal consistency · Consistência temporal

⚡  Designed for 8 GB VRAM · Projetado para 8 GB de VRAM


Python PyTorch Diffusers Backbone VRAM Tests License Status



🌐   English  ·  Português


🇺🇸 English

✨ What is MOVA?

MOVA is a modular, low-VRAM character animation system. You give it one reference image of a character and a video of someone moving, and it generates a video of your character performing that motion. It aims to keep:

IdentityMotionTemporal
👤 face, hair, outfit, body proportions🕺 body pose and orientation🎞️ frame-to-frame consistency
🎨 overall appearance🙂 facial expression and head pose🚫 no flicker
✋ hands and fingers

It is built to run on a consumer GPU with 8 GB of VRAM. The pretrained video backbone stays frozen, and only small modules (encoders and adapters) get trained.

[!NOTE] MOVA follows technical principles that are publicly documented (for example the Kling-MotionControl technical report and the open Wan-Animate papers). It does not copy or claim to reproduce any proprietary architecture, code or weights.

🧭 How it works

flowchart LR
    V[🎥 Motion video] --> E{Motion extraction<br/>MediaPipe}
    E --> B[🦴 body_motion.pt<br/>33 pts · 2D + 3D]
    E --> F[🙂 face_motion.pt<br/>478 pts · 52 blendshapes · head pose]
    E --> H[✋ hand_motion.pt<br/>2 × 21 pts · 2D + 3D]
    E --> P[🖼️ pose_openpose.mp4]
    R[🖼️ Reference image] --> G
    P --> G[Wan2.1-VACE-1.3B<br/>baseline]
    G --> O[🎬 Generated video]

    B -.planned.-> A[Motion Adapter<br/>+ frozen Wan2.1 DiT]
    F -.planned.-> A
    H -.planned.-> A
    R -.planned.-> I[Identity Encoder] -.-> A
    A -.-> O

Planned architecture: separate motion encoders for body, face and hands feed a projection layer, temporal attention and a zero-initialized Motion Adapter, which injects into the frozen Wan2.1 DiT (1.3B). An Identity Encoder adds tokens describing who the character is. The short version: identity = who, motion = what they're doing.

📊 Project status

PhaseDescriptionStatus
0Research: models, licenses, VRAM, Kling public analysis✅ Done
1Baseline: Wan2.1-VACE-1.3B inference🟡 Code ready, not yet run with real weights (needs the GPU)
2Motion extraction: body, face and hands✅ Works on CPU
3Motion Encoder + Temporal Attention + Adapter🟡 Implemented and shape-tested on CPU, not trained
4Identity system⏳ Planned
5Training (LoRA / adapters, 8 GB)🟡 Training loop tested on a tiny model (mova train --smoke); no real training
6Automated evaluation🟡 Motion, identity, temporal metrics + blind GSB tooling; no real generated video yet

The live, verified state is in STATUS.md.

🚀 Quickstart

# 1. Environment
py -3.12 -m venv .venv
.venv/Scripts/python -m pip install torch --index-url https://download.pytorch.org/whl/cu128   # GPU (CPU: /whl/cpu)
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m pip install -e . --no-deps          # installs the `mova` command

# 2. Check hardware, runtimes and models
mova info
mova info --model wan

# 3. Run tests
mova test -q

Extract motion (runs on CPU):

mova preprocess --video assets/motion/dance.mp4 --out outputs/motion/dance

This writes body_motion.pt, face_motion.pt, hand_motion.pt, preview videos and an OpenPose-style control video.

Run the baseline (needs a GPU; downloads 19 GB only when --allow-download is given):

.venv/Scripts/python scripts/check_model_size.py Wan-AI/Wan2.1-VACE-1.3B-diffusers
mova infer --model wan --runtime pytorch --device auto --precision auto            --reference assets/reference/maya.png --motion assets/motion/dance.mp4 --output outputs/maya_dance.mp4 --allow-download

mova infer --model tiny ... runs the whole stack with a tiny random network (no downloads, output is noise): a smoke test for any machine. Runtime, device and precision come from configs/runtime.yaml or the flags; see docs/architecture.md for the Core / Model / Runtime layers.

🧠 Low-VRAM strategy

TechniqueWhere
Frozen 1.3B DiT backbone, only small adapters trainedarchitecture
UMT5 text encoder runs once on CPU, embeddings cachedinference/baseline_vace.py
Automatic profile: resolution and frames (common/env.py); device, precision and offloadruntime/
Model / sequential CPU offload + VAE tilingbaseline
256 px · 17 frames · batch 1 · bf16 on 8 GBdefault profile

📁 Project layout

mova/            `mova` command line (thin; calls core/)
core/            inference service, config precedence, capability validation, info
models/          model interface, registry, backbones/ (Wan2.1-VACE)   · identity/motion/adapters (planned)
runtime/         Runtime interface, PyTorch runtime, device / precision / memory managers
common/          hardware summary, YAML config, experiment tracking, video I/O, errors
preprocessing/   body / face / hands extractors, motion features, rendering
inference/       baseline pipeline and conditioning helpers
training/        training loop and losses                                  (planned)
evaluation/      integrity, motion metrics, benchmark comparison
scripts/         check_env · check_model_size · benchmark · (extract_motion, inference_baseline: CLI wrappers)
configs/         YAML configs
docs/            research, architecture, pipeline, inference, training, datasets, experiments

📚 Documentation

DocWhat's inside
docs/research/Sources, backbone selection, Kling / Wan / MimicMotion / AnimateAnyone analyses
docs/architecture.mdCurrent and planned architecture
docs/pipeline.mdMotion data format (.pt keys and shapes)
docs/inference.mdBaseline usage and memory strategy
docs/training.mdTraining plan and why each loss exists
docs/dataset.mdDatasets and licenses
DECISIONS.mdArchitecture Decision Records
CLAUDE.md · AGENTS.md · HANDOFF.mdGuides for AI agents and session handoff

🙏 Built on

Wan2.1 · VACE · Wan-Animate · 🤗 Diffusers · MediaPipe · DiffSynth-Studio. Ideas come from MimicMotion, Animate Anyone, UniAnimate-DiT and the Kling-MotionControl technical report. See sources.md.


🇧🇷 Português

✨ O que é o MOVA?

O MOVA é um sistema modular de animação de personagens, feito para pouca VRAM. Você fornece uma imagem de referência da personagem e um vídeo de alguém se movendo, e ele gera um vídeo com a sua personagem fazendo aquele movimento. O objetivo é preservar:

IdentidadeMovimentoTemporal
👤 rosto, cabelo, roupa, proporções do corpo🕺 pose e orientação do corpo🎞️ consistência entre frames
🎨 aparência geral🙂 expressão facial e pose da cabeça🚫 sem flicker
✋ mãos e dedos

Ele foi feito para rodar numa GPU de consumo com 8 GB de VRAM. O backbone de vídeo pré-treinado fica congelado, e só módulos pequenos (encoders e adapters) são treinados.

[!NOTE] O MOVA segue princípios técnicos publicamente documentados (por exemplo o technical report do Kling-MotionControl e os papers abertos do Wan-Animate). Ele não copia nem afirma reproduzir nenhuma arquitetura, código ou peso proprietário.

🧭 Como funciona

flowchart LR
    V[🎥 Vídeo de movimento] --> E{Extração de movimento<br/>MediaPipe}
    E --> B[🦴 body_motion.pt<br/>33 pts · 2D + 3D]
    E --> F[🙂 face_motion.pt<br/>478 pts · 52 blendshapes · pose da cabeça]
    E --> H[✋ hand_motion.pt<br/>2 × 21 pts · 2D + 3D]
    E --> P[🖼️ pose_openpose.mp4]
    R[🖼️ Imagem de referência] --> G
    P --> G[Wan2.1-VACE-1.3B<br/>baseline]
    G --> O[🎬 Vídeo gerado]

    B -.planejado.-> A[Motion Adapter<br/>+ Wan2.1 DiT congelado]
    F -.planejado.-> A
    H -.planejado.-> A
    R -.planejado.-> I[Identity Encoder] -.-> A
    A -.-> O

Arquitetura planejada: encoders de movimento separados para corpo, rosto e mãos alimentam uma camada de projeção, atenção temporal e um Motion Adapter inicializado em zero, que injeta no Wan2.1 DiT (1.3B) congelado. Um Identity Encoder adiciona tokens que descrevem quem é a personagem. Resumindo: identidade = quem, movimento = o que está fazendo.

📊 Status do projeto

FaseDescriçãoStatus
0Pesquisa: modelos, licenças, VRAM, análise pública do Kling✅ Concluída
1Baseline: inferência com Wan2.1-VACE-1.3B🟡 Código pronto, ainda não rodou com os pesos reais (precisa da GPU)
2Extração de movimento: corpo, rosto e mãos✅ Funciona em CPU
3Motion Encoder + Atenção Temporal + Adapter🟡 Implementado e testado em CPU, não treinado
4Sistema de identidade⏳ Planejada
5Treino (LoRA / adapters, 8 GB)🟡 Loop testado com modelo minúsculo (mova train --smoke); sem treino real
6Avaliação automatizada🟡 Métricas de movimento, identidade e temporal + GSB cego; sem vídeo gerado real

O estado real e verificado fica em STATUS.md.

🚀 Início rápido

# 1. Ambiente
py -3.12 -m venv .venv
.venv/Scripts/python -m pip install torch --index-url https://download.pytorch.org/whl/cu128   # GPU (CPU: /whl/cpu)
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m pip install -e . --no-deps          # instala o comando `mova`

# 2. Verificar hardware, runtimes e modelos
mova info
mova info --model wan

# 3. Rodar os testes
mova test -q

Extrair o movimento (roda em CPU):

mova preprocess --video assets/motion/dance.mp4 --out outputs/motion/dance

Isso gera body_motion.pt, face_motion.pt, hand_motion.pt, vídeos de prévia e um vídeo de controle no estilo OpenPose.

Rodar o baseline (precisa de GPU; só baixa os 19 GB com --allow-download):

.venv/Scripts/python scripts/check_model_size.py Wan-AI/Wan2.1-VACE-1.3B-diffusers
mova infer --model wan --runtime pytorch --device auto --precision auto            --reference assets/reference/maya.png --motion assets/motion/dance.mp4 --output outputs/maya_dance.mp4 --allow-download

mova infer --model tiny ... roda a pilha inteira com uma rede minúscula aleatória (sem downloads, saída é ruído): smoke test para qualquer máquina. Runtime, device e precisão vêm de configs/runtime.yaml ou das flags; camadas Core / Model / Runtime em docs/architecture.md.

Benchmark e melhoria mensurável

O protocolo de 20 casos está em benchmark/v1.draft.yaml; as mídias reais ainda precisam ser fornecidas. Preparação, congelamento por hashes, geração sequencial, avaliação CPU e comparação estão descritos em benchmark/README.md. Nenhum resultado de qualidade ou equivalência ao Kling foi demonstrado.

.venv/Scripts/python scripts/benchmark.py check

O comando retorna BLOCKED enquanto faltarem entradas. Métricas cobrem corpo, mãos, expressão e aceleração com cobertura explícita; identidade e revisão visual continuam necessárias. Comparações não promovem checkpoints automaticamente.

🧠 Estratégia para pouca VRAM

TécnicaOnde
Backbone DiT de 1.3B congelado; só adapters pequenos são treinadosarquitetura
Encoder de texto UMT5 roda uma vez em CPU, com embeddings em cacheinference/baseline_vace.py
Perfil automático: resolução e frames (common/env.py); device, precisão e offloadruntime/
Offload para CPU (model / sequential) + VAE tilingbaseline
256 px · 17 frames · batch 1 · bf16 em 8 GBperfil padrão

📁 Estrutura

mova/            linha de comando `mova` (fina; chama core/)
core/            serviço de inferência, precedência de config, validação de capabilities, info
models/          interface de modelo, registry, backbones/ (Wan2.1-VACE)   · identidade/movimento/adapters (planejado)
runtime/         interface Runtime, runtime PyTorch, gerenciadores de device / precisão / memória
common/          resumo de hardware, config YAML, registro de experimentos, I/O de vídeo, erros
preprocessing/   extratores de corpo / rosto / mãos, features de movimento, renderização
inference/       pipeline do baseline e utilitários de condicionamento
training/        loop de treino e losses                                    (planejado)
evaluation/      integridade, métricas de movimento e comparação de benchmark
scripts/         check_env · check_model_size · benchmark · (extract_motion, inference_baseline: wrappers da CLI)
configs/         configs YAML
docs/            pesquisa, arquitetura, pipeline, inferência, treino, datasets, experimentos

📚 Documentação

DocumentoConteúdo
docs/research/Fontes, seleção do backbone, análises de Kling / Wan / MimicMotion / AnimateAnyone
docs/architecture.mdArquitetura atual e planejada
docs/pipeline.mdFormato dos dados de movimento (chaves e shapes dos .pt)
docs/inference.mdUso do baseline e estratégia de memória
docs/training.mdPlano de treino e o porquê de cada loss
docs/dataset.mdDatasets e licenças
DECISIONS.mdRegistro de decisões arquiteturais (ADRs)
CLAUDE.md · AGENTS.md · HANDOFF.mdGuias para agentes de IA e passagem entre sessões

🙏 Construído sobre

Wan2.1 · VACE · Wan-Animate · 🤗 Diffusers · MediaPipe · DiffSynth-Studio. As ideias vêm de MimicMotion, Animate Anyone, UniAnimate-DiT e do technical report do Kling-MotionControl. Veja sources.md.


License / Licença: Apache-2.0 (provisional / provisória — ADR-006). Third-party models keep their own licenses / Modelos de terceiros seguem suas próprias licenças.

Use only media you have the rights to · Use apenas mídia sobre a qual você tem direitos

CodaxiKing/MOVA

Python

1

49 commits

updated Sep 25, 2026

See the code

README

MOVA — Character Motion Control

Motion Control de Personagens · open-source · low-VRAM


🖼️ Reference image  +  🎥 Motion video
⬇️
🎬 Your character performing the motion


🕺  Full-body motion transfer · Transferência de movimento do corpo

🙂  Facial expression & head pose · Expressão facial e pose da cabeça

✋  Hands & fingers · Mãos e dedos

👤  Identity preservation · Preservação de identidade

🎞️  Temporal consistency · Consistência temporal

⚡  Designed for 8 GB VRAM · Projetado para 8 GB de VRAM


Python PyTorch Diffusers Backbone VRAM Tests License Status



🌐   English  ·  Português


🇺🇸 English

✨ What is MOVA?

MOVA is a modular, low-VRAM character animation system. You give it one reference image of a character and a video of someone moving, and it generates a video of your character performing that motion. It aims to keep:

IdentityMotionTemporal
👤 face, hair, outfit, body proportions🕺 body pose and orientation🎞️ frame-to-frame consistency
🎨 overall appearance🙂 facial expression and head pose🚫 no flicker
✋ hands and fingers

It is built to run on a consumer GPU with 8 GB of VRAM. The pretrained video backbone stays frozen, and only small modules (encoders and adapters) get trained.

[!NOTE] MOVA follows technical principles that are publicly documented (for example the Kling-MotionControl technical report and the open Wan-Animate papers). It does not copy or claim to reproduce any proprietary architecture, code or weights.

🧭 How it works

flowchart LR
    V[🎥 Motion video] --> E{Motion extraction<br/>MediaPipe}
    E --> B[🦴 body_motion.pt<br/>33 pts · 2D + 3D]
    E --> F[🙂 face_motion.pt<br/>478 pts · 52 blendshapes · head pose]
    E --> H[✋ hand_motion.pt<br/>2 × 21 pts · 2D + 3D]
    E --> P[🖼️ pose_openpose.mp4]
    R[🖼️ Reference image] --> G
    P --> G[Wan2.1-VACE-1.3B<br/>baseline]
    G --> O[🎬 Generated video]

    B -.planned.-> A[Motion Adapter<br/>+ frozen Wan2.1 DiT]
    F -.planned.-> A
    H -.planned.-> A
    R -.planned.-> I[Identity Encoder] -.-> A
    A -.-> O

Planned architecture: separate motion encoders for body, face and hands feed a projection layer, temporal attention and a zero-initialized Motion Adapter, which injects into the frozen Wan2.1 DiT (1.3B). An Identity Encoder adds tokens describing who the character is. The short version: identity = who, motion = what they're doing.

📊 Project status

PhaseDescriptionStatus
0Research: models, licenses, VRAM, Kling public analysis✅ Done
1Baseline: Wan2.1-VACE-1.3B inference🟡 Code ready, not yet run with real weights (needs the GPU)
2Motion extraction: body, face and hands✅ Works on CPU
3Motion Encoder + Temporal Attention + Adapter🟡 Implemented and shape-tested on CPU, not trained
4Identity system⏳ Planned
5Training (LoRA / adapters, 8 GB)🟡 Training loop tested on a tiny model (mova train --smoke); no real training
6Automated evaluation🟡 Motion, identity, temporal metrics + blind GSB tooling; no real generated video yet

The live, verified state is in STATUS.md.

🚀 Quickstart

# 1. Environment
py -3.12 -m venv .venv
.venv/Scripts/python -m pip install torch --index-url https://download.pytorch.org/whl/cu128   # GPU (CPU: /whl/cpu)
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m pip install -e . --no-deps          # installs the `mova` command

# 2. Check hardware, runtimes and models
mova info
mova info --model wan

# 3. Run tests
mova test -q

Extract motion (runs on CPU):

mova preprocess --video assets/motion/dance.mp4 --out outputs/motion/dance

This writes body_motion.pt, face_motion.pt, hand_motion.pt, preview videos and an OpenPose-style control video.

Run the baseline (needs a GPU; downloads 19 GB only when --allow-download is given):

.venv/Scripts/python scripts/check_model_size.py Wan-AI/Wan2.1-VACE-1.3B-diffusers
mova infer --model wan --runtime pytorch --device auto --precision auto            --reference assets/reference/maya.png --motion assets/motion/dance.mp4 --output outputs/maya_dance.mp4 --allow-download

mova infer --model tiny ... runs the whole stack with a tiny random network (no downloads, output is noise): a smoke test for any machine. Runtime, device and precision come from configs/runtime.yaml or the flags; see docs/architecture.md for the Core / Model / Runtime layers.

🧠 Low-VRAM strategy

TechniqueWhere
Frozen 1.3B DiT backbone, only small adapters trainedarchitecture
UMT5 text encoder runs once on CPU, embeddings cachedinference/baseline_vace.py
Automatic profile: resolution and frames (common/env.py); device, precision and offloadruntime/
Model / sequential CPU offload + VAE tilingbaseline
256 px · 17 frames · batch 1 · bf16 on 8 GBdefault profile

📁 Project layout

mova/            `mova` command line (thin; calls core/)
core/            inference service, config precedence, capability validation, info
models/          model interface, registry, backbones/ (Wan2.1-VACE)   · identity/motion/adapters (planned)
runtime/         Runtime interface, PyTorch runtime, device / precision / memory managers
common/          hardware summary, YAML config, experiment tracking, video I/O, errors
preprocessing/   body / face / hands extractors, motion features, rendering
inference/       baseline pipeline and conditioning helpers
training/        training loop and losses                                  (planned)
evaluation/      integrity, motion metrics, benchmark comparison
scripts/         check_env · check_model_size · benchmark · (extract_motion, inference_baseline: CLI wrappers)
configs/         YAML configs
docs/            research, architecture, pipeline, inference, training, datasets, experiments

📚 Documentation

DocWhat's inside
docs/research/Sources, backbone selection, Kling / Wan / MimicMotion / AnimateAnyone analyses
docs/architecture.mdCurrent and planned architecture
docs/pipeline.mdMotion data format (.pt keys and shapes)
docs/inference.mdBaseline usage and memory strategy
docs/training.mdTraining plan and why each loss exists
docs/dataset.mdDatasets and licenses
DECISIONS.mdArchitecture Decision Records
CLAUDE.md · AGENTS.md · HANDOFF.mdGuides for AI agents and session handoff

🙏 Built on

Wan2.1 · VACE · Wan-Animate · 🤗 Diffusers · MediaPipe · DiffSynth-Studio. Ideas come from MimicMotion, Animate Anyone, UniAnimate-DiT and the Kling-MotionControl technical report. See sources.md.


🇧🇷 Português

✨ O que é o MOVA?

O MOVA é um sistema modular de animação de personagens, feito para pouca VRAM. Você fornece uma imagem de referência da personagem e um vídeo de alguém se movendo, e ele gera um vídeo com a sua personagem fazendo aquele movimento. O objetivo é preservar:

IdentidadeMovimentoTemporal
👤 rosto, cabelo, roupa, proporções do corpo🕺 pose e orientação do corpo🎞️ consistência entre frames
🎨 aparência geral🙂 expressão facial e pose da cabeça🚫 sem flicker
✋ mãos e dedos

Ele foi feito para rodar numa GPU de consumo com 8 GB de VRAM. O backbone de vídeo pré-treinado fica congelado, e só módulos pequenos (encoders e adapters) são treinados.

[!NOTE] O MOVA segue princípios técnicos publicamente documentados (por exemplo o technical report do Kling-MotionControl e os papers abertos do Wan-Animate). Ele não copia nem afirma reproduzir nenhuma arquitetura, código ou peso proprietário.

🧭 Como funciona

flowchart LR
    V[🎥 Vídeo de movimento] --> E{Extração de movimento<br/>MediaPipe}
    E --> B[🦴 body_motion.pt<br/>33 pts · 2D + 3D]
    E --> F[🙂 face_motion.pt<br/>478 pts · 52 blendshapes · pose da cabeça]
    E --> H[✋ hand_motion.pt<br/>2 × 21 pts · 2D + 3D]
    E --> P[🖼️ pose_openpose.mp4]
    R[🖼️ Imagem de referência] --> G
    P --> G[Wan2.1-VACE-1.3B<br/>baseline]
    G --> O[🎬 Vídeo gerado]

    B -.planejado.-> A[Motion Adapter<br/>+ Wan2.1 DiT congelado]
    F -.planejado.-> A
    H -.planejado.-> A
    R -.planejado.-> I[Identity Encoder] -.-> A
    A -.-> O

Arquitetura planejada: encoders de movimento separados para corpo, rosto e mãos alimentam uma camada de projeção, atenção temporal e um Motion Adapter inicializado em zero, que injeta no Wan2.1 DiT (1.3B) congelado. Um Identity Encoder adiciona tokens que descrevem quem é a personagem. Resumindo: identidade = quem, movimento = o que está fazendo.

📊 Status do projeto

FaseDescriçãoStatus
0Pesquisa: modelos, licenças, VRAM, análise pública do Kling✅ Concluída
1Baseline: inferência com Wan2.1-VACE-1.3B🟡 Código pronto, ainda não rodou com os pesos reais (precisa da GPU)
2Extração de movimento: corpo, rosto e mãos✅ Funciona em CPU
3Motion Encoder + Atenção Temporal + Adapter🟡 Implementado e testado em CPU, não treinado
4Sistema de identidade⏳ Planejada
5Treino (LoRA / adapters, 8 GB)🟡 Loop testado com modelo minúsculo (mova train --smoke); sem treino real
6Avaliação automatizada🟡 Métricas de movimento, identidade e temporal + GSB cego; sem vídeo gerado real

O estado real e verificado fica em STATUS.md.

🚀 Início rápido

# 1. Ambiente
py -3.12 -m venv .venv
.venv/Scripts/python -m pip install torch --index-url https://download.pytorch.org/whl/cu128   # GPU (CPU: /whl/cpu)
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m pip install -e . --no-deps          # instala o comando `mova`

# 2. Verificar hardware, runtimes e modelos
mova info
mova info --model wan

# 3. Rodar os testes
mova test -q

Extrair o movimento (roda em CPU):

mova preprocess --video assets/motion/dance.mp4 --out outputs/motion/dance

Isso gera body_motion.pt, face_motion.pt, hand_motion.pt, vídeos de prévia e um vídeo de controle no estilo OpenPose.

Rodar o baseline (precisa de GPU; só baixa os 19 GB com --allow-download):

.venv/Scripts/python scripts/check_model_size.py Wan-AI/Wan2.1-VACE-1.3B-diffusers
mova infer --model wan --runtime pytorch --device auto --precision auto            --reference assets/reference/maya.png --motion assets/motion/dance.mp4 --output outputs/maya_dance.mp4 --allow-download

mova infer --model tiny ... roda a pilha inteira com uma rede minúscula aleatória (sem downloads, saída é ruído): smoke test para qualquer máquina. Runtime, device e precisão vêm de configs/runtime.yaml ou das flags; camadas Core / Model / Runtime em docs/architecture.md.

Benchmark e melhoria mensurável

O protocolo de 20 casos está em benchmark/v1.draft.yaml; as mídias reais ainda precisam ser fornecidas. Preparação, congelamento por hashes, geração sequencial, avaliação CPU e comparação estão descritos em benchmark/README.md. Nenhum resultado de qualidade ou equivalência ao Kling foi demonstrado.

.venv/Scripts/python scripts/benchmark.py check

O comando retorna BLOCKED enquanto faltarem entradas. Métricas cobrem corpo, mãos, expressão e aceleração com cobertura explícita; identidade e revisão visual continuam necessárias. Comparações não promovem checkpoints automaticamente.

🧠 Estratégia para pouca VRAM

TécnicaOnde
Backbone DiT de 1.3B congelado; só adapters pequenos são treinadosarquitetura
Encoder de texto UMT5 roda uma vez em CPU, com embeddings em cacheinference/baseline_vace.py
Perfil automático: resolução e frames (common/env.py); device, precisão e offloadruntime/
Offload para CPU (model / sequential) + VAE tilingbaseline
256 px · 17 frames · batch 1 · bf16 em 8 GBperfil padrão

📁 Estrutura

mova/            linha de comando `mova` (fina; chama core/)
core/            serviço de inferência, precedência de config, validação de capabilities, info
models/          interface de modelo, registry, backbones/ (Wan2.1-VACE)   · identidade/movimento/adapters (planejado)
runtime/         interface Runtime, runtime PyTorch, gerenciadores de device / precisão / memória
common/          resumo de hardware, config YAML, registro de experimentos, I/O de vídeo, erros
preprocessing/   extratores de corpo / rosto / mãos, features de movimento, renderização
inference/       pipeline do baseline e utilitários de condicionamento
training/        loop de treino e losses                                    (planejado)
evaluation/      integridade, métricas de movimento e comparação de benchmark
scripts/         check_env · check_model_size · benchmark · (extract_motion, inference_baseline: wrappers da CLI)
configs/         configs YAML
docs/            pesquisa, arquitetura, pipeline, inferência, treino, datasets, experimentos

📚 Documentação

DocumentoConteúdo
docs/research/Fontes, seleção do backbone, análises de Kling / Wan / MimicMotion / AnimateAnyone
docs/architecture.mdArquitetura atual e planejada
docs/pipeline.mdFormato dos dados de movimento (chaves e shapes dos .pt)
docs/inference.mdUso do baseline e estratégia de memória
docs/training.mdPlano de treino e o porquê de cada loss
docs/dataset.mdDatasets e licenças
DECISIONS.mdRegistro de decisões arquiteturais (ADRs)
CLAUDE.md · AGENTS.md · HANDOFF.mdGuias para agentes de IA e passagem entre sessões

🙏 Construído sobre

Wan2.1 · VACE · Wan-Animate · 🤗 Diffusers · MediaPipe · DiffSynth-Studio. As ideias vêm de MimicMotion, Animate Anyone, UniAnimate-DiT e do technical report do Kling-MotionControl. Veja sources.md.


License / Licença: Apache-2.0 (provisional / provisória — ADR-006). Third-party models keep their own licenses / Modelos de terceiros seguem suas próprias licenças.

Use only media you have the rights to · Use apenas mídia sobre a qual você tem direitos