Communitygithub.com

Musik-zu-Video

Verwandle einen Musiktrack (Audiodatei, Video mit Tonspur oder per Stimmungsangabe generiert) in ein taktsynchrones Video – Lyric-Video, Diashow oder kinetischer Werbespot. Die Musik bestimmt das Tempo; alle vom Benutzer bereitgestellten Bilder/Videos werden auf dasselbe Beat-Raster geschnitten, und ein fertiges Video benötigt keine Assets. Erzählte Stücke → den eingabeangepassten Workflow (siehe /hyperframes). Bei Unklarheit → /hyperframes.

Was ist Musik-zu-Video?

Diese Fähigkeit ist ein spezialisierter Workflow, um aus einem einzigen Musiktrack ein taktsynchrones Video mit HyperFrames zu erstellen. Sie eignet sich für Lyric-Videos, Diashows und kinetische Promotion-Videos, bei denen die Musik das Tempo vorgibt. Der Workflow umfasst sechs Schritte: Einrichtung, Analyse des Tracks, Erstellung eines Rahmen-Skeletts, Befüllen des Storyboards, parallele Erstellung jedes Rahmen als HTML-Komposition, Zusammenbau und abschließendes Rendern. Ein zentrales Prinzip ist, dass ein einziger, vertrauenswürdiger Beat-Analyzer (`analyze-beatgrid.py`) zu Beginn den gesamten Track analysiert; ein eigenhändiges Nachmessen ist nicht nötig. Die Fähigkeit ist für autonome und kollaborative Umgebungen ausgelegt, mit Benutzereingaben an bestimmten Prüfpunkten für Storyboard und Rendering. Sie verwendet ein Modell mit einem Rahmen pro Datei, wobei Unterteilungen (Gruppen) innerhalb jedes Rahmens definiert werden, um die Anzahl paralleler Unter-Agenten unabhängig vom Tempo des Tracks konstant zu halten.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jasonfast123/hyperframes-skills/tree/main/skills/music-to-video

In Ihrer bevorzugten KI fragen

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

Dokumentation

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.py ist 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. Seine bpm und beats_sec sind 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 das pacing jedes 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:

  1. 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 in frame.md und fülle das Frontmatter style (Schriftart + eine Palette mit ≤4–6 Farben) daraus.
  2. 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, die pacing befolgt. 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 | | ---

Individual skills in this repo

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

embedded-captions

>

faceless-explainer

Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a website (/product-launch-video — promo or tour). Unclear → /hyperframes.

figma

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

general-video

>

hyperframes

>

hyperframes-animation

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition

hyperframes-audio

>

hyperframes-cli

>

hyperframes-core

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class=

hyperframes-creative

Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use `hyperframes-animation`.

hyperframes-keyframes

>

hyperframes-registry

Install, discover, and wire registry blocks and components into HyperFrames compositions. Use when running hyperframes add or hyperframes catalog, installing one item or every block matching a tag, wiring an installed item into index.html, or working with hyperframes.json. Covers discovery, install locations, block sub-composition wiring, component snippet merging, and authoring a new block or component to contribute upstream (idea → scaffold → validate → PR).

jasonfast123/hyperframes-skills

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

media-use

Agent Media OS, the single skill for every media need in a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal.

motion-graphics

>

pr-to-video

Turn a GitHub pull request (a PR URL, owner/repo#N, or

remotion-to-hyperframes

Port an existing Remotion (React) composition

slideshow

>

talking-head-recut

Package an existing talking-head / interview / podcast video with timed, designed GRAPHIC OVERLAY cards — kinetic titles, lower-thirds, data callouts, quotes, side panels, picture-in-picture — synced to the transcript, on a 16:9 / 9:16 / 4:5 canvas of your choice; the clip plays untouched underneath. Trigger on

Verwandte Skills