Communitygithub.com

vosjs/vos-cut

Schneide einen Bildschirmmitschnitt (einen vosso Take) in das Produktvideo, für das er aufgezeichnet wurde, anhand seiner Evidenzen, mit der vos CLI – lies den Digest des Takes (die Momente, die der Cursor-Track als wichtig markiert hat, jeweils mit einem Footage-Frame und einem Zuschnitt), erzähle Beats, editiere doc.json per Ausnahme über die Planer, verifiziere mit Standbildern und pushe eine attributierte Version, die der Mensch bei vos.so verfeinert; jede Bearbeitung ist ein Datenpatch, sodass ein Neuschnitt nie neu aufzeichnet. Verwende diesen Skill, wenn du gebeten wirst, eine Aufnahme zu bearbeiten oder zu schneiden, ein Produktvideo oder einen What's-new-Clip aus einem Take zu erstellen, es wie das letzte zu schneiden oder eine Serie von Aufnahmen in einem Stil zu schneiden.

Was ist vos-cut?

`vosjs/vos-cut` ist ein Skill für KI-Agenten (wie Claude Code, Cursor oder Codex), um Bildschirmaufnahmen (sogenannte vosso Takes) in präzise Produktvideos zu schneiden, ohne das Filmmaterial neu aufzuzeichnen. Der Skill arbeitet mit der vos CLI und dem Datenschema einer Aufnahme (recording.webm, cursor.json, meta.json, doc.json). Der Workflow folgt einer Schleife: **Sehen → Erzählen → Entscheiden per Ausnahme → Verifizieren → Pushen → (Mensch prüft) → Neuschneiden**. Der Agent liest niemals das Video selbst, sondern nutzt `vos digest`, um einen Digest mit den wichtigsten Momenten, Standbildern und Zuschnitten zu erhalten. Die Bearbeitung erfolgt ausschließlich per Ausnahme: Die integrierten Planer (für Zoom, Geschwindigkeit, Neigung) liefern bereits Vorschläge; der Agent behält, verwirft oder ändert diese nur bei Bedarf und fügt eigene Spans nur für Dinge hinzu, die ein Planer nicht wissen kann (z. B. ein einzelner Klick, der einen Beat verdient). Jede Änderung an `doc.json` wird als Patch (Befehl) durchgeführt, und das Video wird mit `vos render` im Draft-Modus geprüft. Nach maximal drei Runden ohne menschliches Eingreifen wird der beste Schnitt gepusht und der Grund genannt. Der Skill unterstützt Serien mit einem gemeinsamen Stil (`--style`), das Verwalten von Rezepten (CUT.md, BRAND.md) und behandelt Konflikte durch menschliche Nachbearbeitung geschützt (`protected_conflict`).

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/vosjs/skills/tree/main/skills/vos-cut

In Ihrer bevorzugten KI fragen

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

Dokumentation

Einen Take aus seinen Evidenzen schneiden

Du schneidest eine AUFNAHME, die jemand gemacht hat (einen vosso Take: recording.webm + cursor.json + meta.json + doc.json), nicht eine Neuaufnahme. Eine Aufnahme aus einem Skript ist der Skill product-video; Programme sind vos-create/vos-remix.

Die Schleife ist: sehen → erzählen → per Ausnahme entscheiden → verifizieren → pushen → (Mensch prüft) → neuschneiden. Jeder Schritt benennt das Verb, das ihn ausführt. Das Dokument ist doc.json; der Vertrag für seine Felder und Einheiten ist unter https://vos.so/llms-full.txt. Nichts hier zeichnet den Take eines Menschen neu auf, niemals: Ein Schnitt kann Footage nicht reparieren, und wenn das Footage die Anfrage nicht tragen kann, sagst du das im Hinweis und stoppst.

Einrichtung

npm i -D @vosjs/cli   # fetch, digest, plan, frames, render, push, pull

Anmeldeinformationen, in dieser Reihenfolge, niemals ausgeben: VOS_API_KEY, dann die erste Zeile von ~/.config/vos/credentials, dann vos login (eine Browser-Anmeldung, die einen Schlüssel für diesen Rechner generiert). Schlüssel erstellen NUR private Arbeiten und können niemals veröffentlichen. Ein Chromium wird für digest, frames und render benötigt.

