Communitygithub.com

desi-lyric-film

Convierte cualquier canción en un videoclip lírico 16:9 dibujado a mano, maximalista e indio: animación stop-motion de un personaje, un marco ornamental persistente, letras cinéticas en devanagari y romanas sincronizadas con las palabras, y un momento de mirada en cada estribillo.

¿Qué es desi-lyric-film?

Esta habilidad transforma archivos de audio de canciones en videoclips líricos animados con un estilo dibujado a mano, coherente y maximalista indio. Utiliza un motor Remotion basado en datos para generar automáticamente la estructura del video a partir de tres archivos JSON: letras sincronizadas, expresiones del personaje y la lista de tomas. El personaje, creado a través del MCP de Atlabs con modelos como Nano Banana 2.1, GPT Image 2.5 Sunburst o Seedream 5, se mantiene consistente en todas las expresiones, atuendos y paletas de colores. La habilidad extrae las letras directamente del audio del usuario mediante transcripción automática (faster-whisper) y sincroniza cada palabra con cortes de animación en estilo stop-motion. Es ideal para creadores que buscan videos líricos de estilo Bollywood/Hindi, animaciones dibujadas a mano o tipografía cinética. Requiere obligatoriamente la conexión del MCP de Atlabs para la generación de arte del personaje, y guía al usuario paso a paso para conectarlo si no está presente.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Chinmaya123-cyber/desi-lyric-film/tree/main/skills/desi-lyric-film

Preguntar en tu IA favorita

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

Documentación

Desi lyric film

Convierte una canción (el archivo de audio del usuario) en un videoclip lírico 16:9 en un estilo dibujado a mano y coherente: un personaje ilustrado transmite la emoción de cada línea, cada estribillo es un momento de mirada, las letras se muestran palabra por palabra en devanagari con la línea romana debajo, cada corte cae en una sílaba cantada y todo se mueve como stop motion (dibujos a dos fotogramas, líneas de tinta hirviendo, recortes de papel).

template/ es un proyecto Remotion completo y probado con un motor basado en datos. Nunca codifiques un video a mano: produces tres archivos JSON y el motor los renderiza.

archivoqué contienecreado por
src/lyrics.jsonuna entrada por frase cantada: {t0, t1, dev[], rom[], times[]}tools/transcribe_lyrics.py → tools/build_lyrics.py
src/character.jsonconjuntos de expresiones + anclajes de ojos, placas de primeros planos de ojos, tarjetas de aspecto, giroAtlabs MCP + tools/register_frames.py, tools/eye_anchor.py, tools/cu_plates.py, tools/make_cards.py
src/film.jsonla lista de tomas (tipo, inicio, ranura de letra, fondo, transición, opciones)tools/plan_shots.py, luego refinas por significado

Lee las referencias a medida que llegues a cada paso: references/atlabs-mcp.md · references/character.md · references/lyrics-and-timing.md · references/shot-design.md · references/style-guide.md (paleta exacta, tipografía, especificación de movimiento) · references/render-deliver.md.

0. Regla estricta: el MCP de Atlabs debe estar conectado primero

Todo el arte del personaje (diseño base, expresiones, primeros planos de ojos, atuendos/colores) se genera a través del MCP de Atlabs. No hay alternativa: si no está conectado, detente y no hagas nada más hasta que lo esté.

Verifica: busca con ToolSearch atlabs generate_image get_result start_upload get_account (las herramientas se llaman mcp__atlabs__… o mcp__<id>__… y a menudo están diferidas), luego llama a get_account — devuelve el saldo de créditos.

Si faltan las herramientas o get_account falla, responde exactamente con estos pasos y espera:

Esta habilidad crea el arte del personaje con el MCP de Atlabs, por lo que debe estar conectado primero (tarda aproximadamente un minuto):

  1. ¿Aún no tienes cuenta en Atlabs? Regístrate en https://app.atlabs.ai (la generación de imágenes usa créditos de Atlabs; una película completa necesita aproximadamente 25–40).
  2. Conéctalo:
    • Claude Code, instalado como este plugin: Atlabs está incluido — escribe /mcp, elige atlabs, inicia sesión.
    • Claude Code (terminal): ejecuta claude mcp add --transport http atlabs https://mcp.atlabs.ai/mcp, luego /mcp → atlabs → inicia sesión.
    • Claude Desktop / claude.ai: Configuración → Conectores → Añadir conector personalizado → Nombre Atlabs, URL https://mcp.atlabs.ai/mcp → Añadir → Conectar → inicia sesión, luego actívalo para este chat.
  3. Dime cuando esté conectado y empezaré.

