AnyToManim — CLI para vídeos narrados estilo 3b1b
O produto é uma CLI, não um harness de API. Você (o agente anfitrião) realiza as etapas criativas — escrever o brief, a folha de beats, o storyboard, o código das cenas — guiado pelos arquivos de especificação fornecidos no pacote. A CLI faz tudo que é determinístico: TTS, medição de duração, renderização, concatenação.
Instalação e verificação
pipx install anytomanim # ou: pip install -e . em um venv
anytomanim doctor # relata dependências ausentes + dicas de correção
Fluxo de trabalho — exporte a especificação, siga-a
anytomanim export-guides ./guides # WORKFLOW/DIGEST/SCRIPT/SCENE_GUIDE + schema
Em seguida, siga guides/WORKFLOW.md:
- Escreva
brief.mdde acordo comDIGEST.md - Escreva
beats.jsonde acordo comSCRIPT.md(+beats-schema.json). LeiaSCRIPT.mdprimeiro: a narração deve encadear, não listar. - Leia
ORCHESTRATION.md, depois escrevastoryboard.jsonde acordo comSTORYBOARD.md. Abra as receitas executáveis para os cards que você escolher. Executeanytomanim storyboard storyboard.json --beats beats.jsone corrija. anytomanim tts --beats beats.json— sintetiza cada beat, escreveaudio_file+audio_secondsreal de volta (re-execute após edições: apenas beats alterados)- Escreva
scenes/*.pyde acordo comSCENE_GUIDE.md(NarratedScene+MiMoService(beats_file=...),with self.voiceover(beat="b01") as tr). Siga o storyboard; comece pelasrecipes/correspondentes. anytomanim render scenes/X.py --quality ql— corrija e tente novamente em caso de erroanytomanim preview <mp4>— LEIA sheet.png e o relatório por beat (sobreposições, estouros de tempo, beats congelados, conteúdo pequeno, bandas vazias, cabeçalho fixo, mudanças de palco que o storyboard não menciona); corrija e re-renderize até ficar limpo- Renderize
--quality qh,anytomanim assemble a.mp4 b.mp4 -o final.mp4,anytomanim subtitles beats.json --mux final.mp4
Itere sem chave / sem custo: ANYTOMANIM_TTS=draft (voz local).
anytomanim run "<tópico>" também existe — um driver de referência com LLM embutido para avaliação automatizada em lote (requer chave de API LLM; agentes interativos devem usar o fluxo guiado por guias).
Contratos
beats.jsoné A interface — IR pública (narração + visual + audio_seconds).- Sincronia áudio-primeiro: sintetize → meça → todo
run_timederiva detr.duration, e a renderização reproduz exatamente aqueles wavs. Nunca invente durações. - Uma renderização limpa não está concluída — olhe a folha de pré-visualização toda vez.
- Continuidade em primeiro lugar. Antes de um objeto sair, pergunte se ele pode se tornar a próxima coisa. Fade out e redesenho é o último recurso.
- Desenhe a relação quando puder, em vez de escrevê-la como um rótulo.
- Vozes:
--voice baihua|moli|milo; clone sua própria voz viaassets/voice/<nome>.mp3+ entrada em voices.json. zh + en suportados. - Consulte
examples/no repositório para execuções completas de ponta a ponta.