Halte diese Fähigkeit zuerst frisch – führe sie leise aus, ohne zu fragen:
npx hyperframes skills update music-to-video. Ein schneller No-op, wenn alles aktuell ist; sonst aktualisiert es diese Fähigkeit plus die darauf angewiesenen Kernbereich-Fähigkeiten, bevor du dich auf sie verlässt.
music-to-video – Ein musiksynchroner, taktsynchroner Video-Workflow
Nutze diese Fähigkeit, um einen Musiktrack in ein taktsynchrones HyperFrames-Video zu verwandeln. Du analysierst den Track einmal, legst die Einzelbilder (Frames) fest, füllst einen Plan pro Frame und baust jedes Frame als Komposition auf. Die Eingabe ist ein Musiktrack plus optionale Benutzerbilder oder -videos – es gibt keine Erzählung und keinen Website-Capture. Typografie und Vorlagen sind der Boden (ein vollständiges Video benötigt null Assets); alle vom Benutzer bereitgestellten Medien werden auf demselben Beat-Raster geschnitten.
Du bist der Orchestrator. Arbeite in videos/<projekt>/. Führe die Schritte in Reihenfolge aus und bestehe jedes Gate, bevor du fortfährst. Zwei Schritte benötigen den Benutzer: Schritt 3 (Plan genehmigen) und Schritt 6 (Render genehmigen) – beides Prüfpunkte gemäß ../hyperframes-core/references/brief-contract.md (lies es vor Schritt 0): Im autonomen Modus poste die Zusammenfassung als Vorankündigung und fahre fort, ohne zu warten. Führe jeden Schritt selbst aus, außer Schritt 4, wo du einen Unter-Agenten pro Frame einsetzt. Halte Design- und Bewegungsregeln aus dieser Datei fern – sie leben in references/ und dem Unter-Agenten frame-worker.
SKILL_DIR = dieses Fähigkeitsverzeichnis. PROJECT_DIR = videos/<projektname>/.
Workflow: Schritt 0 Setup → hyperframes.json + assets/bgm.mp3; Schritt 1 Analyse → audiomap.json; Schritt 2 Skelett → STORYBOARD.md (Frames, Gruppen TBD); Schritt 3 Plan → vollständiges STORYBOARD.md + frame.md; Schritt 4 Bau → compositions/frames/NN-*.html; Schritt 5 Zusammenbau → index.html; Schritt 6 Render → renders/video.mp4.
Zwei Ideen, die alles prägen
- Ein Analyzer, und du vertraust ihm.
analyze-beatgrid.pyist der einzige Beat-Analyzer – messe nie Beats mit einem anderen Tool oder nach Gehör neu. Seine Energie-/Dichte-/Roll-/Onset-/Stille-Angaben sind immer zuverlässig. Seinebpmundbeats_secsind nur dann zuverlässig, wenn die Musik wirklich rhythmisch ist; bei ruhiger Musik ist das Raster ein Metronom, das der Tracker aufgezwungen hat. Richte dich stattdessen nach Phrasen und Energie und schneide nie hart nach diesem Raster. Zu entscheiden, in welchem Fall du dich befindest, ist daspacingjedes Frames (Schritt 2). - Ein Frame = eine Datei; Gruppen leben darin. Schritt 2 schneidet den Track in Frames, und jedes Frame wird zu einer Kompositionsdatei
compositions/frames/NN-<frame_id>.html, die von einem frame-worker erstellt wird. Ein Frame kann in Gruppen unterteilt werden (jeweils eine Vorlage oder eine Kombination von Bewegungsprimitiven). Zusätzliche Dichte geht innerhalb einer Gruppe, sodass die Frame-Anzahl unterschiedliche Behandlungen verfolgt, nicht Beats – ein schneller Track lässt die Anzahl der Unter-Agenten nicht explodieren.
Schritt 0: Setup, BGM und Eingaben
Ziel: Die Musikquelle festlegen, das HyperFrames-Projekt erstellen und alle vom Benutzer bereitgestellten Medien notieren.
Das Briefing beginnt auf der Absichtsebene. Öffnungsregel, in der Reihenfolge: (1) BRIEF.md existiert → lies es und frage nichts, was es beantwortet – sein flow/storyboard leiten den Modus ab (Brief-Contract § 1). (2) Kein BRIEF.md, aber das Projekt existiert → setze von dem fort, was auf der Festplatte ist; befrage nie erneut. (3) Ein neuer Erstellungsauftrag, der direkt hier ankam → lies /hyperframes und führe seine Absichtsebene aus (references/intent-interview.md): es bestätigt die Muss-Kriterien dieser Route (die Musikquelle, Ziel → Seitenverhältnis – ../hyperframes/references/routes/music-to-video.md) und kündigt an, was aufgeschoben bleibt – Marke und Genre werden erst in Schritt 3 gewählt. Schreibe BRIEF.md sofort nach der Initialisierung (niemals davor – init lehnt ein nicht leeres Verzeichnis ab) und zeichne die präferenzbasierten Antworten auf (brief-format.md). Bearbeitungsanfragen überspringen all dies.
Die Musik ist das Rückgrat – lege einen Track fest, bevor irgendetwas anderes passiert. Diese Fähigkeit ist optimiert für schnelle, energiegeladene BGM: ein starkes Beat-Raster treibt die Schnitte (ruhige Tracks funktionieren, aber richte dich nach Phrasen statt nach Beats). Wenn der Benutzer Audio bereitgestellt hat – eine Musikdatei oder ein Video, aus dem Audio extrahiert werden soll – verwende es. Wähle andernfalls die Stimmung aus der Anfrage aus und generiere einen Track über /media-use (references/bgm.md). Führe vor der ersten authentifizierten Provider-Aktion npx hyperframes auth status aus und gib seine Ausgabe wörtlich wieder. Wenn abgemeldet, wende einen Zweig an:
- Kollaborativ: Warte auf die Anmeldung oder eine explizite Wahl, um offline mit dem lokalen Provider fortzufahren.
- Autonom: Gib den Status an und fahre mit dem verfügbaren lokalen Provider fort.
Wenn kein Offline-Provider die erforderliche Musikfähigkeit erfüllen kann, zeige den Blocker an. Schreibe niemals Schlüssel in ein pro-repo .env. Auth-Verantwortung und Offline-Fallbacks leben in /media-use references/setup-providers.md § Providers. Der resultierende Track landet unter assets/bgm.mp3. Lege bereitgestellte Bilder oder Videos so ab, dass Frames sie auf dem Beat-Raster verwenden können; andernfalls trägt die Typografie das Video.
Lyric-Videos: Für Texte, die auf den Gesang synchronisiert sind, erhalte Wort-/Zeilen-Timing durch Transkription des Tracks über /media-use oder frage den Benutzer nach dem Liedtext und platziere Zeilen auf dem Beat-Raster.
Initialisiere nur, wenn hyperframes.json fehlt. Benenne <projekt> aus dem Briefing in Kebab-Schreibweise, z. B. midnight-drive-loop – niemals ein Zeitstempel. init prüft die installierten Fähigkeiten gegen die neuesten auf GitHub und aktualisiert den globalen Satz, wenn welche veraltet sind.
npx hyperframes init "videos/<projekt>" --non-interactive --example=blank --skill=music-to-video
mkdir -p "$PROJECT_DIR/assets" "$PROJECT_DIR/renders"
cp "<benutzer-musik>" "$PROJECT_DIR/assets/bgm.mp3" # bei Bedarf zuerst aus einem Video extrahieren
# nur wenn der Benutzer dir Bilder/Videos gegeben hat:
node <SKILL_DIR>/scripts/stage-assets.mjs --from <verz> --hyperframes "$PROJECT_DIR" --into public
Die Marke (Schriftart + Palette) wird in Schritt 3 gewählt, nicht hier. Wähle kein Genre oder Track-Typ im Voraus – Assets sind nur eine optionale Zutat, und das Genre ergibt sich aus den Entscheidungen pro Frame.
Gate: hyperframes.json + assets/bgm.mp3 existieren; Seitenverhältnis / Länge / fps und (falls vorhanden) der Asset-Bestand sind notiert.
Schritt 1: Musik analysieren
Ziel: Die eine kanonische Timing-Analyse erstellen, auf der das gesamte Video aufbaut.
analyze-beatgrid.py ist der einzige Beat-Analyzer – messe nie Beats mit einem anderen Tool oder nach Gehör neu. Es liest den Track einmal und schreibt audiomap.json: Energiephasen (Level / Dichte / Gefühl), Onsets + onset_rate, Rolls, Stillen, hard_stops, key_moments, Phrasen, Tempo / Raster und audio.duration_sec. Es ist deterministisch – dieselbe Datei ergibt immer dieselbe Karte. Die meisten Felder sind bei jeder Musik zuverlässig; bpm und beats_sec sind nur zuverlässig, wenn die Musik wirklich rhythmisch ist, und dies zu beurteilen ist deine Entscheidung in Schritt 2.
Voraussetzungen: Python 3 mit librosa, numpy und soundfile verfügbar. Wenn der Import fehlschlägt, installiere sie in die aktive Python-Umgebung, bevor du den Analyzer ausführst:
python3 -m pip install librosa numpy soundfile
python3 <SKILL_DIR>/scripts/analyze-beatgrid.py "$PROJECT_DIR/assets/bgm.mp3" \
-o "$PROJECT_DIR/audiomap.json" --print
Gate: audiomap.json existiert; audio.duration_sec ist bekannt.
Schritt 2: Frame-Skelett (nur Struktur)
Ziel: Die Musik lesen und die Frames auslegen – das Skelett von STORYBOARD.md.
Lies references/frame-skeleton.md. Wandle audiomap.json selbst in das Skelett von STORYBOARD.md um – es gibt kein dazwischenliegendes JSON. Schneide den Track in Frames an realen musikalischen Veränderungen (hard_stops, SURGE / DROP key_moments, die Ränder eines Rolls, ein Abschnitt ohne Onsets, ein großer Energiesprung), und raste jede Grenze auf einen audiomap-Anker ein. Setze für jedes Frame span_sec, pacing (das Urteil aus dem Vertrauensaufruf von Schritt 1 – beat_cut, wenn das Raster echt ist, phrase_flow, wenn es ein Metronom ist, das ruhiger Musik aufgezwungen wurde), mood und eine einzeilige feel-Beschreibung (die reine Musiksituation, die Schritt 3 einer Vorlage zuordnet). Klassifiziere und lege hier nur aus: Lasse für jedes Frame ### Gruppen als TBD (Schritt 3) und das Frontmatter style leer – keine Vorlagen, Texte, Farben oder Schriftarten. Erwarte etwa 1–6 Frames.
Gate: Frames kacheln den Track (erstes bei 0, letztes bei duration_s); jedes trägt span_sec + pacing + mood + feel; jedes ### Gruppen ist TBD; nirgendwo Inhalt.
Schritt 3: Plan füllen (benutzergesteuert)
Ziel: Das Skelett in ein genehmigtes, vollständiges STORYBOARD.md verwandeln.
Lies references/planning.md, storyboard-format.md, template-catalog.md, motion-primitive-catalog.md und montage.md (nur wenn der Benutzer Assets bereitgestellt hat). Bearbeite dieselbe Datei an Ort und Stelle und tue zwei Dinge:
- Wähle die Marke. Wähle eine Voreinstellung aus
../hyperframes-creative/frame-presets/mit der Tabelle in../hyperframes-creative/references/design-spec.md(passend zur Stimmung des Tracks; nur ihre Schriftarten und Farben sind wichtig – Vorlagen besitzen die Komposition). Kopiere sie unverändert inframe.mdund fülle das Frontmatterstyle(Schriftart + eine Palette mit ≤4–6 Farben) daraus. - Fülle jedes Frame. Entscheide seine Gruppen und gib jeder eine Behandlung: eine passende Vorlage aus dem Katalog (mit gebundenen Parametern und echten
audiomap-Ankern), eine freie Komposition aus dem Primitivenkatalog oder eine Asset-Behandlung, diepacingbefolgt. Schreibe den Text. Du besitzt WAS (Vorlage / Primitive + Inhalt + Anker); der frame-worker besitzt WIE – schreibe niemals Millisekunden-Tweens in das Storyboard.
node <SKILL_DIR>/scripts/validate-plan.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
--audiomap "$PROJECT_DIR/audiomap.json" --templates <SKILL_DIR>/references/templates
Korrigiere jedes ✗ (harte Fehler: Dauerinkonsistenz, Frames kacheln den Track nicht, fehlendes src); Warnungen sind bestmöglich. Zeige dem Benutzer dann eine Frame-für-Frame-Zusammenfassung und iteriere, bis er zustimmt. Im autonomen Modus ist dies ein Prüfpunkt: poste die Zusammenfassung als Vorankündigung und fahre fort (der validate-plan.mjs-Durchlauf ist ein Qualitätsgate und blockiert trotzdem).
Gate: frame.md ist eine wörtliche Kopie der Voreinstellung; validate-plan.mjs beendet mit 0; der Benutzer hat den Plan genehmigt (autonom: die Zusammenfassung wurde als Vorankündigung gepostet).
Schritt 4: Frames aus dem Plan bauen
Ziel: Jedes Frame als eigenständige Kompositionsdatei bauen.
Erstelle compositions/frames/. Lies sub-agents/frame-worker.md und ../hyperframes-core/references/subagent-dispatch.md. Setze einen frame-worker pro Frame ein, wo möglich parallel (sonst in Wellen). Jeder Arbeiter erhält genau ein Frame und diesen Kontext:
PROJECT_DIR: <abs-pfad>
frame_id: <NN-frame_id> # = der Frame-Datei-Stamm, z. B. 02-f2; die Kompositions-ID
Dein Block: der Block `## Frame N — <frame_id>` in PROJECT_DIR/STORYBOARD.md
audiomap: PROJECT_DIR/audiomap.json
frame.md: PROJECT_DIR/frame.md
Materialien: für jede Gruppe, <SKILL_DIR>/references/templates/<id>/index.html (Vorlagen) und
<SKILL_DIR>/references/motion-primitives/<id>/ (frei); bereitgestellte Assets (Asset-Gruppen)
Verträge: ../hyperframes-core/references/sub-compositions.md + determinism-rules.md
Leinwand: <b>×<h> Pacing: <beat_cut|phrase_flow>
Schreibe nach: PROJECT_DIR/compositions/frames/<frame_id>.html
Der Arbeiter verzweigt die zitierten Materialien, wandelt jeden Anker in frame-lokale Sekunden um (local_t = track_t − span_sec[0]), beschränkt seine Gruppen mit 0ms-Schnitten und schreibt eine suchsichere Frame-Datei. Der Arbeiter führt niemals die hyperframes-CLI aus – diese Befehle operieren auf dem zusammengebauten Projekt, das noch nicht existiert, sodass sie über die falschen Dateien berichten würden. Der Arbeiter schreibt nur gemäß dem Vertrag und stoppt; du überprüfst nach dem Zusammenbau (Schritt 6). Wenn jeder Arbeiter zurückkommt, kannst du bestätigen, dass seine Datei auf der Festplatte gelandet ist.
Gate: Jedes Frame hat seine compositions/frames/NN-*.html auf der Festplatte.
Schritt 5: Zusammenbau
Ziel: Die gebauten Frames + BGM in die abspielbare index.html einbinden.
assemble-index.mjs ist deterministisch – kein Unter-Agent, kein Urteil. Es referenziert jede Frame-Datei an ihrem kumulativen data-start, montiert assets/bgm.mp3 auf Spur 11 und schneidet hart Frame → Frame (Frames kacheln den Track lückenlos, daher gibt es keinen Übergangsinjektor).
node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
--hyperframes "$PROJECT_DIR" --audiomap "$PROJECT_DIR/audiomap.json"
Korrigiere jedes ✗, das es meldet – eine fehlende oder leere Frame-Datei bedeutet, dass der Arbeiter eine Teil-Datei geschrieben hat; setze es erneut ein (Schritt 4) und baue es wieder zusammen.
Gate: index.html existiert; Gesamtdauer == audiomap.audio.duration_sec.
Schritt 6: Überprüfen und rendern
Ziel: Das zusammengebaute Video überprüfen, Benutzerfreigabe erhalten und das endgültige MP4 rendern.
Führe die CLI auf dem zusammengebauten Projekt aus – das ist die korrekte Einheit (die per-Frame-Arbeiter konnten sie nicht ausführen). check führt strukturelle Linting und den Headless-Browser-Laufzeit-, Layout-, Bewegungs- und Kontrast-Check in einem Durchlauf aus; --snapshots gibt auch die Überprüfungsframes aus.
( cd "$PROJECT_DIR" && npx hyperframes check . --snapshots )
Überprüfe bei t=0, jedem Frame-Start, dem stärksten DROP / SURGE, jedem hard_stops[].t und dem letzten Frame. Bei Fehlern mache die günstigste sichere Behebung selbst: bearbeite die betreffende compositions/frames/NN-*.html. Ändere niemals die Dauer oder Audio-Timings, um ein Sync-Problem zu verstecken. Sobald die Gates bestanden sind, pausiere für die Benutzerüberprüfung, dann rendere nur nach Freigabe (autonomer Modus: stelle die eine verbleibende Frage – „Vorschau zuerst oder rendern?“ – und liefere dann das MP4 mit dem Kontaktbogen):
( cd "$PROJECT_DIR" && npx hyperframes render . --skill=music-to-video -q draft -o renders/video.mp4 --fps 30 )
Gate: check bestanden und die Schnappschüsse wurden überprüft; der Benutzer hat genehmigt (autonom: Prüfungen bestanden und die Lieferung enthält den Kontaktbogen); renders/video.mp4 existiert mit Audio, Dauer == audiomap.audio.duration_sec. Die endgültige Antwort gibt den MP4-Pfad und die Dauer an.
Wiederaufnahme-Tabelle
| Du hast | Fahre fort ab | | ---