1. Breve — pregunta, no asumas

Pregunta con AskUserQuestion (una ronda, luego procede con valores predeterminados sensatos):

  1. La canción: un archivo de audio que tengan (mp3/wav/m4a). Nunca descargues música tú mismo.
  2. Qué parte: "elige el estribillo por mí" (predeterminado, 30–60 s) o sus marcas de tiempo, o un clip de referencia para coincidir (tools/locate.py encuentra un clip dentro de la canción).
  3. El personaje — ofrece:
    • "Usa mis imágenes de referencia" — fotos de ellos mismos o de alguien que haya aceptado, o arte del personaje del que tengan los derechos. Pueden compartir varias (diferentes atuendos, fondos de color, expresiones); cada una es útil. No estilices a un famoso o a ninguna persona real sin su consentimiento — ofrece un personaje original en su lugar.
    • "Diseñar un personaje original" — opcionalmente, a partir de una imagen de referencia de estilo y una breve descripción (aspecto, ambiente del atuendo).
  4. Palabras de ambiente (opcional): ej. "desi baddie Gen-Z", "romántico suave", "festivo", "desamor". Predeterminado: moderno desi con acentos indios.

Si comparten imágenes en el chat que no son archivos en disco, pídeles que las guarden en refs/cards/ (o que den rutas) — las subidas a Atlabs necesitan archivos.

2. Andamio

cp -R <directorio de la habilidad>/template <proyecto> && cd <proyecto>
npm install
uv venv -q --python 3.12 .venv && uv pip install --python .venv/bin/python numpy scipy pillow faster-whisper
mkdir -p refs && cp <canción> refs/song.mp3

(python3.12 -m venv .venv también funciona). Ejecuta cada herramienta Python como .venv/bin/python -I tools/<tool>.py … desde la raíz del proyecto. La plantilla incluye un personaje de demostración, accesorios y datos de demostración para que npx remotion studio src/index.ts funcione de inmediato.

3. Lee la canción, elige la parte, corta el audio — references/lyrics-and-timing.md

.venv/bin/python -I tools/beatgrid.py refs/song.mp3 --bpm-min 60 --bpm-max 180      # tempo, fase del pulso, barras de volumen
.venv/bin/python -I tools/structure.py refs/song.mp3                                 # secciones repetidas = estribillos
.venv/bin/python -I tools/vocal_onsets.py refs/song.mp3 --from 0 --to <dur> --json refs/onsets.json
tools/cut_audio.sh refs/song.mp3 <inicio> <fin>                                        # → public/audio/song_cut.wav

Elige la sección vocal más repetida y enérgica (allí vive el estribillo). Comienza en un tiempo fuerte 2–4 tiempos antes de la primera vocal, termina en una respiración antes de la siguiente sección. Anota inicio — el tiempo del video = tiempo de la canción − inicio.

4. Letras — automáticas, desde el audio del usuario

.venv/bin/python -I tools/transcribe_lyrics.py refs/song.mp3 --from <inicio> --to <fin> --lang hi --onsets refs/onsets.json
.venv/bin/python -I tools/build_lyrics.py --transcript refs/transcript.json --slice <inicio> <fin> --onsets refs/onsets.json
  • --lang hi devuelve devanagari, --lang en hinglish romanizado; build_lyrics.py escribe ambas escrituras.
  • Si el transcriptor informa tramos cantados ilegibles (canto muy rápido, voces superpuestas), pregunta una vez si el usuario tiene las letras como texto o una tabla con marcas de tiempo; si sí: build_lyrics.py --table lyrics.txt … (o --text). Si no, continúa: esas frases se quedan sin palabras y el planificador les asigna tomas solo visuales.
  • Las letras solo provienen del audio del usuario a través del transcriptor o de texto que el usuario proporcione. Nunca escribas letras de canciones tú mismo, nunca llenes huecos de memoria, y no repitas el texto de la letra en el chat — informa recuentos y tiempos.

