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.
| archivo | qué contiene | creado por |
|---|---|---|
src/lyrics.json | una entrada por frase cantada: {t0, t1, dev[], rom[], times[]} | tools/transcribe_lyrics.py → tools/build_lyrics.py |
src/character.json | conjuntos de expresiones + anclajes de ojos, placas de primeros planos de ojos, tarjetas de aspecto, giro | Atlabs MCP + tools/register_frames.py, tools/eye_anchor.py, tools/cu_plates.py, tools/make_cards.py |
src/film.json | la 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):
- ¿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).
- 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, URLhttps://mcp.atlabs.ai/mcp→ Añadir → Conectar → inicia sesión, luego actívalo para este chat.- Dime cuando esté conectado y empezaré.
1. Breve — pregunta, no asumas
Pregunta con AskUserQuestion (una ronda, luego procede con valores predeterminados sensatos):
- La canción: un archivo de audio que tengan (mp3/wav/m4a). Nunca descargues música tú mismo.
- 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.pyencuentra un clip dentro de la canción). - 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).
- 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 hidevuelve devanagari,--lang enhinglish romanizado;build_lyrics.pyescribe 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.
- Base: limpia, medio cuerpo, fondo crema liso, en el estilo (referencias u original).
- Expresiones (ediciones de la base):
front, half, closed, pain, relief, shy, dream, moved(+ la base comoneutral/side-eye).register_frames.pylas coloca en un lienzo;eye_anchor.py --set main …encuentra sus ojos. - Segundo aspecto opcional (ej. un atuendo más oscuro) con
front, half, closed, pain, relief, dream→ usado para estados de ánimo intensos. - Banda de primer plano de ojos + ediciones
half, closed, tears, glance, smoulder→cu_plates.py, luegoeye_anchor.py --closeup. - 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. - Un giro de cuerpo completo →
keyout.py. Envía generaciones independientes en paralelo; hoja de contactos consheet.pyy 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.tsusa 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.