Communitygithub.com

Conz-Wilts/ai-editor — Clips

Transforme une longue vidéo ou un podcast (fichier local ou lien YouTube) en 3 à 5 courts clips verticaux, chacun découpé et stylisé selon le profil de l'utilisateur.

Qu'est-ce que ai-editor — Clips ?

Cette compétence transforme une unique vidéo longue ou un podcast (fichier local ou lien YouTube) en plusieurs courts clips verticaux prêts à être publiés. Elle transcrit une seule fois l’intégralité de la source, découpe automatiquement le contenu en candidats respectant les limites de phrases, puis évalue chaque candidat selon des critères comme le débit de parole, l’intensité sonore, les rires, les nombres et les noms prononcés. Les meilleurs candidats sont présentés sur une page de sélection avec un aperçu pour chaque clip, permettant à l’utilisateur de choisir ses favoris. Ensuite, chaque clip choisi est rogné, coupé et stylisé individuellement, avec un support pour les podcasts audio (avec ou sans couverture) et la gestion des sous-titres, le tout en respectant le style et les règles de l’utilisateur définis dans son profil. Cette compétence est idéale pour les créateurs de contenu souhaitant recycler rapidement du contenu long en vidéos courtes pour des plateformes comme TikTok, Instagram Reels ou YouTube Shorts.

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

Demander à votre IA préférée

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

Documentation

Clips

Chemins : ${CLAUDE_SKILL_DIR} désigne le dossier contenant ce SKILL.md, et ${CLAUDE_SKILL_DIR}/../.. le dossier de l'éditeur (le .claude/ de ce dépôt) deux niveaux au-dessus.

Lisez d'abord ${CLAUDE_SKILL_DIR}/../../PRINCIPLES.md : les règles que toute vidéo suit (question, authenticité, mouvement, récit et cadrage, vie privée, coût).

Chaque question à l'utilisateur passe dans la boîte de question : utilisez l'outil AskUserQuestion (2-4 options, la recommandée en premier). Uniquement dans un agent sans cet outil, posez les questions numérotées en texte.

Une vidéo longue en entrée. Les meilleurs clips courts en sortie, chacun un montage vertical fini dans le style de l'utilisateur.

clips/<nom>/  
  source.mp4          la vidéo longue (un lien symbolique pour un fichier local ; ne jamais modifier l'original)  
  source.mp3, cover.jpg  pour un podcast audio uniquement : son audio et l'image de l'émission  
  words.raw.json      une transcription de l'ensemble (ne jamais la lire)  
  candidates.json     chaque candidat avec ses caractéristiques (ne jamais le lire)  
  shortlist.md        les 8 meilleurs qui ne se chevauchent pas, environ 1 500 tokens : le seul fichier que vous lisez  
  shortlist.json      la même chose, pour la page  
  picks.html          la page à partir de laquelle l'utilisateur choisit  
edits/<nom>-clip<N>/ un montage par clip choisi : source.mp4, words.raw.json (réajusté), clip.json  

Exécutez les scripts avec python3 sur Mac et Linux, py sur Windows.
PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py" ; python3 "$PY" ci-dessous exécute le Python du venv de l'éditeur (py "$PY" sur Windows).
S'il manque, exécutez d'abord la compétence setup. K="${CLAUDE_SKILL_DIR}/scripts/clips.py",
C="${CLAUDE_SKILL_DIR}/../../skills/cut/scripts", S="${CLAUDE_SKILL_DIR}/../../skills/style-edit/scripts".

0. Demander, une fois

Lisez d'abord le profil et les goûts (python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/profile.py" show,
python3 "${CLAUDE_SKILL_DIR}/../../skills/taste/scripts/taste.py" show). Pas encore de profil : exécutez d'abord le
recueil de style de la compétence start, afin que les clips sortent dans l'apparence de l'utilisateur.

Ensuite, un appel à la boîte de question, l'option recommandée en premier :

