Communitygithub.com

Conz-Wilts/ai-editor

Schneidet rohes Talking-Head-Material in einen sauberen Jump Cut. Nimmt einen oder mehrere zusammengefügte Takes (mp4 oder mov, jedes Seitenverhältnis, 4K-Handyaufnahmen sind okay), transkribiert wortgenau, entfernt Wiederholungen, Fehlstarts, Füllwörter und tote Pausen und rendert cut.mp4 in der Quellauflösung sowie words.json zeitlich zum Cut. Der Benutzer genehmigt den Cut auf einer Seite mit dem gesamten Transkript, in dem jedes entfernte Wort durchgestrichen ist.

Was ist ai-editor?

Der `ai-editor` Skill automatisiert den Schnitt von Talking-Head-Videos, indem er automatisch Fehlstarts, Wiederholungen, Füllwörter („ähm“, „also“) und lange Pausen entfernt. Er erstellt einen „Jump Cut“, bei dem die verbleibenden Sprachteile nahtlos aneinandergereiht werden. Der Skill unterstützt mehrere Videoeingänge (mp4, mov) und liefert neben dem fertigen Video (`cut.mp4`) eine JSON-Datei (`words.json`) mit den zeitlichen Marken der geschnittenen Wörter. Der Nutzer genehmigt den finalen Cut über eine visuelle Vorschau, in der alle gestrichenen Passagen sichtbar sind (durchgestrichen im Transkript). Der Skill ist Teil eines Editor-Workflows und läuft typischerweise vor dem `style-edit` Skill, der dann Zooms, Untertitel und andere Effekte hinzufügt. Er ist konzipiert für Claude Code (oder ähnliche Coding Agents) und nutzt lokale oder Cloud-basierte Transkriptions-Engines (Whisper, CrisperWhisper, Scribe).

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Cut

Pfade: ${CLAUDE_SKILL_DIR} bedeutet den Ordner, der diese SKILL.md enthält, und ${CLAUDE_SKILL_DIR}/../.. den Editor-Ordner (dieses Repos .claude/) zwei Ebenen darüber.

Lies zuerst ${CLAUDE_SKILL_DIR}/../../PRINCIPLES.md: die Regeln, die jedes Video befolgt.

Jede Frage kommt in das Fragefeld: das AskUserQuestion-Tool (2–4 Optionen, empfohlen als erstes). Nur in einem Agenten ohne dieses Tool stell nummerierte Fragen im Text.

edits/<name>/  transcript.txt (lies dies, niemals words.raw.json), spans.json (was entfernt werden soll, zitiert),
  candidates.md (was der Code markiert hat), paper-edit.md (der Cut als Text), cut-check.html (das
  Transkript), review.json (Notizen), cut.mp4 + words.json (der Render und seine Wörter).

<name> ist ein Slug des Dateinamens (IMG_1234.MOV -> img-1234), in der Bibliothek (PRINCIPLES.md „Wo“). Ändere, verschiebe oder kopiere niemals die Quelldatei: übergib ihren Pfad.

PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py"; python3 "$PY" führt das Tool-Venv aus. Unter Windows verwende py wo immer diese Befehle python3 sagen. Kein Venv vorhanden: führe zuerst den setup-Skill aus. S="${CLAUDE_SKILL_DIR}/scripts".

Noch kein Video?

Frage nach dem Pfad des Takes. Mehrere Dateien: references/takes.md. Keine: Wenn AI_EDITOR_SAMPLE_URL gesetzt ist, biete diesen Beispiel-Take an und lade ihn in den Ordner des Benutzers herunter (curl -L -o sample-take.mp4 "$AI_EDITOR_SAMPLE_URL"); ansonsten bitte ihn, einen aufzunehmen (irgendein Handyvideo, in dem er 30–60 s spricht, reicht aus).

0. Frage: Den Cut zuerst oder alles auf einmal

Stelle vor allem anderen eine Frage im Fragefeld (start entscheidet dies für einen gesamten Schnitt):

Möchtest du zuerst nur den Cut oder den Cut und den stilisierten Schnitt in einem Durchgang?

  • Nur den Cut zuerst (Empfohlen). Du genehmigst den Cut, bevor ich Untertitel, Zooms oder Grafiken hinzufüge, sodass ein geänderter Cut die Grafiken nie neu aufbaut (weniger Tokens).
  • Alles auf einmal. Ich schneide, dann style ich ohne zu warten. Du siehst trotzdem die Cut-Seite und das Standbild-Blatt, bevor etwas gerendert wird.