0. Grundregeln, die alles unten stehende überschreiben

  • Lies niemals das Video. Deine Augen sind vos digest: digest.json, dann sheet.png, dann ein Zuschnitt nur dort, wo du entscheiden musst. Ein 90-Sekunden-Take hat ~35 Momente und ~25-40k Bild-Token, wenn du jedes Bild liest; das Blatt plus die entscheidenden Zuschnitte hat ~10k. Das Ereignis "done" gibt die Schätzung aus.
  • Bearbeite per Ausnahme. Die Planer (Zoom, Geschwindigkeit, Neigung) haben bereits beantwortet, WO jeder Klick, jede Tipp-Sitzung, jeder Scroll-Lauf und jede Leerlauf-Lücke ist. plan im Digest enthält ihre Spannen, und proposed benennt diejenigen unter jedem Moment. Behalte, führe zusammen, verwerfe oder verschiebe diese; füge nur hinzu, was ein Planer nicht wissen kann (welcher einzelne Klick einen Beat, eine Beschriftung, eine Schnelldurchlauf verdient, der langweilig, aber nicht Leerlauf ist). Jede von dir berührte Spanne trägt "source": "manual". Ein Vorschlag, den du VERWIRFST, kommt in rejected ([{id, lane, in, out}], die Spur und ihre Quellausdehnung), damit keine Neuplanung und keine durch plan --reuse getragene Neuaufnahme diesen Beat erneut vorschlägt; das Studio schreibt ihn selbst, wenn ein Mensch eine Auto-Spanne löscht.
  • Zeige mit einer Ebene, nicht der Kamera. Wenn der Schnitt auf eine Komponente (einen Button, eine Karte, einen Code-Block) zeigt und der Zoom Pixel vergrößern würde, zeichne sie als HTML-Ebene in doc.json neu (overlays[] mit kind: "html": das Markup, das CSS im eigenen Typ des Produkts, die Design-Box in 1080p px), platziert neben ihrem Subjekt, niemals darüber. Du hast die echten Komponenten des Produkts im Repository; verwende sie. Das Markup ist wohlgeformtes XML, und vos validate sagt, was nicht malen würde; eine CSS-Animation läuft nach der Wanduhr und wird zugunsten von anim und motion abgelehnt.
  • Die Einheiten des Doks, kopiert, nie umgerechnet. Der focus eines Moments ist cx/cy einer Zoom-Spanne; sein rect ist das, was der Zoom enthalten muss. source-Ausdehnungen sind Footage-Sekunden (Zoom/Geschwindigkeit/Neigung/Segmente); output-Ausdehnungen sind gerenderte Sekunden (Overlays/Audio). Pixelwerte an irgendeiner Stelle sind der Fehler Nr. 1.
  • Menschliche Bearbeitungen sind heilig. doc.manual im Digest zählt Spannen, die ein Mensch entschieden hat; ein Push, der einen Knoten berührt, den der Mensch seit deiner Basis bearbeitet hat, gibt protected_conflict zurück. Behalte ihre Werte, es sei denn, die Anfrage nennt genau diesen Knoten.
  • Drei Runden allein, dann ein Mensch. Runde = Bearbeiten → Validieren → Frames → Beurteilen. Wenn es in drei nicht klappt, pushe die beste Runde und sage warum.
  • Die Anfrage entscheidet; die Rezepte des Ordners rangieren als nächstes; diese Standardwerte zuletzt. Eine Rezeptzeile, die die jüngsten Mitglieder widersprechen, wird in deinem Hinweis als veraltet bezeichnet, nicht befolgt.

1. Sehen

vos fetch <vosId> --media        # einen gehosteten Take, den du nicht aufgenommen hast (Dok + Footage-Verzeichnis)
vos pull <take> --media          # ein Take-Verzeichnis, das bereits mit vos.so verknüpft ist
vos folder pull <slug> --media   # die Takes eines Projekts, mit Rezepten
vos plan <take> --style <seed doc.json|vosId>   # in einer Serie: der Stil des Seeds, per Daten
vos digest <take> [--transcript whisper.json] [--style <seed>]

