¿Qué hace AnyToManim — CLI toolchain para videos narrados estilo 3b1b?
El producto es una CLI, no un envoltorio de API. Tú (el agente anfitrión) realizas las etapas creativas: redactar el resumen, la hoja de ritmos, el guion gráfico, el código de escena — guiado por los archivos de especificación incluidos en el paquete. La CLI hace todo lo determinista: TTS, medición de duración, renderizado, concatenación.
Instalación y verificación
pipx install anytomanim # o: pip install -e . en un venv
anytomanim doctor # reporta dependencias faltantes + consejos para arreglar
Flujo de trabajo — exporta la especificación, síguela
anytomanim export-guides ./guides # WORKFLOW/DIGEST/SCRIPT/SCENE_GUIDE + esquema
Luego sigue guides/WORKFLOW.md:
- Escribe
brief.mdsegúnDIGEST.md - Escribe
beats.jsonsegúnSCRIPT.md(+beats-schema.json). LeeSCRIPT.mdprimero: la narración debe encadenarse, no listarse. - Lee
ORCHESTRATION.md, luego escribestoryboard.jsonsegúnSTORYBOARD.md. Abre las recetas ejecutables para las tarjetas que elijas. Ejecutaanytomanim storyboard storyboard.json --beats beats.jsony corrígelo. anytomanim tts --beats beats.json— sintetiza cada ritmo, escribeaudio_file+audio_secondsreal (vuelve a ejecutar tras ediciones: solo los ritmos modificados)- Escribe
scenes/*.pysegúnSCENE_GUIDE.md(NarratedScene+MiMoService(beats_file=...),with self.voiceover(beat="b01") as tr). Sigue el guion gráfico; empieza desde lasrecipes/correspondientes. anytomanim render scenes/X.py --quality ql— corrige y reintenta si hay erroranytomanim preview <mp4>— LEE sheet.png y el informe por ritmo (solapamientos, excesos de duración, ritmos congelados, contenido pequeño, bandas vacías, encabezado fijo, cambios de escenario que el guion gráfico no menciona); corrige y vuelve a renderizar hasta que esté limpio- Renderiza
--quality qh,anytomanim assemble a.mp4 b.mp4 -o final.mp4,anytomanim subtitles beats.json --mux final.mp4
Itera sin clave / sin costo: ANYTOMANIM_TTS=draft (voz local).
anytomanim run "<tema>" también existe — un controlador de referencia con LLM embebido para evaluación automatizada por lotes (requiere una clave API de LLM; los agentes interactivos deben usar el flujo guiado en su lugar).
Contratos
beats.jsones LA interfaz — IR pública (narración + visual + audio_seconds).- Sincronización audio-primera: sintetizar → medir → cada
run_timese deriva detr.duration, y el renderizado reproduce exactamente esos wavs. Nunca inventes duraciones. - Un renderizado limpio no está terminado — mira la hoja de previsualización cada vez.
- La continuidad es lo primero. Antes de que un objeto desaparezca, pregúntate si puede convertirse en el siguiente elemento. Fundir y redibujar es el último recurso.
- Dibuja la relación cuando puedas, en lugar de escribirla como una etiqueta.
- Voces:
--voice baihua|moli|milo; clona tu propia voz medianteassets/voice/<nombre>.mp3+ entrada en voices.json. Se admiten zh + en. - Consulta
examples/en el repositorio para ver ejecuciones completas de extremo a extremo.