/video-edit
Clips bruts en entrée, reel terminé en sortie. L'utilisateur n'ouvre jamais d'éditeur : il visionne une copie sur téléphone et donne des retours ; chaque itération est un re-rendu d'environ 2 minutes.
À lire avant de construire : references/looks.md (les trois looks, valeurs exactes), references/layout.md (zone de sécurité, placement, formule derrière-la-tête), references/gotchas.md (tous les pièges déjà rencontrés). Lisez references/overlays.md lorsque le script demande une incrustation animée.
Fonctionne sur macOS, Linux et Windows. setup.py détecte la machine au début de chaque exécution et chaque commande ci-dessous provient de cet enregistrement, donc ne devinez jamais les chemins ou les shells : voir "Cette machine" juste après l'étape 0.
Étape 0 : Configuration initiale (exécutée une fois)
SK est le dossier de cette compétence (celui qui contient ce SKILL.md), sous forme de chemin complet. Généralement ~/.claude/skills/video-edit ; sous Windows c'est C:/Users/<nom>/.claude/skills/video-edit.
Cherchez SK/config.json.
S'il existe : chargez-le (nom, pseudo Instagram, look par défaut, dossiers), exécutez le script de configuration exactement comme à l'étape 3 ci-dessous (quelques secondes : il vérifie et répare l'environnement après une mise à jour), lisez "Cette machine", et passez à l'étape 1 une fois qu'il affiche READY.
S'il n'existe pas :
- Dites : "Bienvenue dans /video-edit ! Configurons votre espace de travail. Cela prend environ 2 minutes et ne se fait qu'une fois."
- Demandez, en un seul message :
- Votre nom (utilisé dans l'incrustation de votre profil Instagram)
- Votre pseudo Instagram (pour l'incrustation de votre profil et pour récupérer vos reels pour l'effet d'orbite)
- Look par défaut : bold (mots cinétiques derrière la tête), cool girl (chaud, jaune serif italique, vos reels en orbite autour de vous) ou cool dude (éditorial sombre, lettres majuscules espacées + serif). Proposez bold s'ils hésitent.
- Où vos clips bruts arrivent généralement (par défaut
~/Downloads) et où les projets doivent être enregistrés (par défaut~/reel-edits)
- Exécutez le script de configuration avec le Python disponible sur la machine. Essayez dans l'ordre jusqu'à ce que l'un affiche des lignes STATUS :
python3 "SK/scripts/setup.py", puispython "SK/scripts/setup.py", puispy -3 "SK/scripts/setup.py". (Sous Windows,python3est souvent un stub du Microsoft Store qui affiche "Python was not found" : essayez simplement le suivant.) Si aucun ne fonctionne : Python est manquant. Donnez la correction pour leur système et arrêtez-vous (Windows :winget install --id Python.Python.3.12 -e, Mac :brew install python, Linux :sudo apt install python3 python3-venv). Lisez ensuite les lignes STATUS :- ffmpeg / node / python venv MANQUANT : la ligne se termine par la correction exacte pour CETTE machine (winget sur Windows, brew sur Mac, apt sur Linux). Donnez-la à l'utilisateur et arrêtez-vous jusqu'à ce que le script affiche READY.
- Windows : l'utilisateur colle les lignes winget dans sa propre fenêtre PowerShell (winget lui demande d'accepter ses conditions la première fois), puis quitte complètement Claude Code et le rouvre, sinon les nouveaux programmes ne sont pas trouvés.
- Le script télécharge lui-même les 6 effets sonores. S'il signale toujours qu'ils sont MANQUANTS (hors ligne), c'est optionnel : le reel n'aura simplement pas d'effets sonores jusqu'à ce qu'ils soient ajoutés.
- Optionnel, Apify (récupère automatiquement les reels et les statistiques du profil) : essayez un simple appel MCP Apify. S'il n'est pas connecté, dites que c'est optionnel et comment l'ajouter :
- Créez un compte gratuit sur https://apify.com et copiez le jeton API dans Settings > API & Integrations.
- Dans un terminal, collez cette ligne en remplaçant YOUR_TOKEN par le jeton :
claude mcp add apify -e APIFY_TOKEN=YOUR_TOKEN -- npx -y @apify/actors-mcp-server(attention : Claude Code stocke le jeton en texte clair dans~/.claude.json; gardez ce fichier privé). - Rouvrez Claude et relancez /video-edit. Sans Apify, la compétence demande à l'utilisateur de déposer ses fichiers reels dans le projet à la place.
- Sauvegardez
SK/config.json(jamais de secrets) :{"name": "...", "instagram": "pseudo-sans-@", "defaultLook": "bold", "clipsDir": "~/Downloads", "projectsDir": "~/reel-edits", "setupComplete": true, "setupDate": "YYYY-MM-DD"} - Dites : "Configuration terminée ! Lancement de /video-edit maintenant..." et continuez.
Cette machine (à lire à chaque exécution)
Lisez SK/.platform.json, écrit par setup.py. Il enregistre le système d'exploitation (os : macos, linux ou windows), le CPU et les commandes exactes pour cet ordinateur :
PY= sa valeurpython: le Python propre à la compétence (.venv/bin/pythonsur Mac et Linux,.venv/Scripts/python.exesur Windows). Exécutez CHAQUE script Python de cette compétence avec celui-ci, jamais unpython3nu.HF=PY "SK/scripts/hf.py": lance les HyperFrames épinglés (npx --yes [email protected] ...) avec le bon Node sur n'importe quel OS. Pas denvm use, pas de souci denpx.cmd.cutout:CoreML(Apple Silicon) ouCPU(Windows, Linux, Mac Intel : pas d'accélération GPU, donc l'étape de détourage est lente ; dites-le, exécutez-la en arrière-plan et continuez la construction).
setup.py réécrit ce fichier à chaque exécution (étape 0), donc il est toujours à jour. Fichier manquant, ou PY n'existe plus : la configuration n'a pas été exécutée ou n'a pas atteint READY ; exécutez-la comme à l'étape 0 et suivez sa correction.
Un style de commande qui fonctionne dans zsh, bash, Git Bash et PowerShell :
- Chemins complets entre guillemets avec des slashes (fonctionne aussi sous Windows) :
"PY" "SK/scripts/ingest.py" "<projet>". - Dans PowerShell (Windows sans Git pour Windows, ou lorsque l'outil PowerShell est celui que vous avez) mettez
&devant :& "PY" "SK/scripts/ingest.py" "<projet>". - Une commande par appel. Pas de
&&, pas deVAR=1 command, pas de~dans les arguments, pas desource, pas dezsh. ffmpegetffprobesont dans le PATH sur tous les OS (la configuration le vérifie), donc les commandes ffmpeg ponctuelles sont les mêmes partout.
Règles strictes
- Tout dans la zone de sécurité des Reels : haut 220, bas 450 (rien en dessous de y 1470), côtés 35, droite 100 à partir de y 1155.
- Ne jamais couvrir le visage avec du texte ou des cartes. Les mots derrière la tête montrent au moins ~70 % de chaque lettre.
- Les sous-titres disent ce qui a été réellement dit : corrigez les erreurs de Whisper sur les noms et mots-clés ("Claude" devient souvent "cloud"/"claws", "skill" devient "scale"). Pas de tirets cadratins dans le texte affiché à l'écran.
- Effets sonores subtils (modèle
SFX_GAIN = 0.75des volumes de base), jamais plus forts que la voix. - Créditez les autres créateurs à l'écran (@pseudo) chaque fois que leurs reels apparaissent. Chiffres réels sur le propre profil de l'utilisateur ; tout le reste (commentateurs, historique de chat) est un espace réservé générique, jamais une personne réelle, jamais une preuve fabriquée.
- Prouvez les coupes à partir du rendu final, pas de captures d'écran.
- Ne jamais supprimer les fichiers de l'utilisateur. Les originaux sont lus, jamais modifiés.
Flux de travail
1. Réception
- Clips : les fichiers que l'utilisateur nomme, sinon les fichiers vidéo les plus récents dans
clipsDir. Créez<projectsDir>/<slug-court>/. (~dans config.json est le dossier personnel de l'utilisateur,C:/Users/<nom>sous Windows. Les scripts de la compétence l'expandent.) - Liens de référence (reels IG, épingles Pinterest) pour un style : téléchargez-les et regardez les images avant de concevoir quoi que ce soit (voir overlays.md pour savoir comment les récupérer).
2. Ingestion
PY SK/scripts/ingest.py <projet> <clips ou dossier> [--newest 5]
Regardez work/sheets.jpg (plans et angles) et lisez transcript.txt (lignes par clip, mots avec temps, carte de parole).
3. Sélection des prises -> <projet>/edl.json
- Reconstruisez le script à partir des prises : les gens répètent une ligne jusqu'à ce qu'elle soit bonne. Utilisez la DERNIÈRE prise complète et propre sauf indication contraire de l'utilisateur ("la meilleure partie commence à 0:47" signifie une seule prise continue à partir de là).
- Points d'entrée/sortie à partir de la carte de parole : commencez ~0.05-0.07s avant le premier mot, terminez au début du silence après le dernier mot. Supprimez les blancs entre les sections ; confirmez les courtes pauses avec silencedetect avant de couper (Whisper peut inventer un mot d'introduction à une coupe).
- Deux segments consécutifs du même angle : faites un zoom avant (zoom 1.3-1.9 à partir de l'original 4K, cx/cy sur la poitrine).
- Mots incertains (mot-clé, déclencheur CTA) : retranscrivez cet extrait avec medium.en et une invite contenant les noms.
- Format :
[{"id": "accroche", "clip": "c1", "in": 12.66, "out": 15.72, "zoom": 1.0, "cx": 0.5, "cy": 0.5, "line": "..."}] - Envoyez l'EDL à l'utilisateur sous forme d'un court tableau (ligne, clip, look par section) et continuez ; n'attendez pas.
4. Assemblage, transcription, détourage
PY SK/scripts/assemble.py <projet> # aroll.mp4 propre 30fps CFR + segments.json avec images exactes
PY SK/scripts/transcribe_cut.py <projet> "<noms et mots-clés du script>"
PY SK/scripts/cutout.py <projet> # exécutez en arrière-plan ; vérifie que les images de détourage == images de aroll
PY SK/scripts/headpos.py <projet> # après le détourage : position de la tête/corps par segment
Un détourage à la fois (environ 1,5 Go de RAM). Il affiche une ligne de progression toutes les 30 secondes.
5. Incrustations en parallèle (dès que l'EDL est verrouillé)
Pour chaque incrustation animée demandée par le script (une application à l'écran, le suivi de profil sur le CTA, un défilement de fichier), lancez un sous-agent en arrière-plan avec le modèle de brief dans references/overlays.md : taille fixe, durée fixe, beats verrouillés sur les temps des mots, sortie webm transparente. Continuez à construire le montage principal pendant qu'ils travaillent.
6. Construction
Copiez SK/assets/template/ dans le projet (build.py, hyperframes.json, package.json, assets/fonts, assets/sfx), puis adaptez build.py. C'est la construction finalisée d'un vrai reel : gardez la mécanique, réécrivez le contenu (son docstring liste ce qui est quoi).
- Quel look où :
defaultLookpour tout le reel ; une ligne qui nomme un look change sa section. - L'orbite et la grille de profil utilisent les propres reels de l'utilisateur (overlays.md : Apify post scraper avec son pseudo, ou fichiers qu'il dépose dans
assets/reels/). - Itérez depuis le dossier du projet :
HF lint(0 erreurs), puisPY build.py --safe, puisHF snapshot --at <10-20 moments> --no-end --describe false. Lisez les planches-contact, corrigez la mise en page, la lisibilité et la zone de sécurité. (HFchoisit le bon Node tout seul, donc pas denvm use.) Un build.py copié depuis une version plus ancienne de cette compétence ignore--safe: si le guide rouge manque dans les instantanés, construisez ce projet à l'ancienne,SAFE=1 "PY" build.py(ces projets n'existent que sur Mac et Linux).
7. Rendu et QA
PY build.py # sans --safe
HF render -o renders/<slug>-vN.mp4 --quality high # ~1.5-2 min pour un reel de 25s sur Apple Silicon
PY SK/scripts/check_cuts.py <projet> renders/<slug>-vN.mp4 --phone
Regardez work/cut_check.jpg : chaque image après une coupe montre le nouveau plan proprement. Vérifiez les pics audio (volumedetect, max autour de -2 à -5 dB) et le silence aux jonctions des sections.
8. Livraison
Envoyez ou indiquez la copie pour téléphone (720p) et le rendu en pleine qualité. Rapportez en termes simples ce qui a changé et tout ce qui nécessite une décision de l'utilisateur. Gardez chaque version dans renders/ ; sauvegardez assets/ + segments.json dans work/vN/ avant de ré-assembler.
Valeurs par défaut issues de retours réels (ne pas re-discuter)
- Modifiez l'étalonnage et les sous-titres pour créer un look ; ne remplacez pas l'arrière-plan par une pièce générée par IA.
- Pas de grain pellicule. Le sombre est acceptable, mais gardez le sujet éclairé et la peau sans dominante rouge.
- Les sous-titres d'introduction centrés devant l'orateur se lisent mieux que des lignes collées au bord gauche.
- Les mots derrière la tête sont la signature, mais seulement quand ils sont lisibles.
Construit par @tenfoldmarc. Suivez pour des créations quotidiennes d'automatisation IA, des systèmes réels, pas de la théorie.