Communitygithub.com

akokbaba195-bot/anime-reels

Crea un episodio al estilo anime (personajes originales dibujados en código, sincronización de labios con archivos MP3 de voz, como la serie Zero Se Freelance) a partir de un guion y un MP3 de voz por línea. Úsalo cuando el usuario ejecute /anime-reel o pida un reel de anime, episodio anime, caricatura estilo anime o personajes anime con sincronía de labios desde un guion y líneas de voz, en formato 9:16 para reels y 16:9 para YouTube.

¿Qué es anime-reels?

Este skill genera un episodio animado al estilo anime, con personajes originales dibujados íntegramente en código (canvas HTML), renderizados fotograma a fotograma en Chrome sin cabeza y codificados con ffmpeg. Toma como entrada un guion y un archivo MP3 de voz por cada línea de diálogo, y produce dos versiones en video: una en 9:16 (para reels/vertical) y otra en 16:9 (horizontal), además de una copia en 720p de menos de 20 MB para WhatsApp. Utiliza alineación forzada con torchaudio MMS_FA para sincronizar cada palabra con los labios de los personajes, y nunca adivina tiempos: si la alineación falla, se detiene y explica el motivo. El skill sigue un flujo estructurado: configuración del entorno, división del guion en tomas, definición de personajes originales, generación de línea de tiempo con animaciones y efectos especiales (líneas de velocidad, impactos, temblores, chibi), creación de una hoja de contacto para aprobación previa, y finalmente el renderizado completo. Los personajes tienen un estilo anime clásico: ojos grandes con brillo, contornos gruesos y limpios, colores planos con una sola sombra. Los subtítulos se generan automáticamente con colores por personaje, y los efectos de sonido se sintetizan con ffmpeg y se mezclan en la pista de audio final. Todo el proceso está documentado en scripts y el motor de renderizado está en `engine/`.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add akokbaba195-bot/anime-reels

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

anime-reel

Entrada: un guion + un MP3 de voz por línea (el usuario adjunta ambos). Salida: un reel 9:16 y una copia 16:9, cada uno con el audio original, más una copia en 720p de menos de 20 MB para WhatsApp.

Reglas estrictas (cada ejecución)

  • Dibujar todo en código: canvas HTML, renderizado fotograma a fotograma en Chrome sin cabeza, codificado con ffmpeg. Sin metraje de archivo, sin generadores de imágenes. Usar engine/ como base; extenderlo, no reemplazarlo, para que el aspecto se mantenga igual en cada ejecución.
  • Temporizar cada palabra con alineación forzada (torchaudio MMS_FA mediante scripts/align.py). Nunca adivinar tiempos. Si falla la alineación para una línea, detenerse y decirle al usuario por qué; no recurrir a espaciado uniforme.
  • Mostrar una hoja de contacto de fotogramas antes del renderizado completo y esperar aprobación.
  • Preguntar antes de sobrescribir cualquier archivo existente. encode.sh se niega a sobrescribir y sale con código 2; transmitir eso al usuario.
  • Mantener el audio original intacto en el MP4 final (las líneas de voz solo se colocan en una línea de tiempo, nunca se reprocesan). Sin música de fondo a menos que el usuario lo pida.

Método

  1. Configuración. Ejecutar bash scripts/check_setup.sh (ffmpeg, Node, puppeteer, torch/torchaudio, uroman). Corregir cualquier cosa que falte antes de continuar. Ejecutar bash scripts/sfx.sh <proyecto>/sfx para sintetizar sonidos de golpe/whoosh/impacto/pop con ffmpeg.
  2. Dividir el guion en tomas. Una toma por línea de voz. Para cada una, escribir: id, speaker, text (exactamente lo que dice el MP3), ruta de audio, place (rooftop, office, street, bedroom, sky, o agregar una nueva rama drawPlace), camera (static|push|pull|pan + amount), cast, slots (left/center/right) y fx. Guardar como shots.json (esquema en scripts/build_timeline.py). Mostrar la lista de tomas y permitir que el usuario la corrija si es ambiguo.
  3. Personajes. Definir cada uno en characters (name, skin, hair, hairStyle spiky|bob|long|short, eye, outfit, accent, color = color de subtítulo de ese personaje). Deben ser originales, nunca copiados de anime existente. Aspecto anime: ojos grandes con brillo, contornos gruesos y limpios, color plano más exactamente una sombra. Renderizar la hoja del personaje y mantener el JSON como fuente única de verdad para que los personajes nunca cambien entre tomas: node scripts/render_frames.mjs sheet timeline.json landscape out/character_sheet.png
  4. Alinear y sincronizar labios. python3 scripts/build_timeline.py shots.json timeline.json work ejecuta MMS_FA por línea (temporización de palabras) y construye la curva de apertura de boca de cada personaje a partir de la sonoridad de esa línea de voz (mouth.py). Los parpadeos y movimientos ociosos están integrados en el motor. Para líneas que no estén en inglés, align.py romaniza con uroman mientras mantiene la ortografía original en pantalla.
  5. Trucos de anime en líneas clave (agregar a fx, tiempos en segundos desde el inicio de la toma): speedlines en revelaciones y determinación, impact (fotogramas blancos/negros intermitentes, con sfx: "impact") en la línea más importante, shake en golpes, chibi (+ who, sfx: "pop") en reacciones cómicas. Usar con moderación: aproximadamente un truco cada 2-3 tomas, para que sigan impactando.
  6. Subtítulos y sonido. Los subtítulos de 2-3 palabras ya los maneja el motor, con la palabra hablada en el color del hablante y el resto en blanco. Los efectos de sonido se sitúan en las mismas pistas que los golpes visuales (mediante fx[].sfx). Mezclar con python3 scripts/build_timeline.py shots.json timeline.json work.
  7. Hoja de contacto, luego aprobación. Elegir ~12 tiempos distribuidos a lo largo del episodio, incluyendo cada truco: node scripts/render_frames.mjs stills timeline.json portrait work/stills 0.5,2.0,... bash scripts/contact_sheet.sh work/stills out/contact_sheet.png Mostrar out/contact_sheet.png y detenerse. No renderizar el video completo hasta que el usuario lo apruebe.
  8. Renderizar tras la aprobación, para cada orientación (portrait = 1080x1920, landscape = 1920x1080, 30 fps): node scripts/render_frames.mjs video timeline.json portrait work/reel_silent.mp4 bash scripts/encode.sh work/reel_silent.mp4 work/audio.wav out/<nombre>_9x16 Repetir para landscape con out/<nombre>_16x9. encode.sh multiplexa audio AAC 256k y escribe la copia _720p.mp4 (objetivo ~17 MB, siempre por debajo de 20 MB). Verificar tamaños con ls -lh e informarlos.

Configuración de renderizado

  • 9:16: 1080x1920, 30 fps, H.264 yuv420p, CRF 16, AAC 256k, faststart. 16:9: 1920x1080, misma configuración.
  • Copia para WhatsApp: 720p (720x1280 o 1280x720), bitrate calculado a partir de la duración para mantenerse por debajo de 20 MB.
  • Los subtítulos se sitúan aproximadamente al 68% de altura en 9:16 (libres de los 250 px superiores y 420 px inferiores de la UI de la aplicación) y ~86% en 16:9.

Archivos en este skill

  • engine/engine.js, engine/index.html: motor canvas (personajes, lugares, líneas de velocidad, fotogramas de impacto, temblor, chibi, subtítulos, badge).
  • scripts/: check_setup.sh, sfx.sh, align.py, mouth.py, build_timeline.py, build_audio.py, render_frames.mjs, contact_sheet.sh, encode.sh.

Skills relacionados