Découpage
Chemins : ${CLAUDE_SKILL_DIR} représente le dossier contenant ce SKILL.md, et ${CLAUDE_SKILL_DIR}/../.. le dossier de l'éditeur (le dossier .claude/ de ce dépôt) deux niveaux au-dessus.
Lisez d'abord ${CLAUDE_SKILL_DIR}/../../PRINCIPLES.md : les règles que chaque vidéo suit.
Chaque question va dans la boîte de questions : l'outil AskUserQuestion (2–4 options, la première recommandée). Uniquement dans un agent sans cet outil, posez les questions numérotées en texte.
edits/<nom>/ transcript.txt (lisez ceci, jamais words.raw.json), spans.json (ce qui doit être supprimé, entre guillemets),
candidates.md (ce que le code a signalé), paper-edit.md (le montage en texte), cut-check.html (la
transcription), review.json (notes), cut.mp4 + words.json (le rendu et ses mots).
<nom> est un slug du nom du fichier (IMG_1234.MOV -> img-1234), dans la bibliothèque (PRINCIPLES.md « Où »). Ne modifiez, ne déplacez et ne copiez jamais le fichier source : transmettez son chemin.
PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py" ; python3 "$PY" exécute l'outil venv. Sous Windows, utilisez py partout où ces commandes disent python3.
Pas de venv encore : exécutez d'abord la compétence setup. S="${CLAUDE_SKILL_DIR}/scripts".
Pas encore de vidéo ?
Demandez le chemin de leur prise. Plusieurs fichiers : references/takes.md. Aucun : quand AI_EDITOR_SAMPLE_URL est défini, proposez cet échantillon et téléchargez-le dans leur dossier (curl -L -o sample-take.mp4 "$AI_EDITOR_SAMPLE_URL") ; sinon demandez-leur d'en enregistrer une (n'importe quelle vidéo de téléphone où ils parlent pendant 30–60 s fonctionne).
0. Demandez : le montage d'abord, ou tout en une fois
Avant toute autre chose, posez une question dans la boîte de questions (start décide cela pour un montage complet) :
Voulez-vous d'abord uniquement le montage, ou le montage et l'édition stylisée en une seule fois ?
- Uniquement le montage d'abord (Recommandé). Vous approuvez le montage avant que j'ajoute des sous-titres, des zooms ou des visuels, donc un changement de montage ne reconstruit jamais les visuels (moins de tokens).
- Tout en une fois. Je coupe, puis je style sans attendre. Vous verrez quand même la page de montage et la feuille d'images avant tout rendu.
Sautez-le uniquement si l'utilisateur a déjà répondu (« coupe-la seulement », « coupe et style en une fois ») ou si start ou clips ont appelé cette compétence. Uniquement le montage d'abord : étapes 1–6, puis arrêtez-vous jusqu'à ce que l'utilisateur approuve le montage et demande le style. Tout en une fois : étapes 1–5, ouvrez la page de montage, passez directement à style-edit ; un changement ultérieur du montage relance style-edit depuis son étape de planification.
0b. Lisez les goûts de l'utilisateur
python3 "${CLAUDE_SKILL_DIR}/../../skills/taste/scripts/taste.py" show --edit edits/<nom>
Suivez chaque règle qui s'y trouve. Enregistrez une réaction à un résultat (« trop lent ») avec la compétence taste avant de refaire.
1. Transcrire
python3 "$PY" "$S/transcribe.py" <source> edits/<nom>/words.raw.json [--script <leur script>]
Un script (ou --keyterm Nom, répétable) corrige les noms et le jargon (+20 % sur Scribe).
Dites d'abord le temps : Whisper 1–4 min pour une prise de 3 min, CrisperWhisper environ la durée de la prise. Il choisit Scribe quand une clé est enregistrée, sinon CrisperWhisper s'il est installé, sinon le Whisper local gratuit (--engine whisper|crisper|scribe pour forcer), qui supprime quelques « euh » et faux départs. Sans aucun des deux, dites une fois que setup peut en ajouter un (les poids de CrisperWhisper sont non commerciaux uniquement). Ne téléchargez jamais un modèle en cours de montage : une re-vérification nécessitant un modèle non installé (code de sortie 4) est ignorée et signalée dans la note du tour.
Ne lisez jamais words.raw.json : l'étape 2 écrit transcript.txt, 1/12 de la taille.
2. Décidez ce qui doit être coupé
python3 "$S/retakes.py" propose edits/<nom>
Le code trouve chaque coupure possible (une ligne répétée, une phrase inachevée, « attends, désolé », des tics de langage) dans candidates.md. Chacune est un endroit à regarder, pas une décision. Lisez transcript.txt et candidates.md, suivez references/retake-detection.md, et écrivez spans.json (references/shapes.md).
Avec un script.md : python3 "$S/script_match.py" edits/<nom>, lisez script-match.md (references/script.md).
La dernière prise gagne, sauf pour les accroches alternatives. Ne saisissez jamais d'horodatage ou d'intervalle de pause.
Uniquement si l'utilisateur veut un résultat plus court (ou si ses goûts disent d'exécuter le passage éditorial), lisez aussi references/editorial-rules.md et ajoutez des coupes redondantes (appels de contenu).
Un nom mal compris est une seule commande, jamais une réécriture JSON : python3 "$S/retakes.py" fix edits/<nom> cloud=Claude jiv=Jev (mots entiers, conservés dans fixes.json pour les sous-titres).
3. Construire
python3 "$S/build_timeline.py" <source> edits/<nom> && python3 "$PY" "$S/mirror.py" <source> edits/<nom>
Chaque pause (les respirations aussi) au-dessus de --max-pause (0,15 s) devient 0,10 s ; sous la musique, seuls les espaces entre les mots sont réduits. Une construction ERROR n'écrit rien : corrigez cet intervalle et relancez-la.
mirror.py dit mirrored quand un livre, un t-shirt ou un panneau se lit à l'envers (prise avec caméra frontale) : demandez une fois, Garder tel que filmé (Recommandé) (la plupart des créateurs le publient ainsi) / Retourner pour que le texte se lise ; en cas de retournement, ajoutez --flip à chaque render.py ci-dessous.
Dans un seul message, lancez l'encodage des intervalles en arrière-plan (run_in_background) et les vérifications papier ; l'étape 4 n'encode ensuite que ce qui a changé :
python3 "$S/render.py" <source> edits/<nom> --segments-only
L'agent cut-judge évalue paper-edit.md (une bévue restée, une mauvaise jonction, une bonne ligne perdue) et corrige spans.json. Les lecteurs pour les prises de plus de 5 min passent en premier, le juge après : references/judge.md. Ne lisez jamais paper-edit.md vous-même.
CLIPPEDdanspaper-edit.md: une pause coupée a mangé un mot. Augmentez--pad. Toujours présent : une étiquette est erronée.- Les jonctions à l'intérieur d'une parole se déplacent vers une image silencieuse. Tout
still in speech: écoutez à l'étape 5.
4–5. Rendu et vérification
Au premier plan (render.py attend l'encodage en arrière-plan) :
R="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/review.py"
python3 "$S/build_timeline.py" <source> edits/<nom> && \
python3 "$S/render.py" <source> edits/<nom> && \
python3 "$PY" "$S/verify_cut.py" edits/<nom> --engine <même moteur qu'à l'étape 1> && \
python3 "$S/preview_cut.py" edits/<nom> --no-open && \
python3 "$R" edits/<nom> start --video edits/<nom>/cut.mp4 --stage cut --transcript edits/<nom>/words.json
Vérification propre : la page de montage est prête. Verify compare la transcription du montage avec les mots conservés (code de sortie 1 arrête la chaîne) :
- MISSING : un mot conservé n'est pas dans le rendu. Augmentez
--pad(ou réduisez l'intervalle), reconstruisez, re-rendez. - SURVIVED : un intervalle à ajouter pour une vraie répétition ou un bafouillage, jamais un qui coupe une ligne conservée.
- HEARD DIFFERENTLY (« jev -> jeff ») et les notes de remplissage sont des variations du transcripteur : pas de reconstruction.
- DOUBLED : mots prononcés deux fois de suite. Naturel (« très, très ») : conservez. Un bafouillage : ajoutez son intervalle.
- N jonction(s) dans la parole : écoutez. Coupées :
splice_check.py edits/<nom> --fix, re-rendez.
Un cycle de correction (la même chaîne), puis montrez à l'utilisateur ce qui reste.
6. L'utilisateur approuve
La chaîne a ouvert la page de révision (../style-edit/references/review.md). serve et wait en arrière-plan. Dites les secondes coupées. Notes : « garder » : réduisez ou supprimez cet intervalle ; « couper » : ajoutez-en une ; « pauses décalées » : --max-pause. Puis étapes 4–5, resolve chaque note (--reply : ce qui a changé), enfin round --video edits/<nom>/cut.mp4 (jamais un deuxième start), puis posez toute question d'apprentissage.
Après approbation, un appel Bash : python3 "$S/trend.py" log edits/<nom> (tally : tendance), la vérification du crochet. Puis variantes de crochet si hooks.json existe (references/retake-detection.md) ; appelé par start, demandez cela dans la même boîte de questions que l'approbation des images fixes de style-edit, pas avant.
Seule l'approbation termine le montage ; cut.mp4, words.json vont à style-edit. Sur « uniquement le montage d'abord », dites qu'ils peuvent demander le style. Ne démarrez jamais style-edit de votre propre chef. Appelé par start : dès l'ouverture de la page, lancez visual-prep en arrière-plan ; ses motion_briefs : un clip-builder en arrière-plan chacun à la fois ; dites un motion_note une fois.
Si un script s'arrête
| message | faites |
|---|---|
no such file / ffmpeg could not read audio | demandez le bon chemin ; ne copiez ni ne convertissez jamais la source |
faster-whisper missing / CrisperWhisper missing | exécutez avec python3 "$PY", ou l'étape 3 de la compétence setup |
no ElevenLabs key (code de sortie 2) / HTTP 4xx, unreachable (3) | abandonnez --engine scribe, ou réenregistrez la clé avec la compétence setup |
construction ERROR sur une citation | corrigez la citation de cet intervalle ou ajoutez occurrence, reconstruisez |
cannot derive a silence threshold / marked no silence | la parole et le fond sont à moins de 10 dB d'écart : ffmpeg -i <source> -af volumedetect -vn -f null -, passez --noise environ 10 dB au-dessus de la moyenne |
rendu ERROR ... | dites-le ; relancez le rendu une fois |
Règles
- Chaque coupe cite la transcription. Pas de citation, pas de coupe.
- Un script départage les prises et conserve chaque prise d'une ligne qu'il dit deux fois. Rien n'est coupé pour être hors script.
- Ne copiez jamais en flux (
-c copy) à travers les coupes : cela décale jusqu'à 2 s. - Ne remettez jamais un rendu qui n'a pas été vérifié et approuvé.
Auto-vérification
test_build_timeline.py, test_retakes.py, test_media.py (ffmpeg) ; demo sur transcribe.py, trend.py, splice_check.py, script_match.py, mirror.py.