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.
CLIPPEDinpaper-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
| Nachricht | tue |
|---|---|
no such file / ffmpeg could not read audio | Frage nach dem richtigen Pfad; kopiere oder konvertiere die Quelle niemals |
faster-whisper missing / CrisperWhisper missing | Fü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 Zitat | Korrigiere das Zitat dieser Spanne oder füge occurrence hinzu, baue erneut |
cannot derive a silence threshold / marked no silence | Sprache 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
- Jeder Cut zitiert das Transkript. Kein Zitat, kein Cut.
- 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.
- Niemals Stream-Kopieren (
-c copy) über Cuts hinweg: Es landet bis zu 2 s daneben. - 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.