Überspringe dies nur, wenn der Benutzer bereits geantwortet hat („schneide es einfach“, „schneide und style es in einem Durchgang“) oder start oder clips diesen Skill aufgerufen haben. Nur den Cut zuerst: Schritte 1–6, dann anhalten, bis der Benutzer den Cut genehmigt und nach dem Stil fragt. Alles auf einmal: Schritte 1–5, öffne die Cut-Seite, fahre direkt mit style-edit fort; eine spätere Cut-Änderung führt style-edit ab seinem Plan-Schritt erneut aus.

0b. Lese den Geschmack des Benutzers

python3 "${CLAUDE_SKILL_DIR}/../../skills/taste/scripts/taste.py" show --edit edits/<name>

Befolge jede Regel darin. Speichere eine Reaktion auf ein Ergebnis („zu langsam“) mit dem taste-Skill, bevor du es wiederholst.

1. Transkribieren

python3 "$PY" "$S/transcribe.py" <quelle> edits/<name>/words.raw.json [--script <ihr_script>]

Ein Script (oder --keyterm Name, wiederholbar) sorgt für korrekte Namen und Fachbegriffe (+20 % bei Scribe).

Nenne zuerst die Zeit: Whisper 1–4 Min. für einen 3-Min.-Take, CrisperWhisper etwa die Länge des Takes. Es wählt Scribe aus, wenn ein Schlüssel gespeichert ist, ansonsten CrisperWhisper, falls installiert, sonst das kostenlose lokale Whisper (--engine whisper|crisper|scribe zum Überschreiben), welches einige Ähms und Fehlstarts verwirft. Wenn keins vorhanden ist, sage einmal, dass das Setup eines hinzufügen kann (CrisperWhispers Gewichte sind nur für nicht-kommerzielle Nutzung). Lade niemals ein Modell mitten im Schnitt herunter: Eine Überprüfung, die ein nicht installiertes benötigt (exit 4), wird übersprungen und in der Runde vermerkt.

Lies niemals words.raw.json: Schritt 2 schreibt transcript.txt, 1/12 der Größe.

2. Entscheiden, was geschnitten werden soll

python3 "$S/retakes.py" propose edits/<name>

Code findet jeden möglichen Cut (eine wiederholte Zeile, ein unvollendeter Satz, „warte, sorry“, Füllwörter) in candidates.md. Jedes ist ein Ort zum Nachsehen, keine Entscheidung. Lese transcript.txt und candidates.md, folge references/retake-detection.md und schreibe spans.json (references/shapes.md).

Mit einem script.md: python3 "$S/script_match.py" edits/<name>, lies script-match.md (references/script.md).

Der letzte Take gewinnt, außer bei alternativen Haken. Gib niemals einen Zeitstempel ein oder spanne eine Pause.

Nur wenn der Benutzer es kürzer möchte (oder sein Geschmack den redaktionellen Durchlauf vorschreibt), lies auch references/editorial-rules.md und füge redundant Cuts (Inhaltsaufrufe) hinzu.

Ein falsch gehörtes Name ist ein einziger Befehl, niemals eine JSON-Neuschrift: python3 "$S/retakes.py" fix edits/<name> cloud=Claude jiv=Jev (ganze Wörter, bleiben in fixes.json für die Untertitel).

3. Bauen

python3 "$S/build_timeline.py" <quelle> edits/<name> && python3 "$PY" "$S/mirror.py" <quelle> edits/<name>

Jede Pause (auch Atemzüge) über --max-pause (0,15 s) wird zu 0,10 s; unter Musik werden nur Wortlücken gekürzt. Ein Build-ERROR schreibt nichts: korrigiere diese Spanne und führe es erneut aus.

mirror.py sagt mirrored, wenn ein Buch, Shirt oder Schild rückwärts lesbar ist (ein Frontkamera-Take): frage einmal, Wie aufgenommen lassen (Empfohlen) (die meisten Ersteller posten es so) / Spiegeln, damit der Text lesbar ist; bei einem Spiegel füge --flip zu jedem render.py unten hinzu.

Starte in einer Nachricht die Spannen-Kodierung im Hintergrund (run_in_background) und die Papier- Prüfungen; Schritt 4 kodiert dann nur, was geändert wurde:

python3 "$S/render.py" <quelle> edits/<name> --segments-only

Der cut-judge Agent bewertet paper-edit.md (ein übrig gebliebener Patzer, eine schlechte Verbindung, eine gute verlorene Zeile) und korrigiert spans.json. Vorleser für Takes über 5 Min. gehen zuerst, der Richter danach: references/judge.md. Lies niemals paper-edit.md selbst.

  • CLIPPED in paper-edit.md: Eine Pausen-Cut hat ein Wort gefressen. Erhöhe --pad. Immer noch da: Ein Label ist falsch.
  • Verbindungen innerhalb von Sprache verschieben sich zu einem ruhigen Frame. Jedes still in speech: Höre in Schritt 5.