questionoptions
Combien de clips ?3 (Recommandé) / 5 / 1
Quelle durée pour chacun ?20-40 s (Recommandé) / 40-60 s / 60-90 s
Combien de personnes parlent dedans ?une (Recommandé) / deux (un podcast ou une interview)

Sautez toute question déjà répondue par l'utilisateur. Ces questions remplacent celle de la compétence cut ("couper d'abord ou tout en une fois") : les clips s'exécutent directement, et l'utilisateur approuve les sélections et les feuilles de photogrammes.

1. La vidéo

Un fichier local (un lien physique sur le même disque, sinon un lien symbolique, une copie uniquement en dernier recours) :

python3 "${CLAUDE_SKILL_DIR}/../../skills/clips/scripts/clips.py" link "<chemin absolu>" clips/<nom>

Un lien :

python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/links.py" fetch "<url>" clips/<nom> --max-height 1080

Il utilise yt-dlp du venv (l'installation le met là, pas dans le PATH), limite le téléchargement à 1080p (un
clip 1080x1920 n'a pas besoin de 4K ; une discussion de 20 minutes en 4K fait plusieurs Go) et affiche le chemin du fichier :
clips/<nom>/source.mp4. Code de sortie 3 : le site demande une connexion (le "confirmez que vous n'êtes pas un robot" de YouTube).
Demandez dans la boîte de question avant de relancer avec --cookies-from-browser chrome (ou leur navigateur).
Un podcast (lien RSS ou Apple Podcasts) : route liste ses épisodes les plus récents comme options ask ; demandez
lequel dans la boîte de question (le plus récent en premier), puis fetch "<url de l'option>" clips/<nom de l'option> --direct --cover "<image de l'option>" :
l'audio arrive sous forme de source.mp3 (ou son extension propre) et l'image de l'émission sous forme de cover.jpg.
Téléchargez uniquement ce que l'utilisateur a le droit de réutiliser : sa propre vidéo, ou une pour laquelle il a
l'autorisation. Dites-le une fois si le lien appartient à quelqu'un d'autre.

2. Transcrire une fois

python3 "$PY" "$C/transcribe.py" clips/<nom>/source.mp4 clips/<nom>/words.raw.json   # le fichier que fetch a affiché : source.mp3 pour l'audio

Annoncez d'abord la durée : Whisper prend 1 à 4 minutes pour 3 minutes de vidéo sur un portable (gratuit), Scribe
environ 20 s pour une vidéo de 13 minutes. Mêmes moteurs que la compétence cut. Scribe ajoute les rires et autres événements audio, utilisés par le score.
Chaque clip réutilise cette transcription : rien n'est transcrit deux fois.

3. Candidats et shortlist

python3 "$K" candidates clips/<nom> --min 20 --max 40 [--speakers 2] [--style creator-teardowns/<handle>/style.json]

Passez la durée choisie par l'utilisateur. --style est le premier créateur du profil : les mouvements "ce qui marche"
mesurés là sont listés dans la shortlist. Le code divise la transcription en phrases et fait de chaque suite de
phrases entières dans la durée un candidat (ne commence jamais par "Mm-hmm" ni ne finit en milieu de mot),
les mesure, les classe par caractéristiques et écrit shortlist.md.

Lisez uniquement shortlist.md. Chaque entrée a l'accroche, les premiers mots de chaque phrase intermédiaire, la
dernière phrase et les caractéristiques mesurées. Jugez chaque entrée sur quatre questions : l'accroche fonctionne-t-elle
seule, un étranger peut-il la suivre, y a-t-il une conclusion, y a-t-il une affirmation concrète, un nombre ou une histoire.

Ne lisez jamais words.raw.json ou candidates.json. Choisissez le nombre de clips demandé par l'utilisateur dans la
shortlist, les meilleurs d'abord. Supprimez, quel que soit le score :

  • une lecture publicitaire, un segment sponsorisé, une introduction ou une conclusion ;
  • une accroche qui repose sur un contexte antérieur ("comme je l'ai dit", "c'est pourquoi", "celui-ci") ;
  • un clip dont le point repose sur une affirmation datée ("au moment où j'enregistre ceci, c'est le numéro 40") alors que
    l'affirmation a changé depuis : une capture en direct de la page d'aujourd'hui la contredirait.

4. La page de sélection, puis la boîte de question

python3 "$K" page clips/<nom> --recommend c12,c40,c7
open clips/<nom>/picks.html    # Windows : start "" ..., Linux : xdg-open ...

Une page : chaque clip de la shortlist avec un aperçu de 360 px, sa transcription (l'accroche en gras), la
décomposition du score et les caractéristiques mesurées, vos choix marqués. Ensuite demandez dans la boîte de question
(sélection multiple) : vos choix d'abord, chacun étiqueté avec son horodatage et son accroche, plus "un différent
parmi la page". Attendez la réponse.

5. Chaque clip choisi

python3 "$K" trim clips/<nom> c12 c40 c7          # -> edits/<nom>-clip1, -clip2, -clip3

Chaque dossier de montage reçoit source.mp4 (précis à la trame, rempli sans attraper le mot suivant) et
words.raw.json réajusté pour lui. Une source audio uniquement (source.mp3) n'a pas d'image : trim crée pour chaque
clip un source.mp4 avec son audio sur la couverture du podcast (la couverture floutée et assombrie pour remplir 1080x1920,
la couverture nette au-dessus des sous-titres ; pas d'illustration : noir), et clip.json indique audio_only. Avec une couverture, le
rendu la déplace : un lent zoom sur la couverture, le fond défilant contre elle, une petite impulsion au début de chaque phrase. Pour ceux-ci,
ne demandez pas de disposition : superposition, recadrage non, pas de cut-out, sous-titres activés (profile.py style les laisse activés). Dites une fois
que chaque clip est l'audio sur la couverture de l'émission avec les mots de l'orateur en sous-titres. Avant d'exécuter les clips, réglez la musique une fois pour tous
(style-edit references/plan.md "Music" ; le style décide sauf si l'utilisateur a défini sound.music).

Tous les clips en une fois (Claude Code, ou tout agent avec sous-agents) : lancez un agent clip-editor
(clip-editor) par clip, tous dans un seul message pour qu'ils s'exécutent simultanément. Donnez à chacun
EDIT (le dossier du clip, absolu), ROOT (${CLAUDE_SKILL_DIR}/../..), la ligne PY, et les réponses :
aspect, disposition, musique, moteur de transcription, et recadrage oui (source large, sauf si la plateforme est
YouTube) ou non, et si la source a des sous-titres incrustés. Chacun prend son clip à travers le cut et le style-edit jusqu'à la feuille de photogrammes et retourne un
JSON court : status, cut_s, verify, cut_page, sheet, error. Fusionnez-les ; n'ouvrez jamais la transcription
d'un clip ni son montage papier. Lancez ensuite l'agent stills-critic sur chaque feuille de clip ready, à nouveau tous dans
un seul message, et corrigez ce qu'ils échouent (plan et photogrammes à nouveau pour ce clip). Un clip failed : exécutez-le manuellement comme ci-dessous.

Un par un (pas de sous-agents), pour chaque clip dans l'ordre :

  1. Vertical à partir d'une vidéo large : python3 "$PY" "$K" reframe edits/<nom>-clip<N> recadre en 9:16 avec le
    recadrage suivant le visage de l'orateur plan par plan (coupures de caméra trouvées avec ffmpeg). Ignorez-le lorsque
    la plateforme du profil est YouTube ou que la source est déjà verticale.
  2. Cut : la compétence cut à partir de son étape 2 (retakes.py propose) : la transcription est déjà là.
    Puis build, render, verify et la page cut, comme indiqué dans cette compétence. La musique sous la voix est
    mesurée par fichier : build_timeline.py ne coupe qu'entre les mots là-bas.
  3. Style : python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/profile.py" style edits/<nom>-clip<N>,
    puis la compétence style-edit à partir de son étape 2. Si la source a déjà des sous-titres incrustés, définissez
    "captions": {"present": false} dans le style.json de ce montage, sinon les sous-titres s'empilent.

Dans les deux cas, ouvrez chaque cut-check.html de clip et montrez toutes les feuilles de photogrammes ensemble pour une
approbation, posez la question de rendu une fois pour tous, et rendez. Après approbation, exécutez
python3 "${CLAUDE_SKILL_DIR}/../../skills/cut/scripts/judge_cut.py" score sur chaque dossier de clip (cut
references/judge.md). Remettez les rendus sur une
seule page de révision, chaque clip un onglet (start avec le clip 1, alt pour les autres, dossier clips/<nom> ; voir
${CLAUDE_SKILL_DIR}/../../skills/style-edit/references/review.md), puis serve et wait en arrière-plan.

Si un script s'arrête

messageaction
no run of whole sentences lasts <lo>-<hi> sdemandez dans la boîte de question une durée plus large, relancez candidates
no candidate <id>utilisez un id depuis shortlist.md
links.py fetch exit 3 (connexion ou "confirmez que vous n'êtes pas un robot")demandez avant de relancer avec --cookies-from-browser <navigateur>
tout message de cut ou style-edittableau "Si un script s'arrête" de cette compétence

Règles

  1. Chaque mot, nombre et nom à l'écran provient des mots du clip lui-même. Rien du reste de
    la vidéo, et rien que l'orateur n'ait dit.
  2. Pas d'apparence IA : ${CLAUDE_SKILL_DIR}/../../skills/style-edit/references/ai-tells.md s'applique à chaque clip.
  3. Un plan serré de podcast n'a pas d'espace libre : aucune carte ou logo ne va au-dessus de la tête. Moins de visuels est
    juste ; les sous-titres et les zooms portent le contenu.
  4. Ne coupez jamais un clip en milieu de phrase. Plus court ou plus long que demandé vaut mieux qu'une pensée brisée.

Coût par vidéo longue

Mesuré sur un podcast de 13 minutes à deux personnes et une vidéo de 12 minutes en talking-head (2026-10) :

  • Transcription : Scribe a pris 16-18 s ; Whisper est gratuit et plus lent. Une fois par vidéo longue.
  • Candidats et caractéristiques : 4-6 s de code, 0 $.
  • Claude lit shortlist.md (environ 1 500 tokens), jamais la transcription (environ 20 000).
  • La page de sélection : 30-40 s de ffmpeg pour 8 aperçus, 7-9 Mo.
  • Chaque clip coûte ensuite ce que coûtent un cut et un style-edit.

Auto-vérification

python3 "$K" demo

Fichiers

  • scripts/clips.py : candidats, page, trim, reframe et la démo hors ligne (transcription synthétique).
    Stdlib uniquement, sauf reframe (OpenCV, via le venv).
  • ${CLAUDE_SKILL_DIR}/../../agents/clip-editor.md : un clip à travers le cut et le style-edit jusqu'à sa feuille de photogrammes.

Individual skills in this repo

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

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

Cuts raw talking-head footage into a clean jump cut. Takes one take or several joined (mp4 or mov, any aspect, 4K phone footage is fine), transcribes it word by word, removes retakes, false starts, fillers and dead pauses, and renders cut.mp4 at the source resolution plus words.json timed to the cut. The user approves the cut on a page with the whole transcript and every removed word struck through. Use when the user says "cut my video", "just cut it", "remove my mistakes", "cut out the retakes", "remove the pauses", "clean up this take", "jump cut this", "tighten this clip", or asks only for the cut of a raw take; start calls it for a full edit. Runs before style-edit. Not for a general request to edit a video or to make it look like a creator (that is start), not for adding captions, zooms or cards (style-edit), and not for analysing someone else's videos (creator-teardown).

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