Film lyrique desi
Transformez une chanson (un fichier audio de l'utilisateur) en un film lyrique 16:9 dans un style dessiné à la main et cohérent : un personnage illustré porte l'émotion de chaque ligne, chaque refrain est un moment œil, les paroles sont ecrites mot par mot en Devanagari avec la ligne romane en dessous, chaque coupe tombe sur une syllabe chantée, et l'ensemble bouge comme du stop-motion (dessins en deux poses, lignes d'encre bouillonnantes, découpages en papier).
template/ est un projet Remotion complet et testé avec un moteur piloté par les données. Vous ne codez jamais un film à la main :
vous produisez trois fichiers JSON et le moteur les rend.
| fichier | ce qu'il contient | fabriqué par |
|---|---|---|
src/lyrics.json | une entrée par phrase chantée : {t0, t1, dev[], rom[], times[]} | tools/transcribe_lyrics.py → tools/build_lyrics.py |
src/character.json | ensembles d'expressions + ancres des yeux, plans rapprochés des yeux, fiches de looks, vrille | MCP Atlabs + tools/register_frames.py, eye_anchor.py, cu_plates.py, make_cards.py |
src/film.json | la liste des plans (type, début, emplacement des paroles, fond, transition, options) | tools/plan_shots.py, puis vous l'affinez par le sens |
Lisez les références à chaque étape :
references/atlabs-mcp.md · references/character.md · references/lyrics-and-timing.md ·
references/shot-design.md · references/style-guide.md (palette, typographie, spécifications de mouvement exactes) ·
references/render-deliver.md.
0. Règle absolue — le MCP Atlabs doit être connecté en premier
Tous les éléments artistiques du personnage (design de base, expressions, gros plans des yeux, tenues/couleurs) sont générés via le MCP Atlabs. Il n'y a pas de solution de repli : s'il n'est pas connecté, arrêtez-vous et ne faites rien d'autre jusqu'à ce qu'il le soit.
Vérifiez : recherchez avec ToolSearch atlabs generate_image get_result start_upload get_account (les outils sont nommés
mcp__atlabs__… ou mcp__<id>__… et sont souvent différés), puis appelez get_account — il renvoie le solde de crédits.
Si les outils sont manquants ou que get_account échoue, répondez avec exactement ces étapes et attendez :
Cette compétence génère l'art du personnage avec le MCP Atlabs, elle doit donc d'abord être connectée (environ une minute) :
- Pas encore de compte Atlabs ? Inscrivez-vous sur https://app.atlabs.ai (la génération d'images utilise des crédits Atlabs ; un film complet en nécessite environ 25 à 40).
- Connectez-le :
- Claude Code, installé comme ce plugin : Atlabs est intégré — tapez
/mcp, choisissez atlabs, connectez-vous.- Claude Code (terminal) : exécutez
claude mcp add --transport http atlabs https://mcp.atlabs.ai/mcp, puis/mcp→ atlabs → connectez-vous.- Claude Desktop / claude.ai : Paramètres → Connecteurs → Ajouter un connecteur personnalisé → Nom
Atlabs, URLhttps://mcp.atlabs.ai/mcp→ Ajouter → Connecter → connectez-vous, puis activez-le pour cette conversation.- Dites-moi quand c'est connecté et je commencerai.
1. Brief — demandez, ne supposez pas
Demandez avec AskUserQuestion (un tour, puis continuez sur des valeurs par défaut raisonnables) :
- La chanson : un fichier audio qu'ils possèdent (mp3/wav/m4a). Ne téléchargez jamais de musique vous-même.
- Quelle partie : « choisis le refrain pour moi » (par défaut, 30 à 60 s) ou leurs timestamps, ou un clip de référence pour correspondre (
tools/locate.pytrouve un clip dans la chanson). - Le personnage — proposez :
- « Utilise mes images de référence » — des photos d'eux-mêmes ou de quelqu'un qui a accepté, ou un art de personnage dont ils ont les droits. Ils peuvent en partager plusieurs (différentes tenues, arrière-plans colorés, expressions) ; chacune est utile. Ne stylisez pas une célébrité ou une personne réelle sans son consentement — proposez plutôt un personnage original.
- « Créer un personnage original » — éventuellement à partir d'une image de référence de style et d'une brève description (look, ambiance de tenue).
- Mots d'ambiance (facultatif) : par ex. « desi baddie Gen-Z », « romantique doux », « festif », « chagrin d'amour ». Par défaut : desi moderne avec des accents indiens.
S'ils partagent des images dans le chat qui ne sont pas des fichiers sur le disque, demandez-leur de les enregistrer dans refs/cards/ (ou de donner les chemins) —
les téléversements vers Atlabs ont besoin de fichiers.
2. Échafaudage
cp -R <dossier de la compétence>/template <projet> && cd <projet>
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 <chanson> refs/song.mp3
(python3.12 -m venv .venv fonctionne aussi.) Exécutez chaque outil Python comme .venv/bin/python -I tools/<outil>.py … depuis la racine du projet.
Le modèle est livré avec un personnage de démonstration, des accessoires et des données de démonstration, donc npx remotion studio src/index.ts fonctionne immédiatement.
3. Lire la chanson, choisir la partie, couper l'audio — references/lyrics-and-timing.md
.venv/bin/python -I tools/beatgrid.py refs/song.mp3 --bpm-min 60 --bpm-max 180 # tempo, phase de battement, barres de volume
.venv/bin/python -I tools/structure.py refs/song.mp3 # sections répétées = refrains
.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 <début> <fin> # → public/audio/song_cut.wav
Choisissez la section vocale la plus répétée et la plus énergique (le refrain s'y trouve). Commencez sur un temps fort 2 à 4 temps avant la
première voyelle, terminez sur une respiration avant la section suivante. Notez start — le temps vidéo = temps de la chanson − start.
4. Paroles — automatiques, à partir de l'audio de l'utilisateur
.venv/bin/python -I tools/transcribe_lyrics.py refs/song.mp3 --from <début> --to <fin> --lang hi --onsets refs/onsets.json
.venv/bin/python -I tools/build_lyrics.py --transcript refs/transcript.json --slice <début> <fin> --onsets refs/onsets.json
--lang hirenvoie du Devanagari,--lang endu hinglish romanisé ;build_lyrics.pyécrit les deux écritures.- Si le transcripteur signale des passages chantés illisibles (chant très rapide, voix superposées), demandez une fois si l'utilisateur a
les paroles en texte ou un tableau horodaté ; si oui :
build_lyrics.py --table lyrics.txt …(ou--text). Sinon, continuez : ces phrases restent sans paroles et le planificateur leur donne des plans purement visuels. - Les paroles ne proviennent jamais que de l'audio de l'utilisateur via le transcripteur ou d'un texte fourni par l'utilisateur. Ne tapez jamais vous-même des paroles de chansons, ne comblez jamais les lacunes de mémoire, et ne renvoyez pas le texte des paroles dans le chat — signalez les comptes et les timings.
5. Le personnage — MCP Atlabs — references/character.md
Un dessin de base, tout le reste est une édition de cette base, donc le personnage ne dérive jamais. Modèles par défaut :
Nano Banana 2.1 (nano_banana_2_1) pour la base à partir de la référence et chaque édition (meilleure cohérence) ;
GPT Image 2.5 Sunburst (gpt_image_2_5_sunburst) lorsqu'une photo a besoin d'un passage de stylisation plus fort ;
Seedream 5 Pro (seedream_5_pro) pour de nouveaux accessoires ou des plans de scène entière.
- Base : propre, haut du corps, fond crème uni, dans le style (références ou original).
- Expressions (éditions de la base) :
front, half, closed, pain, relief, shy, dream, moved(+ la base commeneutral/side-eye).register_frames.pyles place sur une seule toile ;eye_anchor.py --set main …trouve ses yeux. - Deuxième look optionnel (par ex. une tenue plus sombre) avec
front, half, closed, pain, relief, dream→ utilisé pour les ambiances lourdes. - Bande de gros plan des yeux + éditions
half, closed, tears, glance, smoulder→cu_plates.py, puiseye_anchor.py --closeup. - 4 à 6 fiches de looks : la même personne, différentes tenues modernes + fond de couleur unie de la palette + gribouillis,
chacune avec une édition yeux fermés →
make_cards.py. - Une vrille en pied →
keyout.py. Soumettez les générations indépendantes en parallèle ; contactez avecsheet.pyet regardez avant de continuer. Informez l'utilisateur des modèles utilisés et des crédits dépensés.
6. Planifier le film — references/shot-design.md
.venv/bin/python -I tools/plan_shots.py --bpm <bpm> --beat0 <premier temps, s vidéo> --duration <s> --audio audio/song_cut.wav
Ensuite, lisez le sens de chaque ligne (à partir des fichiers, sans coller les paroles dans le chat) et affinez src/film.json :
- chaque refrain est un moment œil (son gros plan avec un regard différent à chaque fois, ou un accessoire œil) ; jamais deux fois de suite identique
- la douleur est sur son visage (fissures, sol assombri) et le soulagement arrive sur le mot guérisseur — jamais une blessure littérale
- le toucher/la sensation est « ému » (fleurs, ondulations), pas une main sur le cœur littérale ; les lignes rapides sont des retours de fiches de looks
- les arrière-plans changent à chaque plan (couleurs des looks), le cadre ne change jamais ; les transitions varient Gardez une histoire cohérente : elle est la protagoniste, ses yeux sont le motif.
7. Réviser, puis rendre — references/render-deliver.md
node tools/stills.mjs out/st 0.5 <images…> && .venv/bin/python -I tools/sheet.py out/st.jpg out/st/*.jpg
./tools/make_film.sh <nom> # → out/<nom>.mp4 (1920×1080, 24 ips)
Vérifiez les images fixes au premier mot de chaque phrase : paroles lisibles et dans le cadre, yeux ouverts sur les refrains, expressions correspondant à la ligne, pas de plan vide. Corrigez, re-rendez les images modifiées, puis rendez le film (~4 à 6 min). Copiez le résultat dans le dossier Téléchargements de l'utilisateur et envoyez-le. Mentionnez une fois : une chanson commerciale peut être rendue muette sur certaines plateformes ; c'est la responsabilité de l'utilisateur s'il a les droits de la publier.
Pièges (d'après des exécutions réelles)
- feTurbulence traite les graines 0 et 1 comme le même motif — les graines d'ébullition/grain commencent à 1 (déjà corrigé dans
kit.tsx) ; sinon l'ouverture reste immobile pendant 4 images puis saute. - Whisper manque les chants très rapides ; les attaques synchronisent toujours ces phrases — ne devinez jamais les mots.
- Le shell headless intégré de Remotion peut planter sur macOS ;
remotion.config.tsutilise Chrome installé. Gardez la concurrence à 6. - Les éditions enregistrées doivent provenir de la même image de base ; si une édition dérive (pose/cadrage différent), régénérez-la plutôt que de la forcer.
- Le texte sur fonds sombres passe automatiquement aux lettres crème/pêche — choisissez les arrière-plans des plans par ambiance, pas par texte.