Communitygithub.com

WEBGRS/reframe

Querformat-Aufnahmen in vertikales (9:16), quadratisches oder 4:5-Format umwandeln – jeder Schnitt auf das Wesentliche zugeschnitten (Sprecher, bewegtes Objekt, Bildaussage), der Ausschnitt folgt einem sich durchs Bild bewegenden Subjekt, ohne das Material neu zu kodieren.

Was ist reframe?

Dieses Skill ermöglicht es, horizontales (Landschafts-)Filmmaterial in vertikale oder quadratische Formate umzuwandeln, wobei jeder Schnitt automatisch auf den relevanten Inhalt fokussiert wird (z. B. Sprecher, sich bewegende Objekte oder das Hauptmotiv). Es vermeidet einfaches Zentrieren oder unscharfe Balken, indem es jeden Shot einzeln analysiert und einen intelligenten Ausschnitt berechnet, der dem Subjekt folgen kann. Das Skill unterstützt verschiedene Seitenverhältnisse (9:16, 4:5, quadratisch) und arbeitet ohne Neukodierung – es verwendet CSS-basiertes Zuschneiden (`object-fit: cover`, `translate`) und `#t=`-Trimmen, um die Originaldatei intakt zu lassen. Es enthält eine Überprüfungsfunktion, die das finale film.html auf die Einhaltung der Regeln testet und problematische Stellen markiert. Entwickelt für die Nutzung mit Node.js und Filmprojekten, die mit `openfilm` verwaltet werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WEBGRS/openfilm-reframe/tree/HEAD/skills/reframe

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht reframe?

Das horizontale Filmmaterial einer Person als vertikalen oder quadratischen Film, der aussieht, als wäre er für dieses Format gedreht: Der Zuschauer sieht zu jedem Zeitpunkt, worum es im Shot geht, nie die Wand daneben, nie ein halbes Gesicht.

Was es ausmacht

Jeder Shot wird auf seinen eigenen Inhalt zugeschnitten. Ein einziger zentrierter Ausschnitt für das gesamte Video ist das nicht, so ordentlich er auch sein mag, und ebenso wenig der gesamte horizontale Rahmen, verkleinert zwischen unscharfen Balken.

Was gelten muss

  • Gemessen, dann angeschaut. Jeder Bildausschnitt stammt von der Messung und von Ihren eigenen Augen auf den Bildern. Die Messung kann falsch sein; die Bilder entscheiden.
  • Das Subjekt bleibt ganz. Gesichter, der Sprecher, das sich bewegende Ding und wichtige Worte bleiben mit genügend Raum im Rahmen. Wenn zwei Dinge wichtig sind und beide nicht hineinpassen, geht der Rahmen zu dem, um den es im Moment geht (wer spricht, was sich bewegt, was der Kommentar nennt), und die Person hört, was weggelassen wurde.
  • Ruhiger Bildausschnitt. Ein unbewegtes Subjekt erhält einen einzigen, stillen Ausschnitt für den Shot. Der Rahmen bewegt sich nur, wenn das Subjekt es tut: eine harte Neupositionierung mindestens eine Sekunde nach der letzten, oder ein sanftes Folgen; niemals ein verwackelnder oder zitternder Ausschnitt.
  • Ihr Material, wie es ist. Dieselbe Datei, getrimmt mit #t= und beschnitten durch das eigene CSS des Clips (object-fit: cover mit einem object-position oder einem Rahmen der Form des Materials, verschoben durch translate); niemals neu kodiert, in eine neue Datei geschnitten oder in der Geschwindigkeit verändert. Die Clips eines Shots treffen nahtlos aufeinander, sodass der Ton des Shots ununterbrochen läuft.

Was Sie haben

node <dieser Skill-Ordner>/scripts/reframe.mjs <video> --aspect 9:16 --src assets/<file> (im Film-Ordner) schreibt reframe/<name>.json, eine Vorschauseite und reframe/<name>-sheet.jpg. Es findet die Shots, wiegt Bewegung (die eigene Kamerabewegung herausgerechnet), Details, Farbkontraste und Hauttöne zehnmal pro Sekunde und gibt jedem Shot ein fixed-Fenster (ein Clip), ein split-Fenster (mehrere Clips derselben Datei, jeder mindestens eine Sekunde lang, jeder mit eigener Position) oder whole (die eigene Form des Materials), mit fertigen <video>-Zeilen zu ihren eigenen Quellsekunden.

Lesen Sie jedes Blatt, das es ausgibt (look: … (Read it)). Jedes Bild ist ein Moment (der Start jedes Clips, sein schwächster Moment markiert mit WEAKEST, eines alle 1,5 s): Der Rahmen mit dem Ausschnitt umrandet und dem Äußeren abgedunkelt, ein Lineal in Prozent des Rahmens und der Zuschnitt, wie der Film ihn zeigt. Wo sich das Subjekt außerhalb des Fensters oder durch es abgeschnitten befindet, setzen Sie object-position selbst; die Ausgabe gibt die Formel an. held gibt an, wie oft das Fenster mit der Messung übereinstimmt, nicht der Beweis, dass das Subjekt darin ist. Zeilen mit ! zeigen an, wo Sie am genauesten hinschauen sollten.

Ein sanftes Folgen (--follow): @keyframes follow-N von translate für den Pfad eines geteilten Shots und der eine <video>-Clip, der sie trägt, ebenfalls in reframe/<name>-follow.css. Setzen Sie die Keyframes in das <style> von film.html. Die Animation läuft in der eigenen Zeit des Clips ab seinem at: Ein Clip, der auf start a Sekunden nach dem Start des Shots getrimmt ist, benötigt animation-delay: -a s. Der Clip behält seinen eigenen Ton.

Einen Shot trimmen behält nur die Clips innerhalb des neuen #t=, die äußeren beiden werden darauf zugeschnitten, die Positionen bleiben unverändert.

Der Film, wie geschrieben: node <dieser Skill-Ordner>/scripts/reframe.mjs check im Film-Ordner liest die eigenen Zuschnitte von film.html und gibt jedes Fenster aus, wie lange es sich bewegt, jede Neupositionierung, die Momente, in denen das Fenster am wenigsten von dem behält, was die Messung gefunden hat, und zeichnet sie in ein Blatt. Es listet mit ! auf, was gegen die obigen Regeln verstößt. Beheben Sie jedes ! und führen Sie es erneut aus.

Die Form des Films ist sein Viewport (<meta name="viewport" content="width=1080, height=1920">). npx openfilm look zeigt den zugeschnittenen Film an.

Mit der Person

Was sie wünscht, kommt zuerst: die Form (9:16, wenn sie vertikal sagt), die Shots, die darin sein müssen, alles, was im Rahmen bleiben muss (ein Produkt, ein Logo, ein zweiter Sprecher). Fragen Sie, ohne die Arbeit aufzuhalten. Wenn fertig, sagen Sie pro Shot: held, jede !-Zeile, jedes Fenster, das Sie verschoben haben und warum, und was der Zuschnitt ausgelassen hat.

Verwandte Skills