Was macht Reel bearbeiten?
Dies ist der bereits genehmigte Workflow mit dem WhatsApp-Reel (references/ejemplo-whatsapp.reel.json).
Das Ziel ist, dass der nächste Reel genauso rauskommt, ohne dass ich es noch einmal erklären muss: gleicher Stil,
gleiche Kriterien, gleiche Überprüfungen. Sprich mit ihm auf Deutsch und ohne unnötige Fachsprache.
Vor allem: Profil und Installation
Lies ~/.claude/skills/editar-reel/perfil.json (Name des Benutzers, seine Marke, das Schlusslogo und wo er
die Clips speichert). Nenne ihn beim Namen und verwende seinen Clip-Ordner in Schritt 1.
Wenn perfil.json nicht existiert oder ein Werkzeug aus der Umgebung fehlt, ist es das erste Mal auf diesem Mac: Folge
INSTALAR.md (alles installieren und Profil erstellen), bevor du etwas bearbeitest.
Umgebung (wird von install.sh eingerichtet, siehe INSTALAR.md)
- HyperFrames CLI:
~/.npm-global/bin/hyperframes(Telemetrie deaktiviert). Exportiere immerPATH="$HOME/.npm-global/bin:$PATH" HYPERFRAMES_NO_TELEMETRY=1 HYPERFRAMES_SKIP_SKILLS=1; die Shell von Claude lädt~/.zshrcnicht. - faster-whisper:
~/.venvs/whisper/bin/python(mitav<16; die neue PyAV-Version zerstört faster-whisper). - FFmpeg in
/opt/homebrew/bin.python3des Systems (3.9) reicht für die Skripte ohne numpy. - Soundeffekt-Bibliothek:
~/Movies/Reels/_sfx/. Die 13 Originale (whoosh_1/2, pop_1/2, tick, ding, message, counter, typing, clock, slide, hit, riser) klingen nur mit den Grafiken; Stil „Apple-Sounds“: kurz, sauber, weich. Es gibt ~45 weitere (Impacts, Whooshes, Registrierkasse, Klicks, iPhone…) für die manuelle Verwendung: Katalog und wann man welchen verwendet inreferences/sfx.md. - Skripte dieses Skills:
SK=~/.claude/skills/editar-reel/scripts. - Schlusslogo: das aus
perfil.json(cierre). Das von vinagre.tech, vektorisiert, liegt inassets/vinagre-tech/; das einer anderen Marke wird inassets/marca/gespeichert (sieheINSTALAR.md).
Stile
Der Benutzer bestellt Reels nach Stil („bearbeite es mit Stil 2“). Wenn er nichts sagt, verwende Stil 1.
Alle teilen den untenstehenden Workflow (transkribieren, schneiden, QA, Sounds, Master); Schritt 5–6 ändert sich.
Alle enden mit dem Schlusslogo seiner Marke (das aus perfil.json; 1,6 s, weißer Hintergrund, scripts/outro.py): das Video endet nie
abrupt. Es erscheint standardmäßig (außer "cierre": null im Profil); "outro": null in reel.json entfernt es, "outro": {"bg": "#000"} ändert es.
| Stil | Was es ist | Skript | Referenz |
|---|---|---|---|
| 1 · Tarjeta | Überschrift mit Grafik in dunkler Karte oben alle 2–3 s + kleiner, einzeiliger Untertitel unten. | build.py | references/ejemplo-whatsapp.reel.json |
| 2 · Frases | Großer Satz unten in weiß (was kommt, durchscheinend), Schlüsselwort in einer Pille, Inline- und schwebende Symbole, wenige weiße Karten und Vollbild-Grafikebenen. | build_frases.py | references/estilo-frases.md |
| 3 · Cine | Horizontales Clip im 16:9-Kinofenster auf Schwarz (freie Streifen), warmer Farbton, langsamer Zoom, kleine Untertitel in Kleinbuchstaben auf beiden Seiten des Gesichts, letztes Wort groß in Großbuchstaben. Für nahe oder emotionale Videos. | cut_cine.py + build_cine.py | references/estilo-cine.md |
Bewegung v2 (genehmigt am 02.11.2026, Standard in Stil 1): Regeln aus references/motion-reglas.md
(Überschriften drehen sich, Zahlen drehen sich Ziffer für Ziffer, Grafiken kommen vollständig an). Reels, die vorher erstellt wurden,
haben "anim": 1 in ihrer reel.json, damit eine Nachbearbeitung ihre bereits genehmigte Bewegung nicht ändert.
Die Stile 1 und 2 können zusätzlich Motion-Bildschirme im Vollbild haben (Mac-Terminal, Punktegitter mit
einer Zahl, Kartenorbit), in "motion" von reel.json: lies references/motion.md, um zu wissen, wann und wie.
Wenn der Benutzer Änderungen an einem Stil wünscht und diese genehmigt, speichere sie im Skript und der Karte dieses Stils.
Wenn er etwas Neues möchte, erstelle einen neuen Stil (4, 5…) anstatt einen genehmigten zu ändern. Mache ihm zuerst eine ~10 s
Probe ("sample_end" in reel.json, Stile 2 und 3), bevor du den gesamten Reel zusammenstellst.
Struktur jedes Reels
~/Movies/Reels/<kurzname>/
reel.json die Eigenschaften dieses Reels (schreibst du; Format in references/reel-json.md)
work/ Transkriptionen, Schnitte, QA-Bilder, Zwischenrender
proyecto/ HyperFrames-Projekt (generiertes index.html + assets/)
reel-<name>.mp4 die Lieferdatei
portada-<name>.jpg das Cover für Instagram (Schritt 8b)
Ablauf
1. Clip finden
Liegt normalerweise im Ordner clips von perfil.json (standardmäßig ~/Movies/CapCut/) oder in dessen Unterordnern. Wenn es mehr als einen Kandidaten gibt und nicht klar ist,
welcher es ist, frage mit Optionen (Name, Dauer, Datum); den falschen zu bearbeiten kostet viel Zeit.
Überprüfe mit ffprobe Auflösung, fps und Dauer.
2. Transkribieren
mkdir -p ~/Movies/Reels/<n>/work
~/.venvs/whisper/bin/python -I $SK/transcribe.py "<clip>" ~/Movies/Reels/<n>/work medium de
Erstellt src.words.json (Wörter mit Zeitstempeln), fillers.txt (Durchlauf, der Whisper zwingt, „ähm“, „hmm“,
„also“ zu schreiben; normalerweise überspringt er sie) und silences.json. Lese alle drei.
3. Entscheiden, was entfernt wird (dein Kriterium)
- Wiederholte Aufnahmen: Wenn er einen Satz wiederholt oder anfängt und abbricht, behalte die letzte Aufnahme und entferne die vorherigen.
- Füllwörter: diejenigen, die in
fillers.txterscheinen und nicht in der sauberen. - Stille: Muss nicht markiert werden;
cut.pyentfernt ≥0,2 s und lässt 0,07 s Luft auf jeder Seite. Notiere die Bereiche (ursprüngliche Zeit) inremovevonreel.json, zusammen mitsource. Wenn es nichts gibt,"remove": []und sag es ihm („es gab keine Füllwörter oder wiederholten Aufnahmen“, falls zutreffend: du hast es überprüft, nimm es nicht an).
cd ~/Movies/Reels/<n> && hyperframes init proyecto --example blank --resolution portrait --non-interactive
python3 -I $SK/cut.py ~/Movies/Reels/<n>
Erstellt das HyperFrames-Projekt (vor dem Schneiden: init benötigt, dass der Ordner proyecto nicht existiert) und schneidet dann,
extrahiert 1080×1920 bei 30 fps und bringt die Stimme auf -14 LUFS in proyecto/assets/cut_norm.mp4; die Wörter mit neuen
Zeitstempeln landen in work/cut.words.json.
4. Bildausschnitt prüfen
Extrahiere einen Streifen von Einzelbildern (ffmpeg -i proyecto/assets/cut_norm.mp4 -vf "fps=1/5,scale=270:-1,tile=6x1" -frames:v 1 work/contact.png)
und lokalisiere das Gesicht: Im Referenz-Reel ging es von ~520 bis ~1160 px vertikal, mit freier Wand rechts.
Die Überschrift geht über den Kopf (Karte von 170 bis 430 px), die Untertitel über das T-Shirt unterhalb
des Ansteckmikrofons, das Intro-Logo an der Wand neben dem Kopf. Wenn dieser Clip einen anderen Bildausschnitt hat,
passe layout und die Position von logos in reel.json an.
5. Inhalt in reel.json schreiben
Lies references/reel-json.md und references/graficos.md. Was festgelegt ist:
- Haken (0–2 s): zwei große Zeilen in GROSSBUCHSTABEN, gelbe Kästchen mit schwarzem Text. Eine Frage oder Aussage, die den im Video aufgeworfenen Schmerzpunkt zusammenfasst, kein wörtlicher Satz. Sichtbar ab dem ersten Bild.
- Überschriften: 2–5 Wörter, wechseln alle 2–3 s, fassen zusammen, was in diesem Abschnitt gesagt wird, jede mit ihrer animierten Grafik.
- Logos: jedes Mal, wenn er ein Werkzeug oder eine Marke nennt, sein echtes Logo (Simple Icons; wenn nicht vorhanden, das offizielle SVG
aus seinem Presskit in
proyecto/assets/logos/<slug>.svg). Niemals ein erfundenes oder ungefähres Logo. - Untertitel: klein, einzeilig, unten, aktives Wort in der Akzentfarbe. Korrigiere in
fixesdie Fehler von Whisper, die du siehst (Eigennamen, „eine Leute“ → „ein Agent“ usw.). - Motion-Bildschirme (optional, einer oder zwei pro Reel): wenn er sagt, dass er Claude etwas bittet oder Schritte einer
Automatisierung erklärt →
terminal; wenn er eine Zahl nennt →dots; wenn er berechnet, was man pro Jahr gewinnt oder verliert →months; „schau, was ich alles zusammengestellt habe“ →orbit; ihm schreiben Kunden oder er bekommt Nachrichten →notify; er nennt eine Einnahmen- oder Ergebniszahl →chart. Sie sind erwünscht: Sie geben dem Video eine Verschnaufpause (biete einen an, wenn es keinen gibt). Siehereferences/motion.md. Schlage sie nur vor, wenn sie das Gesagte widerspiegeln; bei Zweifeln frage ihn. - Letzter Aufruf: wenn er bittet, ein Wort zu schreiben, oder die Marke nennt, letzter Block mit
"graphic": "logo"und einemdinginsfx_extragenau in dem Moment, in dem er dieses Wort sagt. - Wörtliche Sounds (optional): wenn er etwas mit einem eigenen Sound sagt (Geld →
cash, Handy fallen lassen →iphone_lock, eine Nachricht schreiben →phone_typing), füge es insfx_extrazu diesem Wort hinzu. Lesereferences/sfx.md; höchstens einer oder zwei pro 10 s, und Memes nur, wenn er sie verlangt.
6. Sounds vorbereiten und Composition generieren
python3 -I $SK/prep_sfx.py ~/Movies/Reels/_sfx ~/Movies/Reels/<n>/proyecto/assets/sfx
python3 -I $SK/build.py ~/Movies/Reels/<n>
cd ~/Movies/Reels/<n>/proyecto && hyperframes lint
prep_sfx entfernt die anfängliche Stille jedes Sounds (sonst ertönt er verspätet zur Animation), schneidet lange mit
Ausblendung zurecht und normalisiert sie auf -3 dBFS Spitze. Der Riser wird so zugeschnitten, dass er an seinem Höhepunkt endet
(0,2–2,0 s der aktuellen Datei); wenn sich die Datei ändert, schaue auf ihre Hüllkurve und passe SPEC an.
In lint sind erwartet und werden ignoriert: nested_structure_needs_subcomposition und timeline_track_too_dense.
Jeder Fehler oder eine andere Warnung wird behoben.
7. Qualitätssicherung der Einzelbilder (vor dem Rendern, immer)
Extrahiere ein Bild von jedem Block, in der Mitte des Blocks, wenn die Animation bereits beendet ist:
hyperframes snapshot --at <haken≈1.0>,<jeder Block: start+1.3>,... --no-end --describe false -o ../qa
Setze sie auf ein Blatt (ffmpeg -pattern_type glob -i 'qa/frame-*.png' -vf "scale=360:-1,tile=6x2" ...), schau sie an
und vergrößere die verdächtigen Bereiche (Ausschnitte in Originalgröße der Karte und der Untertitel). Suche und behebe:
- abgeschnittener oder aus der Karte ragender Text / ein einzelnes Wort in einer Zeile;
- etwas über dem Gesicht (in jedem Block, auch mit dem Zoom von 1,08 der Schnitte);
- wenig Kontrast (heller Text auf weißer Wand → benötigt dunklen Hintergrund);
- Untertitel, die das Ansteckmikrofon oder das T-Shirt-Logo auf hässliche Weise verdecken;
- eine Grafik, die nicht verständlich ist oder komisch aussieht (passierte mit dem ersten
head: wurde neu gemacht). Wiederhole den Snapshot nach jeder Korrektur. Hände, die vor den Untertiteln vorbeigehen, sind unvermeidbar; kein Fehler.
Mit dem Gold vergleichen. references/oro/ hat das Blatt mit 12 Bildern der genehmigten Reels jedes Stils
(estilo1-whatsapp, estilo1-18k, estilo2-fras, estilo3-reto40). Nach dem Rendern (Schritt 8) extrahiere das des neuen Reels
mit python3 -I $SK/hoja.py <reel>.mp4 work/hoja.png, lege es neben das seines Stils und antworte: Welches der beiden
ist leerer, flacher oder hat kleinere Grafiken? Wenn es das neue ist, wird das zuerst behoben.
Wenn der Benutzer einen Reel genehmigt, der besser aussieht als das Gold seines Stils, füge sein Blatt zu references/oro/ hinzu.
8. Rendern, Audio prüfen und masterisieren
hyperframes render --fps 30 -o ../work/render_mix.mp4
~/.venvs/whisper/bin/python -I $SK/measure_sfx.py ~/Movies/Reels/<n> ~/Movies/Reels/<n>/work/render_mix.mp4
python3 -I $SK/master.py ~/Movies/Reels/<n>/work/render_mix.mp4 ~/Movies/Reels/<n>/reel-<n>.mp4
measure_sfxsagt, wie laut jeder Effekt im Vergleich zur Stimme ist. Ziel: Schlag -6 dB, Ding -8, Message ≈-8, Pop/Whoosh/Slide -11 bis -13, Tick -14, Uhr/Zähler/Riser -16, Tippen -18 bis -20. Wenn einer um >2 dB abweicht (z. B. weil sich eine Datei in_sfxgeändert hat), korrigiere es mitsfx_volund rendere erneut. Dass ein Effekt lauter als die Stimme ist, ist der schwerwiegende Fehler: Er übertönt, was gesagt wird.master.pybringt den Reel auf -14 LUFS (Spitze -1,5 dB), indem es das Video unverändert kopiert. Das ist nötig, weil der Mischer von HyperFrames die Mischung um ~1,8 dB senkt und sie auf ~-16 LUFS belässt.- Überprüfe die Lieferdatei: 1080×1920, 30 fps, erwartete Dauer, -14 LUFS.
8b. Cover
python3 -I $SK/cover.py ~/Movies/Reels/<n>
Sauberes Bild aus dem Video mit dem Haken in gelben Kästchen, zentriert im Bereich, den Instagram im
Profilraster (3:4) zeigt, damit im Feed lesbar ist, worum es in jedem Video geht. Hinterlässt portada-<n>.jpg und
work/portada-feed.png (wie es zugeschnitten aussieht). Geht mit dem Titel in der Mitte
(entschieden am 02.11.2026, auch wenn es einen Teil des Gesichts verdeckt; im Video bleibt der Haken oben, über dem Kopf).
Schau es dir an: Das Bild ("cover": {"at"}) muss ein gutes Gesicht zeigen und nichts abgeschnitten haben. "cover": {"y"} oder
python3 -I $SK/cover.py <reel> 560 nur, wenn eine andere Höhe gewünscht wird. Der Benutzer lädt es beim Veröffentlichen hoch
unter „Cover bearbeiten → aus der Galerie hinzufügen“.
9. Liefern
Sage ihm, wo die .mp4 und das Cover sind, und fasse in wenigen Zeilen zusammen: wie viel geschnitten wurde (von X s auf Y s und was entfernt wurde), den Haken,
die Überschriften (oder die repräsentativsten), welche Logos vorkommen, welche Untertitel-Korrekturen du gemacht hast und was du bei der
Qualitätssicherung behoben hast. Wenn etwas eine diskutable Entscheidung von dir ist (z. B. der Haken ist eine Zusammenfassung, kein wörtlicher Satz),
sage es ihm und biete an, es zu ändern.
10. Aufräumen (nur wenn der Benutzer den Reel für gut befindet)
Jeder Reel hinterlässt ~150 MB an Zwischendateien und die Festplatte ist normalerweise knapp. Wenn er bestätigt, dass der Reel gut ist (nicht vorher:
während er Anpassungen macht, brauchst du sie), verschiebe in den Papierkorb (~/.Trash/reel-<n>-intermedios-<datum>/, niemals rm:
so kann er sie wiederherstellen) alles Regenerierbare:
work/*.mp4, work/*.mov, work/*.png, qa/, verworfene Versionen des Reels, alle assets/*.mp4, die
index.html nicht mehr verwendet, und die assets/sfx/*.wav, die index.html nicht nennt (prep_sfx kopiert die gesamte Bibliothek, ~15 MB;
wenn eine Nachbearbeitung einen anderen Sound benötigt, wird es erneut ausgeführt). Behalte reel.json, work/*.json, proyecto/ (mit assets/cut_norm.mp4 und sfx/)
und die endgültige .mp4: damit kann ohne erneutes Schneiden nachbearbeitet werden. Sage ihm, wie viel das Verschobene wiegt und dass es beim
Leeren des Papierkorbs frei wird. Wenn cut_norm.mp4 bei der Nachbearbeitung fehlt, regeneriert cut.py es aus dem Originalclip (falls noch in CapCut).
Musik
Füge keine Musik in das Video ein. Der Benutzer fügt die Musik beim Veröffentlichen hinzu.
(gekürzt für die Übersetzung)