5. El personaje — MCP de Atlabs — references/character.md

Un dibujo base, todo lo demás es una edición de esa base, para que el personaje nunca se desvíe. Modelos predeterminados: Nano Banana 2.1 (nano_banana_2_1) para la base a partir de referencia y cada edición (mejor consistencia); GPT Image 2.5 Sunburst (gpt_image_2_5_sunburst) cuando una foto necesita un pase de estilización más fuerte; Seedream 5 Pro (seedream_5_pro) para nuevos accesorios o planos de escena completa.

  1. Base: limpia, medio cuerpo, fondo crema liso, en el estilo (referencias u original).
  2. Expresiones (ediciones de la base): front, half, closed, pain, relief, shy, dream, moved (+ la base como neutral/side-eye). register_frames.py las coloca en un lienzo; eye_anchor.py --set main … encuentra sus ojos.
  3. Segundo aspecto opcional (ej. un atuendo más oscuro) con front, half, closed, pain, relief, dream → usado para estados de ánimo intensos.
  4. Banda de primer plano de ojos + ediciones half, closed, tears, glance, smoulder → cu_plates.py, luego eye_anchor.py --closeup.
  5. 4–6 tarjetas de aspecto: la misma persona, diferente atuendo moderno + fondo de color plano de la paleta + garabatos, cada una con una edición de ojos cerrados → make_cards.py.
  6. Un giro de cuerpo completo → keyout.py. Envía generaciones independientes en paralelo; hoja de contactos con sheet.py y revisa antes de continuar. Informa al usuario los modelos utilizados y los créditos gastados.

6. Planifica el video — references/shot-design.md

.venv/bin/python -I tools/plan_shots.py --bpm <bpm> --beat0 <primer tiempo, s de video> --duration <s> --audio audio/song_cut.wav

Luego lee el significado de cada línea (de los archivos, sin pegar letras en el chat) y refina src/film.json:

  • cada estribillo es un momento de mirada (su primer plano con una mirada diferente cada vez, o un accesorio de ojo); nunca el mismo dos veces seguidas
  • el dolor está en su rostro (grietas, suelo oscurecido) y el alivio llega en la palabra sanadora — nunca una herida literal
  • el tacto/sentimiento es "conmovido" (florecimientos, ondas), no un corazón en la mano literal; las líneas rápidas son giros de tarjetas de aspecto
  • los fondos cambian en cada toma (colores de aspecto), el marco nunca cambia; las transiciones varían Mantén una historia coherente: ella es la protagonista, sus ojos son el motivo.

7. Revisa, luego renderiza — references/render-deliver.md

node tools/stills.mjs out/st 0.5 <fotogramas…> && .venv/bin/python -I tools/sheet.py out/st.jpg out/st/*.jpg
./tools/make_film.sh <nombre>                     # → out/<nombre>.mp4 (1920×1080, 24 fps)

Verifica los fotogramas en la primera palabra de cada frase: la letra es legible y está dentro del marco, los ojos abiertos en los estribillos, las expresiones coinciden con la línea, sin tomas vacías. Corrige, vuelve a renderizar los fotogramas cambiados, luego renderiza el video (~4–6 min). Copia el resultado a la carpeta Descargas del usuario y envíalo. Menciona una vez: una canción comercial puede silenciarse en algunas plataformas; es responsabilidad del usuario tener los derechos para publicarla.

Problemas conocidos (de ejecuciones reales)

  • feTurbulence trata la semilla 0 y 1 como el mismo patrón — las semillas de ebullición/grano comienzan en 1 (ya corregido en kit.tsx); de lo contrario, la apertura se mantiene quieta durante 4 fotogramas y luego salta.
  • Whisper falla con el canto muy rápido; los ataques todavía temporizan esas frases — nunca adivines las palabras.
  • El shell headless incluido de Remotion puede fallar en macOS; remotion.config.ts usa Chrome instalado. Mantén la concurrencia en 6.
  • Las ediciones registradas deben provenir de la misma imagen base; si una edición se desvía (diferente pose/recorte), regenérala en lugar de forzarla.
  • El texto sobre fondos oscuros cambia automáticamente a la tipografía crema/durazno — elige los fondos de las tomas por estado de ánimo, no por el texto.

Skills relacionados