Lies in dieser Reihenfolge:

  1. digest.json → take (Dauer, Seite, hat Cursor/Mikrofon), moments (id, art, Quell-/Ausgabefenster, Fokus, Rechteck, Aktivität, vorgeschlagen, gesagt), plan, doc.manual. Ein Take mit hasCursor: false (ein Browser-Recorder-Take) listet nur Kopf-/Schwanz-/Szenen: Tempo nach Aktivität, Zoom nur, wo die Anfrage einen Ort nennt, und sage im Hinweis, dass der Take keine Cursor-Spur hatte.
  2. sheet.png → die Zuschnitte in zeitlicher Reihenfolge, IDs eingebrannt. Dies ist der Film auf einen Blick.
  3. m<nn>.crop.png für die Momente, die die Anfrage oder das Rezept entscheidend machen; m<nn>.full.png nur für Kontext (welche Seite, welcher Abschnitt).

Einen Zuschnitt lesen: Was ist im Fokus (ein Bedienelement, ein Feld, Inhalt); was sagt es (die Bezeichnung, der eingegebene Wert); ist die Folge des Klicks im nächsten Moment-Frame oder in einem scene-Moment direkt danach sichtbar. Eine scene ist ein Frame-Diff-Sprung (eine Navigation, ein Dialog); sieh dir ihr volles Frame an, um sie zu benennen.

Zwei Dinge, die die Zuschnitte sagen, die die Klickliste nicht sagt: Ein Klick-Cluster, dessen rect den Großteil des Frames ausmacht, ist ein ZIEHEN (Zielen, Scrollen, Bewegen eines Dings), kein Ziel; und eine "Leerlauf"-Lücke, deren Aktivität über ~0.1 bleibt, ist das ABSPIELEN des Videos, kein Leerlauf. Beides will nicht den Vorschlag des Planers.

Wenn ein Ordner involviert ist, lies JEDE .md darin (eigene und geerbte), bevor du irgendetwas entscheidest.

2. Erzählen

Schreibe 3-6 Beats in deine Arbeitsnotizen, jeweils mit ihren Moment-IDs, was sie ZEIGEN (aus den Zuschnitten) und wofür sie DA SIND (aus dem Rezept, dem Seitentitel, gesagt oder der Anfrage). Beispiel:

B1 m01-m04  die Galerie: durchsuchen, ein Programm auswählen            (weit geöffnet, ein Kartenzoom)
B2 m05-m06  Remix öffnet das Studio                                    (die Szene ist der Höhepunkt)
B3 m07-m12  Regler: fünf Schieberegler-Ziehungen auf dem Remix-Panel   (ein gehaltener Zoom, 2× über die Mitte)
B4 m13-m14  das Ergebnis spielt ab                                      (loslassen, beruhigen)

Keine Anfrage kam mit dem Take? Leite eine aus der Aufnahme ab (was sie zeigt, wo sie gezeigt werden würde, wie lang sie sein sollte) und GIB SIE im Versionshinweis AN, damit der Mensch die Anfrage vor dem Schnitt korrigiert, wenn sie falsch ist.

Wenn die Anfrage einen Beat nennt ("mache den Export-Teil knackiger"), ordne ihn ZUERST Moment-IDs zu und berühre nichts außerhalb dieser.

3. Entscheiden, per Ausnahme

