Editor de Reel — Gutmann & Silva
Vollständiges Verfahren. Wird vom Repository-Stamm ausgeführt; alles in Python mit
python3 -I. Formate und safe zone in references/formatos-reel.md; Regeln für
Untertitel in references/legendas.md; Graphik-Karten in references/graficos.md.
Unveränderliche Regeln
- Der Text stammt vom Büro. Das Büro prüft den Text vor der Aufnahme; dieses Tool prüft keine Anwaltsregeln (OAB). Sprache, Untertitel, Karten und Cover werden so ausgegeben, wie der Benutzer sie genehmigt hat.
- Statische Untertitel, satzweise. Kein Pop-up, kein Wort-für-Wort-Effekt (nur Einblendung bis zu 150 ms).
- Schnitte sind reversibel. Das Original
entrada.<ext>wird nie verändert; die Schnitte leben incortes.jsonund können bearbeitet und erneut angewendet werden. - Marke nur von
brand/brand.json. Farben, Schriftarten und @-Handles kommen von dort. Erfinde niemals Markenwerte; falls sie fehlen, führe das Interview.
Vorbereitung
Führe python3 -I scripts/doctor.py aus und handle gemäß der letzten Zeile. Die Skripte benötigen
Python 3.11 oder neuer (das mitgelieferte Python auf macOS ist 3.9: brew install [email protected]); doctor läuft auf älteren Python-Versionen nur, um darauf hinzuweisen (python >= 3.11).
READY: fahre fort.READY WITH LIMITS: es fehlt nur ein optionales Element. Ohnefaster_whisperweise darauf hin, dass die automatische Transkription nicht verfügbar ist: forderepip install -r requirements.txtoder eine fertigetranscricao.jsonan und fahre fort. Ohne das Graphik-Element (Chromium + Playwright) oder ohnenodefahre ohne Karten fort und erkläre, wie man es installiert (references/graficos.md). OhnePillowoder ohnenodewird das automatische Cover (Schritte 9 und 10) nicht ausgeführt: forderepip install -r requirements.txt/ installiere node oder folge dem Figma-Pfad.MISSING: stoppe. Liste die Elemente mit ✘ auf (python, ffmpeg, ffprobe, Speicher) und erkläre, wie man sie installiert; versuche keine Renderings.
Marken-Interview
Nur wenn brand/brand.json fehlt, unvollständig ist oder einen ungültigen Wert enthält
(python3 -I scripts/brand.py check brand/brand.json endet mit einem Fehler).
- Generiere den Seed nur, wenn
brand/brand.jsonfehlt:python3 -I scripts/brand.py seed brand/brand.json. Er kommt vonbrand/guia-visual.md(marineblau#001931, Poppins, statische Untertitel). DerSeedist nur für fehlende Dateien gedacht, niemals über einer vorhandenen Datei (er verweigert sich); wenn die Datei existiert, aber unvollständig oder ungültig ist, korrigiere die vomcheckangegebenen Schlüssel ohne--force. - Stelle jeweils eine Frage, schlage immer den Seed-Wert vor und warte auf die Antwort, bevor du die nächste Frage stellst: (a) Palette, (b) Schriftarten, (c) Untertitel-Stil, (d) @ der offiziellen Social-Media-Kanäle.
- Speichere jede Antwort in
brand/brand.jsonund bestätige mitbrand.py check. Die @-Handles haben keinen Seed: erfinde nichts; lassehandlesleer, bis der Benutzer sie angibt. Wenn er sie angibt, speichere sie mit:python3 -I scripts/brand.py set-handles brand/brand.json @profil [@profil2].
Ablauf
-
Erstelle
projects/<slug>/(kurzer Slug des Themas) und kopiere das Video nachprojects/<slug>/entrada.<ext>. -
python3 -I scripts/transcribe.py projects/<slug>/entrada.<ext> projects/<slug>/transcricao.jsonWenn doctorREADY WITH LIMITSgemeldet hat (faster-whisper fehlt): installiere mitpip install faster-whispervor der Transkription oder fordere eine fertigetranscricao.jsonan. Video ohne Audio scheitert hier: fordere eine andere Datei an. -
python3 -I scripts/cut.py detect projects/<slug>/transcricao.json projects/<slug>/cortes.json -
Zeige dem Benutzer die Liste der Schnitte (ID, Start–Ende, Typ: Stille, Füllwort, Wiederholung) und die insgesamt eingesparte Zeit. Abgelehnter Schnitt: speichere
{"cuts_removed": ["c3"]}(abgelehnte IDs) inprojects/<slug>/decisions.jsonund führe aus:python3 -I scripts/review_apply.py apply projects/<slug> projects/<slug>/decisions.json(der Schnitt bleibt inrevisao.jsonerhalten und kann zurückgesetzt werden); bearbeite niemalscortes.jsonmanuell. -
Graphiken (optional): Wenn eine Karte hilft, die Rede zu verstehen (Frist, Bedingung, Schritt), schlage maximal 1 pro ~8 s vor und speichere nach Zustimmung des Benutzers
projects/<slug>/graficos.jsongemäßreferences/graficos.md(Titel bis zu 60 Zeichen, Text bis zu 140,atauf der geschnittenen Timeline, 1–6 s, Bild ausmateriais/falls vorhanden). Ohne Karte überspringe diesen Schritt. -
python3 -I scripts/render.py projects/<slug> previewund gib den Pfad zuprojects/<slug>/saida/preview.mp4(540x960) aus. -
Überprüfung: öffne nach dem Preview die Überprüfungsseite in einem Chromium-Browser – auf macOS mit
open -a "Google Chrome" review/review.html(das einfacheopenöffnet möglicherweise Safari, das keinen Zugriff auf den Ordner hat); auf Linuxxdg-open review/review.htmlfalls der Standard-Browser Chromium/Chrome ist, sonstgoogle-chrome review/review.html– und bitte den Benutzer, den Ordnerprojects/<slug>/auszuwählen. Generiere vorher die Leseansicht:python3 -I scripts/review_apply.py build projects/<slug>. Details inreferences/revisao.md. -
"Überprüfung anwenden" → führe in dieser Reihenfolge aus:
python3 -I scripts/review_apply.py apply projects/<slug> projects/<slug>/decisions.json,python3 -I scripts/review_apply.py build projects/<slug>undpython3 -I scripts/render.py projects/<slug> preview; teile dem Benutzer mit, auf "Review.json neu laden" zu klicken. Wennapplyfehlschlägt (Exit-Code 1), wurde nichts gespeichert: lies die Nachricht und korrigiere die Entscheidung. Ohne die Seite (Browser ohne Zugriff auf den Ordner und ohne Plan B) führe die Überprüfung im Chat durch und speichere dasdecisions.jsonim gleichen Format. -
Cover — Rahmen auswählen (nachdem das Preview genehmigt wurde): extrahiere Kandidaten aus dem Originalvideo mit:
python3 -I scripts/cover_frames.py video projects/<slug>/entrada.<ext> projects/<slug>/capa(optional--n 3; gibt einen Pfad pro Zeile aus), oder, wenn der Benutzer ein Foto sendet,python3 -I scripts/cover_frames.py photo <foto> projects/<slug>/capa(speichertcapa/foto.png). Zeige die Dateiencapa/candidato-N.pngan und frage, welcher Rahmen das Lächeln zeigt, das er möchte: der Benutzer wählt aus, das Tool trennt nur scharfe und gut verteilte Rahmen und erkennt kein Lächeln. Wenn keiner gefällt, bitte um ein Foto oder führe es erneut mit einem anderen--naus. Details inreferences/capa.md. -
Cover — komponieren (nachdem der Rahmen ausgewählt wurde). Details in
references/capa.md. (a) @-Handle Pflicht: wennhandlesinbrand/brand.jsonleer ist, frage einmal nach dem @-Handle und speichere es mit:python3 -I scripts/brand.py set-handles brand/brand.json @profil; erfinde niemals einen. (b) Frage nach dem Aufhänger (maximal 28 Zeichen, z.B. „3 MITOS“), dem Bereich der Klemmmarke (max. 28) und dem Untertitel (max. 90; der Teil nach dem letzten Zeilenumbruch erscheint in hellblau). (c) Figma-Pfad (bevorzugt, wenn der Figma-Connector verfügbar und autorisiert ist): lade das Skillfigma-usevoruse_figma, dupliziere den Frame272:2aus der DateiPOSTS-OUTUBRO, ersetze Foto und Texte, füge das @-Handle hinzu und exportiere PNG 1× nachprojects/<slug>/capa/capa.png(Schritt-für-Schritt inreferences/capa.md). (d) Ohne Figma oder wenn der Export fehlschlägt:python3 -I scripts/cover_compose.py projects/<slug>/capa/candidato-N.png brand/brand.json projects/<slug>/capa/capa.png --hook "3 MITOS" --area "ISENÇÃO DE IR" --subtitle "linha branca\nlinha em destaque"(odercapa/foto.png). Exit-Code 1 = nichts gespeichert; lies die Nachricht (fehlendes @-Handle, zu kleines Foto, Aufhänger in mehr als 2 Zeilen, zu langer Text, Ausgabe identisch mit einer Eingabedatei, Chromium fehlt). (e) Zeige dascapa.pngdem Benutzer an und bitte um Zustimmung; passe es an und generiere es erneut, wenn er darum bittet.
Fehler (Exit-Code 1, in jedem Skript): lies die Meldung, behebe die Ursache (Marke fehlt oder ungültig, keine gesprochenen Passagen in der Transkription, fehlende Datei, ungültige Karte oder fehlender Graphik-Renderer – die Meldung sagt, welche Karte) und wiederhole. Hinterlasse keine unvollständige Datei.
Trigger
- "build preview" / "montar preview" →
python3 -I scripts/render.py projects/<slug> preview. - "final" / "versão final" →
python3 -I scripts/render.py projects/<slug> final(1080x1920,saida/final.mp4). Nur, nachdem ein Preview ausgeliefert wurde; das "final" des Benutzers gilt als Genehmigung des Previews, also rendere ohne erneute Bestätigung.
Ziellänge
Reel schnell: 12–15 s; vertieft: 30–45 s. Berechne die Länge des bereits geschnittenen Videos (Original minus Gesamtsumme der Schnitte). Wenn es außerhalb der beiden Bereiche liegt, weise darauf hin und schlage vor, was angepasst werden kann (mehr schneiden oder Passagen beibehalten). Blockiere nicht.
Was es noch nicht gibt
Die Überprüfungsseite, der Material-Reiter (Schritte 7 und 8), die Graphik-Karten
(Schritt 5) und das Cover (Schritte 9 und 10: Rahmenauswahl, Komposition über Figma oder
über scripts/cover_compose.py) existieren bereits. Es gibt keine Veröffentlichung: nichts wird
automatisch auf Instagram gepostet. Es gibt keine Lächelerkennung (der Benutzer wählt den Rahmen aus) und nur die Datei Poppins-Bold.ttf befindet sich in assets/fonts/:
die Untertitel erscheinen in Poppins Bold, und Karten sowie Cover verwenden dasselbe Gewicht für
den gesamten Text (das über Figma erstellte Cover ist dasjenige, das mit der exakten Typografie ausgegeben wird). Für das vollständige Markenbild füge in assets/fonts/ auch Poppins-Regular.ttf,
Poppins-SemiBold.ttf und Poppins-ExtraBold.ttf hinzu (SIL-OFL-Lizenz, können in das Repository aufgenommen werden). Video und Untertitel werden nur durch render.py ausgegeben (die anderen Skripte, die Video oder Untertitel aufnehmen, dienen der Fehlersuche).