Communitygithub.com

Conz-Wilts/ai-editor - Découpage

Découpe proprement une vidéo de type « talking head » en supprimant les reprises, les faux départs, les tics de langage et les temps morts, puis génère un fichier cut.mp4 et un fichier words.json synchronisés.

Qu'est-ce que ai-editor - Découpage ?

Cette compétence automatise le montage jump cut des vidéos de type talking head (une ou plusieurs prises, au format mp4 ou mov, n'importe quel ratio, même une vidéo 4K de téléphone). Elle transcris la vidéo mot par mot, identifie et supprime les reprises, les faux départs, les tics de langage et les pauses inutiles, puis génère une version montée (cut.mp4) en résolution source ainsi qu'un fichier words.json aligné sur le montage final. L'utilisateur valide le montage via une page affichant la transcription complète où chaque mot supprimé est barré. Cette compétence est déclenchée par des demandes telles que « coupe ma vidéo », « enlève mes erreurs », « nettoie cette prise » et doit être lancée avant style-edit. Elle ne doit pas être utilisée pour des demandes générales d'édition vidéo, d'ajout de sous-titres, de zooms ou d'analyse de vidéos d'autres créateurs.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Conz-Wilts/ai-editor/tree/HEAD/.claude/skills/cut

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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.

  • CLIPPED dans paper-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

messagefaites
no such file / ffmpeg could not read audiodemandez le bon chemin ; ne copiez ni ne convertissez jamais la source
faster-whisper missing / CrisperWhisper missingexé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 citationcorrigez la citation de cet intervalle ou ajoutez occurrence, reconstruisez
cannot derive a silence threshold / marked no silencela 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

  1. Chaque coupe cite la transcription. Pas de citation, pas de coupe.
  2. 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.
  3. Ne copiez jamais en flux (-c copy) à travers les coupes : cela décale jusqu'à 2 s.
  4. 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.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Conz-Wilts/ai-editor

Turns one long video or podcast (a local file or a YouTube link) into the best 3-5 short vertical clips, each cut and styled in the user's profile style. Transcribes once, splits the talk into candidate clips at sentence boundaries inside the chosen length, scores every candidate in code (speech rate, loudness, laughter, numbers and names said), shows the shortlist on one page with a preview of each, then trims, cuts and style-edits each pick as its own edit. Use when the user says "clip this video", "make shorts from my podcast", "find the best clips", "cut this into TikToks", "turn this YouTube video into reels", "repurpose this long video", or drops a long video (over about 3 minutes) or a YouTube link and wants short clips. Not for editing one short take (that is start or cut), and not for measuring someone else's style (that is creator-teardown).

Conz-Wilts/ai-editor

Reverse-engineers a short-form creator's video format from their real numbers. Pulls a TikTok or YouTube Shorts profile (or pasted links, Instagram reels too) with view, like and save counts, transcribes the top videos word for word, measures pace, pauses and fillers, maps each video into timed beats, and writes a teardown.md someone can film from, a teardown.html page of their graphics, motion and sound, and the style.json the style-edit skill edits from (on its own it can write an edit plan as a table and .srt). Use when the user wants to analyse, break down or study a creator ("analyse @handle", "tear down @handle", "teardown of @handle", "break down this creator", "what makes this creator's videos work"), pastes TikTok, YouTube or Instagram links and asks what the pattern is, or asks to set up creator-teardown. Not for editing the user's own video like a creator (that is start), not for researching a topic, and not for cutting raw footage.

Conz-Wilts/ai-editor

Generates new footage with Higgsfield and puts it on the edit's timeline. Prices every generation first, asks the user with the dollar amount (and, for their own footage, whether it may be uploaded to Higgsfield), then submits, waits, downloads into the edit's generated/ folder and adds the result to the timeline's Generated track. Covers motion transfer on a clip of the user's video (their moves onto a character or styled look), b-roll from a sentence (text to video), a still brought to life (image to video) and stills for cards (text to image). Use when the user says "generate b-roll", "make a shot of", "AI b-roll", "generate a clip", "use Higgsfield", "motion transfer", "put my moves on", "restyle this part with AI", or asks for footage they did not film. Not for animated diagrams or motion graphics (motion), not for real screenshots and logos (overlays, logo-pack), and not for the cut (cut).

Conz-Wilts/ai-editor

For the editor's maintainers. Turns what users corrected into lasting fixes in this repo, for every user, enforced by code and tests rather than notes. Reads the suggestions users marked "would help everyone" (~/.ai-video-editor/suggestions.jsonl), taste rules said twice (taste.py report), preview corrections (edits/*/corrections.jsonl), review-page notes (*/review.json) and open GitHub issues labelled feedback; groups repeats; for each item the maintainer accepts, writes the general rule into PRINCIPLES.md and the skill that owns it, adds or tightens the check that enforces it, adds a test that fails before and passes after, and runs the full test set. Use when the maintainer says "improve the editor", "turn feedback into fixes", "process suggestions", "what are users complaining about", "go through the feedback issues". Not for one user's own preferences (that is taste), and not for editing a video.

Skills associés