Pro Beat, gegen plan und das Rezept:

  • Zoom. Behalte die Planer-Spanne, wenn sie den Beat einrahmt; füge benachbarte Vorschläge zu einer gehaltenen Spanne zusammen, wenn sie ein Beat sind (ein Zoom pro Beat, niemals pro Klick); verwerfe einen Vorschlag bei einem Klick, der kein Beat ist; füge eine Spanne bei einem einzelnen Klick hinzu, den der Planer übersprungen hat, wenn der Zuschnitt zeigt, dass er der Moment ist. Nivelliere vom Rechteck aus: Ein kleines Bedienelement möchte 1.8-2.2, ein Panel 1.4-1.6; wenn das Ziel den Großteil der Frame-Breite ausmacht, entscheidet der Framing-Lint über die Stufe, befolge ihn. cx/cy = der focus des Moments. IDs, die du vergibst: u1, u2… In einer Editor-Aufnahme zoome auf die SPUR, in der eine Spanne erscheint, niemals auf die Leinwand, die gezogen wird. Gib einen Zoom VOR einem Klick frei, der navigiert, damit der Seitenwechsel breit abgespielt wird.
  • Geschwindigkeit. Behalte Vorschläge bei Tippen/Leerlauf/Scrollen; füge 2×-3× bei einer Strecke hinzu, deren Aktivität niedrig ist und kein Beat sie braucht, oder unter Zieh-Clustern; niemals über dem Höhepunkt eines Beats, niemals während der Wiedergabe.
  • Neigung. Nur, wenn der Kamerastil eine hat (tiltStyle/die Persönlichkeit des Stils) und ein Beat eine Auszeichnung verdient. Eine Pose pro ~5s, ±5..18°.
  • Trimmen. Kopf und Schwanz: Schneide auf das erste und letzte, was wichtig ist (segmente), lasse ~0,5s zum Beruhigen am Ende. Ladebildschirme werden weggeschnitten.
  • Text. Eine Beschriftung pro Beat, der etwas zu sagen hat, in einem Rhythmus (eine alle 5-10s, 2,5-4s jede, niemals zwei gleichzeitig), in den Worten des Produkts und der Absicht des Videos; unteres Drittel y ≈ 0.82; AUSGABE-Sekunden; niemals über dem geklickten Bedienelement (validate warnt). Gib ihr eine Box, wenn der Grund darunter hell ist (die Timeline eines Editors ist), und beurteile jede Beschriftung in ihrem eigenen Moment. Eine Beschriftung pro Film ist zu spärlich für einen Film, der einen Ablauf erklärt; Null ist nur richtig, wenn das Rezept oder die Anfrage keinen Text sagt.
  • Stil. In einer Serie: vos plan --style <seed> BEVOR du schneidest: es kopiert die zoomStyle/zoomParams/speedParams/tiltStyle/frame/cursor/cam/export des Seeds und plant die Auto-Spannen darunter neu. Gib diese Zahlen niemals in einem Rezept wieder; das Seed-Dokument ist ihr Zuhause.

Schreibe den Patch als BEARBEITUNGEN an doc.json, niemals als Neuschreibung. Behalte jedes Feld, das du nicht verstehst.

4. Verifizieren

vos validate <take>                                   # sauber; LIES die Framing-Warnungen, behebe sie
vos digest <take> --no-frames                         # nach der Neubemessung: frische AUSGABE-Zeiten, gleiche Frames
vos frames <take> --at-moments --at-zooms --times 0,25%,50%,75%,100%
vos frames <take> --times <jeder Beschriftungsstart + 1>   # jede Beschriftung auf ihrem eigenen Grund
vos render <take> check.webm --range a..b --draft     # der Beat, der sich am meisten geändert hat

Beurteile die Standbilder gegen die Qualitätsschleife unter https://vos.so/llms-full.txt und die Messlatte des Ordners: Unschärfe, Chrome, Cursor, Textleserlichkeit, erstes und letztes Frame als Poster; der Money-Shot innerhalb von 3s; das Ende beruhigt; ≤1 Vollbild-Bang pro ~5s (ffmpeg -vf "select='gt(scene,0.12)'" zählt sie). Ein moment-<id>-Standbild und sein <id>.crop.png teilen sich eine ID: "was da war" neben "was der Schnitt zeigt".

5. Pushen

vos push <take> --label "<was, imperativ, ≤60 Zeichen>" --note "<die Anfrage, auf die du geschnitten hast; die Beats mit Quellsekunden; was du verworfen und hinzugefügt hast>" [--folder <slug>]

Die Basis kommt von vos.json. 409 stale_base → vos pull, erneut anwenden, erneut pushen. 409 protected_conflict → behalte die Werte des Menschen, es sei denn, die Anfrage nannte diesen Knoten (--override <id> nur dann). Ein 400 gibt das Feld und sein Limit aus. Dann GET /api/vos/<id>, folge contentUrls.thumbnail, und SIEH ES DIR AN, bevor du "erledigt" meldest.

6. Neuschneiden (der Mensch hat geprüft)

vos pull gibt die Zusammenfassung des Differs darüber aus, was sie geändert haben ("zoom z3: level 2.2→1.6; overlay c1 removed"). Das ist das Feedback, in den eigenen Worten der Daten: Schneide das neu, was ihre WORTE verlangten, und nichts, was ihre HÄNDE bereits behoben haben. Zähle die Runden. "Super" ist ihr Wort und der einzige Ausgang eines Seeds.

7. Merken (nur, nachdem der Mensch bei einem Seed freigegeben hat)