4–5. Rendern und verifizieren

Vordergrund (render.py wartet auf die Hintergrund-Kodierung):

R="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/review.py"
python3 "$S/build_timeline.py" <quelle> edits/<name> && \
python3 "$S/render.py" <quelle> edits/<name> && \
python3 "$PY" "$S/verify_cut.py" edits/<name> --engine <gleiche engine wie Schritt 1> && \
python3 "$S/preview_cut.py" edits/<name> --no-open && \
python3 "$R" edits/<name> start --video edits/<name>/cut.mp4 --stage cut --transcript edits/<name>/words.json

Verifizieren sauber: Die Cut-Seite ist bereit. Verify vergleicht das Transkript des Cuts mit den behaltenen Wörtern (exit 1 stoppt die Kette):

  • MISSING: Ein behaltenes Wort ist nicht im Render. Erhöhe --pad (oder verkleinere die Spanne), baue neu, rendere neu.
  • SURVIVED: Eine Spanne zum Hinzufügen für eine echte Wiederholung oder einen Stolperer, niemals eine, die eine behaltene Zeile schneidet.
  • HEARD DIFFERENTLY („jev -> jeff“) und Füllwort-Notizen sind Transkriptionsvarianz: kein Neubau.
  • DOUBLED: Wörter, die zweimal hintereinander gesagt wurden. Natürlich („sehr, sehr“): behalten. Ein Stolperer: Füge seine Spanne hinzu.
  • N Join(s) in speech: Höre. Abgeschnitten: splice_check.py edits/<name> --fix, neu rendern.

Ein Korrekturzyklus (die gleiche Kette), dann zeige dem Benutzer, was übrig ist.

6. Der Benutzer genehmigt

Die Kette hat die Überprüfungsseite geöffnet (../style-edit/references/review.md). serve und wait im Hintergrund. Nenne die geschnittenen Sekunden. Notizen: „behalte “: Verkleinere oder lösche diese Spanne; „schneide “: Füge eine hinzu; Pausen aus: --max-pause. Dann Schritte 4–5, löse jede Note auf (--reply: was sich geändert hat), zuletzt round --video edits/<name>/cut.mp4 (niemals ein zweites start), dann stelle eine Lernfrage.

Nach der Genehmigung ein Bash-Aufruf: python3 "$S/trend.py" log edits/<name> (tally: Trend), der Haken-Check. Dann Haken-Varianten, falls hooks.json existiert (references/retake-detection.md); aufgerufen von start, frage dies im selben Fragefeld wie die Standbild-Genehmigung von style-edit, nicht davor.

Nur die Genehmigung beendet den Cut; cut.mp4, words.json gehen zu style-edit. Bei „nur den Cut zuerst“ sage, dass sie nach dem Stil fragen können. Starte niemals selbst style-edit. Aufgerufen von start: Sobald die Seite geöffnet wird, starte visual-prep im Hintergrund; seine motion_briefs: ein Hintergrund- clip-builder jeweils auf einmal; sage ein motion_note einmal.

Wenn ein Skript stoppt

Nachrichttue
no such file / ffmpeg could not read audioFrage nach dem richtigen Pfad; kopiere oder konvertiere die Quelle niemals
faster-whisper missing / CrisperWhisper missingFühre aus mit python3 "$PY" oder dem setup-Skill Schritt 3
no ElevenLabs key (exit 2) / HTTP 4xx, unreachable (3)Wirf --engine scribe weg, oder speichere den Schlüssel erneut mit dem setup-Skill
Build ERROR bei einem ZitatKorrigiere das Zitat dieser Spanne oder füge occurrence hinzu, baue erneut
cannot derive a silence threshold / marked no silenceSprache und Hintergrund sind weniger als 10 dB auseinander: ffmpeg -i <quelle> -af volumedetect -vn -f null -, übergib --noise etwa 10 dB über dem Mittelwert
Render ERROR ...Sage es; führe render einmal erneut aus

Regeln

  1. Jeder Cut zitiert das Transkript. Kein Zitat, kein Cut.
  2. Ein Script bricht Gleichstände zwischen Takes und behält jeden Take einer Zeile, die es zweimal sagt. Nichts wird geschnitten, weil es nicht im Script steht.
  3. Niemals Stream-Kopieren (-c copy) über Cuts hinweg: Es landet bis zu 2 s daneben.
  4. Gib niemals einen Render ab, der nicht verifiziert und genehmigt wurde.

Selbstprüfung

test_build_timeline.py, test_retakes.py, test_media.py (ffmpeg); demo auf 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.

Verwandte Skills