Éditeur vidéo
Une compétence, trois parties. Lisez ce fichier, puis les règles du moteur et le preset qui correspond, avant de toucher aux rushes.
| Partie | À lire | Contenu |
|---|---|---|
| Moteur | engine/ENGINE.md, engine/helpers/ | transcription (Scribe), takes_packed.md, la EDL, render.py, grade.py, timeline_view.py, les 12 Règles Strictes, la boucle demander → confirmer → exécuter → auto-évaluer. Adapté de browser-use/video-use (MIT). |
| Preset Instagram | presets/instagram/PRESET.md | vertical 1080×1920 : zones de sécurité, rythme Reel, styles de sous-titres (scripts/ig-captions.py), polices de titres (assets/fonts/), règles d'étalonnage, règles de sons libres |
| Preset YouTube | presets/youtube/PRESET.md | 16:9 / 4K : l'étape de coupe (papier, serrée, sliver, audit des bords, morts audio), le compositeur HyperFrames et sa bibliothèque de ~40 formats, caméra, son, B-roll, Tella, assemblage, vérification. Adapté du kit WeAreNoCode youtube-edit ; optionnel, non fourni (presets/youtube/README.md). Si PRESET.md est manquant, utiliser les règles de coupe du moteur. |
| Partagé | shared/ | luts/ (Cine_TealOrange, Cine_Film, Cine_Moody, AppleLog_to_Rec709, AppleLog_Cine_* ; make_luts.py les reconstruit), sfx/ (vos effets sonores, -3 dBFS, manifest.json), music/ (vos pistes), tools/ (build-manifest.py, outils de coupe), img/ |
Les scripts passent en premier : quand l'utilisateur n'a pas encore de script, ou demande des accroches, des idées ou un sous-titre, utiliser la compétence script-writer ; ses scripts se terminent par des notes d'éditeur que cette compétence exécute.
Quel preset
| La demande | À utiliser |
|---|---|
| Instagram, Reel, story, TikTok, Shorts, vidéo verticale, ou aucune plateforme nommée avec vidéo verticale | Preset Instagram (il emprunte l'étape de coupe, les formats, la caméra et le son du preset YouTube ; il indique où) |
| YouTube, une accroche, format long, 16:9 / 4K, un tutoriel Tella, assemblage de sections | Preset YouTube |
| Autre chose (montage, voyage, interview, montage 16:9 général) | Moteur seul, plus les looks et sons de shared/ ; emprunter les règles des presets si elles conviennent |
| Une capture d'écran à mettre en valeur | le preset selon l'endroit où elle sera publiée : zoom sur la région, assombrir ou flouter le reste, encadrer ou souligner le mot, sons de clic et de frappe, données privées floutées ; sur un Reel, la capture est placée dans un cadre de téléphone ou de navigateur, ou recadrée sur la partie importante |
Pas sûr ? Demander une fois : « C'est pour Instagram ou YouTube ? »
Chemins (utiliser dans chaque commande)
VE=~/.claude/skills/video-editor; VU="$VE/engine"; VU_PY="$VE/.venv/bin/python"
IG="$VE/presets/instagram"; YT="$VE/presets/youtube"; SK="$YT"; SHARED="$VE/shared"
Toutes les sorties vont dans <dossier des rushes>/edit/ (Règle Stricte 12 du moteur) ; ne jamais écrire dans $VE sauf pour enregistrer délibérément une règle, une LUT ou un actif partagé.
Règles strictes qui s'appliquent partout
- La transcription coûte de l'argent (crédits Scribe). Ne jamais transcrire sauf si l'utilisateur a fourni des rushes et demandé un montage. Les transcriptions sont mises en cache par nom de fichier ; supprimer le JSON en cache d'une coupe à plat après l'avoir refaite.
- Stratégie avant exécution : décrire le matériau, proposer le plan (preset, style de sous-titres, look, musique, durée), attendre un oui.
- Les sous-titres et légendes arrivent en dernier, après chaque incrustation.
- Étalonner une fois par vidéo, par segment lors de l'extraction ; protéger la peau ; vérifier une image avant/après.
- Vérifier le fichier rendu (images à chaque coupe, loudness -14 LUFS, durée) avant de le montrer.
- Les helpers Python s'exécutent avec
$VU_PY; lepython3système manque de numpy.
Types de coupe
shared/references/cuts.md : les 10 coupes (cut, jump, match, J, L, fade, dissolve, cut on action, cross-cutting, smash) avec quand les utiliser et l'outil qui les réalise (shared/tools/). Les deux presets et la compétence cinématique l'utilisent.
Graphismes animés
shared/references/motion-graphics.md : les 7 règles de qualité auxquelles chaque animation est vérifiée, d'où viennent les références, la boucle d'apprentissage (référence → chiffres → modèle → notes → sauvegarde), et le suivi des modèles. Lire avant de construire une animation ; chercher dans le registre HyperFrames avant de construire un effet à la main.
Échelle de rendu (toujours, chaque vidéo)
- Rendu de révision en 720p (rapide ; ce que l'utilisateur regarde et commente) :
moteur
render.py … --draft(720×1280 / 1280×720), HyperFramesrender … --quality draftsur une copie de la composition à 720 de large ou par défaut avec-o review.mp4puisscale=720:-2; sous-titres avecig-captions.py --width 720 --height 1280. L'auto-évaluation s'exécute sur ce fichier. - Final en 4K seulement après approbation de la révision par l'utilisateur (aucune note restante) :
moteur
render.py … --uhd(2160×3840 vertical / 3840×2160 paysage, CRF 18), HyperFramesrender … --resolution portrait-4k --quality high(oulandscape-4k; la composition 1080×1920 est rendue en 2× DPR, donc le texte et les graphismes sont vraiment nets), sous-titresig-captions.py --width 2160 --height 3840(même mise en page, mise à l'échelle), musique/loudness master comme d'habitude (-14 LUFS). Vérification :ffprobemontre 2160×3840, tags BT.709, durée correspond à la révision. - Livrer les deux côte à côte :
<projet>-4k.mp4(le master, pour upload / YouTube / archive) et<projet>-1080.mp4(une copie 1080×1920 à haut débit, ~20 Mb/s, fabriquée à partir du master 4K avecscale=1080:-2:flags=lanczos). Dire honnêtement à l'utilisateur : Instagram lit les Reels jusqu'en 1080×1920 et ré-encode chaque upload, donc la 4K aide en donnant à son encodeur la source la plus propre (et conserve la pleine qualité pour YouTube/TikTok/réutilisation future), pas en affichant de la 4K ; activer Instagram > Paramètres > Qualité des médias > « Uploader en + haute qualité ». Les rushes filmés en 1080p sont upscalés dans le master 4K (aucun nouveau détail) ; le dire lorsque c'est le cas. Une note après le final entraîne une nouvelle révision en 720p, puis 4K.
Configuration machine (install.sh à la racine du dépôt fait la majeure partie)
| Outil | État | Vérification |
|---|---|---|
| ffmpeg build complet (libass, zscale, lut3d) | ffmpeg-full lié par-dessus ffmpeg | `ffmpeg -filters |
| Environnement Python | $VE/.venv (requests, numpy, pillow, librosa, matplotlib) | cd $VE && uv sync |
| Clé ElevenLabs | $VU/.env (mode 600) | curl -s -o /dev/null -w '%{http_code}' -H "xi-api-key: $(sed -n 's/^ELEVENLABS_API_KEY=//p' $VU/.env)" https://api.elevenlabs.io/v1/user → 200 |
| Node + CLI HyperFrames | Node 26, hyperframes global | hyperframes doctor |
| Compétences agent HyperFrames | installées par la CLI comme leurs propres compétences (hyperframes, hyperframes-core, -animation, -keyframes, -registry, media-use, ...) | hyperframes skills check ; les lire pour le contrat de composition |
| auto-editor, yt-dlp, Chrome | installés | auto-editor --version, yt-dlp --version |
| Tests du preset YouTube (si installé) | tous passent | cd $YT/scripts && $VU_PY -m unittest tests |
Le garder vôtre
- « Sauvegarder ceci dans la compétence » : écrire la note comme une règle simple là où elle appartient : Instagram seulement → le preset Instagram ; YouTube seulement → le preset YouTube ; les deux → la section partagée du preset YouTube (le preset Instagram y pointe) ou ce fichier quand il s'agit de routage ou de configuration. Remplacer une règle si une nouvelle la contredit ; ne jamais garder les deux.
- Nouveau look : éditer
LOOKSdansshared/luts/make_luts.py, l'exécuter avec$VU_PY, ajouter une ligne au tableau de couleurs du preset Instagram. Nouveau style de sous-titres : une ligne dans le tableau des sous-titres + une entrée dansSTYLESdeig-captions.py. - Mises à jour du moteur : cloner l'amont https://github.com/browser-use/video-use quelque part (
git pull) et comparerdiff -r <clone>/helpers $VU/helperset copier les modifications à la main ; la copie du moteur a des modifications de chemin locales uniquement dansENGINE.md.