Speichere es und schreibe die Regeln auf; Zahlen bleiben im Seed-Dokument.

vos folder create "<serie>" --desc "<wofür es ist, ≤200 Zeichen>"
vos folder move <vosId> --to <slug>
vos recipe push CUT.md --folder <slug>      # gilt für: takes, seed: <die vos id>
vos recipe push BRAND.md --folder <slug>    # gilt für: any, seed: none

Ein Rezept wird in GROSSBUCHSTABEN benannt, so wie CLAUDE.md: Es ist die Datei, die die Sammlung liest, bevor sie irgendetwas schneidet. Was du ablegst, wird mit seinem Stamm in Großbuchstaben gespeichert, egal wie, sodass Terminal und Regal übereinstimmen.

CUT.md sagt, was eine Zahl nicht kann: das Beat-Vokabular, was eine Beschriftung bekommt und was niemals, Haltelängen, die Titel/Ende-Konvention, das Längenband, was übersprungen werden soll, und die Entscheidungen, die der Mensch IN das Seed korrigiert hat (aus dem Differ gelesen). BRAND.md: Typografie, Palette, Hintergrund, Musik, die Stimme jeglichen Textes. Spätere Mitglieder: Ziehe den Ordner, digest, plane --style vom Seed, schneide gegen CUT.md, pushe --folder; eine Korrektur, die über zwei Mitglieder hinweg wiederkehrt (oder eine, die der Mensch für alle angibt), wird unter ## Agent Notes angehängt, datiert, und die Regel darüber wird neu geschrieben, um sie zu treffen (vos recipe push <file> --asset <id> ersetzt an Ort und Stelle; der vorherige Text bleibt erhalten). Überschreibe niemals stillschweigend die Zeilen des Besitzers.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

launch-kit

Ship the media with the release — one take of the real product becomes YouTube demo, Chrome Web Store screenshots/tiles, Product Hunt gallery, social cuts, and OG cards; verified kit.json manifest.

vos-authoring

Author a vos animation program (VosConfigJson) from scratch or debug one — declarative configs compiling into deterministic Three.js + GSAP-dialect animations on the MIT vos engine (@vosjs/core), validated locally with compileVosConfig. Covers the schema, dialect rules, 2D overlay elements, shaders, and params/presets knobs. Use when asked to write a vos animation program, create a VosConfigJson, make a programmatic motion graphic or logo animation, or fix a config that fails to compile or lint.

vos-create

Create vos programs in the user

vosjs/product-video

Record and produce the demo video of a website, app, or feature with the vos CLI — the agent scripts the click path (actions.json), the recording auto-plans zooms, and every editing decision is data in doc.json, so fixes are edits and re-renders, never re-recordings. Renders are deterministic; export is free up to 4K with no watermark. Use when asked to make a product video, demo video, screen recording of a URL or feature, or a marketing clip, including a product behind a login (the session ladder: mint one from the project's own test auth before asking anyone), or when a feature was verified in agent-browser and that walk should become a take. A whole release's asset set (store listing, Product Hunt gallery, social cuts) is the launch-kit skill, which records through this one.

vosjs/vos-footage

Hand a Remotion, HyperFrames, or any video composition a clean captured clip of the real product — recorded and auto-zoomed with the vos CLI, delivered as full-bleed footage with no chrome, and always backed by an editable take on the maker's shelf, which the handoff says. Use when a composition needs real product footage, app or site b-roll, "capture our app for the video", or a screen-recorded segment to drop into another tool's timeline.

vosjs/vos-migrate

Turn an existing Loom, Screen Studio, Cap, or plain mp4/webm screen demo into an editable vosso take — re-encode the file, synthesize the take's metadata, plan, and push, so the old demo becomes a living document you re-cut instead of a file you re-record. Use when asked to "convert this Loom", "migrate our old demos", "re-edit this mp4", "make our Screen Studio recording editable", or to bring any already-recorded demo into vosso.

vos-remix

Remix a vos.so gallery program into your own — fetch its config, edit the declared knobs or code locally, validate with vos check, and push a private copy back with lineage that iterates as versions. Carries the params/Looks doctrine and the GLB 3D-showcase recipe. Use when asked to remix, customize or personalize a gallery animation, swap a 3D model into a showcase, or iterate a fetched program as versions.

Verwandte Skills