跳到正文
cccskills
免费在 GitHub 公开中文介绍

music-to-video

分析音乐的节拍、强弱、静音和高潮,将文字、图片与视频的动作同步到音乐。无需额外视觉素材也能制作,经方案确认和画面检查后输出MP4。

原文查看原文说明

Use when the user has a music track (an audio file, or a video to pull audio from) and wants a beat-synced HyperFrames video, calm to hard-hitting. The music drives everything: one analyzer reads it once, the orchestrator lays out the frames and fills a per-frame plan, and one sub-agent builds each frame. Typography and templates are the floor — a complete video needs zero assets — but any images or videos the user supplies are cut into the frames on the same beat grid (beat-cut / ken-burns). The genre (lyric video, slideshow, kinetic promo) falls out of the per-frame choices; the pipeline never branches on it.

实测评分 未实测

查看安装方法

适用场景

  • 制作与音乐同步的宣传视频
  • 用音乐和照片制作幻灯片视频
  • 仅用动态文字制作音乐视频
  • 为舒缓音乐编排画面

中文介绍

功能

分析音乐的节拍、强弱、静音和情绪起伏,制作随音乐展开的HyperFrames视频。仅用文字和模板也能完成构成;如果有现成图片或视频,也会按同一音乐时间安排融入画面。节奏鲜明的曲目按节拍切换,舒缓曲目则随乐句和强弱变化展开。涵盖构思方案、各场景制作、拼接、验证和MP4输出。

适用场景

适合从一首曲目出发制作宣传视频或幻灯片视频。视觉素材较少时,可以以动态文字为主。支持横屏、竖屏和正方形画面,既可使用音乐文件,也可使用从视频中提取的音频。

使用示例

  • “请根据这首曲目,制作以动态文字为主的宣传视频。”
  • “请用这段音乐和这些照片,制作按节拍切换的幻灯片视频。”

注意事项

需要HyperFrames CLI,以及Python 3的librosa、numpy和soundfile。方案及最终渲染前均需用户确认。若要新生成音乐,会检查登录状态,并选择在线或本地生成。不包含旁白制作和网站录屏。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

文档检查

AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。

安全性发送数据、删除文件、执行命令等是否有说明
B部分不足方案和渲染需审批,但init更新全局技能时未规定确认步骤。
安装难易度所需工具和 API 密钥是否少且有说明
B部分不足提供Python依赖安装命令,但未说明HyperFrames CLI的安装方法。

不计入评分。 由 AI(OpenAI Codex)于 2026年10月23日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(132)

  • SKILL.md15.8 KB
  • references/frame-skeleton.md6.4 KB
  • references/montage.md3.3 KB
  • references/motion-primitive-catalog.md9.7 KB
  • references/motion-primitives/3d-card-flip/index.html4.1 KB
  • references/motion-primitives/assets/gsap.min.js71.2 KB
  • references/motion-primitives/bg-flow-field/index.html11.8 KB
  • references/motion-primitives/binary-decrypt/index.html3.4 KB
  • references/motion-primitives/blur-resolve/index.html2.4 KB
  • references/motion-primitives/braam-punch/index.html3.4 KB
  • references/motion-primitives/chromatic-split/index.html4.2 KB
  • references/motion-primitives/chrome-sweep/index.html2.5 KB
  • references/motion-primitives/counting-punch/index.html3.9 KB
  • references/motion-primitives/crash-zoom-in/index.html4.1 KB
  • references/motion-primitives/datamosh-smear/index.html4.2 KB
  • references/motion-primitives/directional-fill/index.html3.5 KB
  • references/motion-primitives/dolly-zoom/index.html4.0 KB
  • references/motion-primitives/electric-arc/index.html4.1 KB
  • references/motion-primitives/flash-cut/index.html3.9 KB
  • references/motion-primitives/gooey-metaball/index.html5.6 KB
  • references/motion-primitives/hard-cut/index.html3.4 KB
  • references/motion-primitives/hypercut-whip/index.html2.0 KB
  • references/motion-primitives/iris-open/index.html2.7 KB
  • references/motion-primitives/kinetic-letter-in/index.html2.3 KB
  • references/motion-primitives/liquid-morph/index.html3.7 KB
  • references/motion-primitives/mask-reveal/index.html2.8 KB
  • references/motion-primitives/mosaic-pack/index.html3.5 KB
  • references/motion-primitives/neon-flicker/index.html2.7 KB
  • references/motion-primitives/outline-to-fill/index.html3.0 KB
  • references/motion-primitives/palette-flip/index.html3.5 KB
  • references/motion-primitives/particle-burst/index.html3.9 KB
  • references/motion-primitives/pixel-dissolve/index.html3.3 KB
  • references/motion-primitives/radial-burst-lines/index.html4.4 KB
  • references/motion-primitives/screen-shake/index.html2.9 KB
  • references/motion-primitives/slot-machine-reveal/index.html3.5 KB
  • references/motion-primitives/spotlight-sweep/index.html3.7 KB
  • references/motion-primitives/staggered-exit/index.html3.1 KB
  • references/motion-primitives/text-spectral-rays/index.html12.0 KB
  • references/motion-primitives/text-spectral-rays/USAGE.md2.3 KB
  • references/motion-primitives/text-wave-distort/index.html3.7 KB
  • references/motion-primitives/tile-mosaic/index.html3.8 KB
  • references/motion-primitives/typewriter-reveal/index.html3.3 KB
  • references/motion-primitives/word-grid-burst/index.html3.4 KB
  • references/planning.md6.0 KB
  • references/storyboard-format.md6.1 KB
  • references/template-catalog.md8.3 KB
  • references/templates/card-flyby/index.html20.2 KB
  • references/templates/card-flyby/program.json642 B
  • references/templates/held-message-living-field/index.html16.9 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/asphalt-031.png112.5 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bark-014.png88.5 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/brick.png40.0 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-075-a.png48.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-101.png47.3 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-102.png35.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/bricks-104.png19.7 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/carpet.png158.7 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-034.png45.9 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-042-a.png84.3 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-046.png97.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete-047-a.png111.5 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/concrete.png176.0 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/diamond-plate-009.png90.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-080.png30.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/fabric-083.png86.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-001.png101.9 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-004.png99.5 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/grass-005.png108.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-037.png116.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-054.png118.3 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-068.png101.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-080.png103.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-103.png104.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/ground-104.png96.4 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/lava.png72.7 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/leather-037.png118.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-012.png92.9 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/marble-016.png100.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-032.png86.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-038.png67.7 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-041-a.png95.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-046-b.png98.4 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-048-a.png105.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-049-a.png93.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-055-a.png51.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal-061-b.png84.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/metal.png194.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/onyx.png85.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/painted-plaster-017.png53.4 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-138.png34.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/paving-stones-150.png41.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/plaster-001.png104.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-007.png84.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-008-a.png115.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-009-c.png72.5 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-a.png110.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-012-b.png109.2 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/road-013-a.png102.5 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-058.png78.4 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock-063.png39.4 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/rock.png131.0 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow-015.png63.7 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/snow.png95.9 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/tiles-138.png109.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/travertine-009.png67.3 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-049.png40.1 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-051.png44.4 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-058.png81.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-066.png82.0 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-092.png71.9 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-094.png71.0 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-051.png41.6 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-064.png39.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood-floor-070.png51.8 KB
  • references/templates/held-text-strobe-burst/assets/texture-mask-text/masks/wood.png41.2 KB
  • references/templates/held-text-strobe-burst/index.html11.2 KB
  • references/templates/intro-kinetic-cascade/index.html18.5 KB
  • references/templates/intro-kinetic-cascade/program.json1.5 KB
  • references/templates/logo-split-lockup-pulse/assets/fredoka-700.woff215.5 KB
  • references/templates/logo-split-lockup-pulse/index.html22.9 KB
  • references/templates/poster-tile-mosaic/index.html23.8 KB
  • references/templates/poster-tile-mosaic/program.json558 B
  • references/templates/roll-flipbook-word-cycle/index.html10.9 KB
  • references/templates/split-anchor-word-slot/index.html24.5 KB
  • references/templates/split-anchor-word-slot/program.json707 B
  • references/templates/typewriter-phrase-keyword-shuffle/index.html9.8 KB
  • scripts/analyze-beatgrid.py22.9 KB
  • scripts/assemble-index.mjs8.2 KB
  • scripts/lib/storyboard.mjs8.1 KB
  • scripts/stage-assets.mjs2.1 KB
  • scripts/validate-plan.mjs6.5 KB
  • sub-agents/frame-worker.md4.9 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

music-to-video — one music-grounded, beat-synced video workflow

Use this skill to turn a music track into a beat-synced HyperFrames video. You analyze the track once, lay out the frames, fill in a per-frame plan, and build each frame as a composition. The input is a music track plus optional user images or videos — there is no narration and no website capture. Typography and templates are the floor (a complete video needs zero assets); any media the user supplies is cut in on the same beat grid.

You are the orchestrator. Work in videos/<project>/. Run the steps in order and pass each Gate before moving on. Two steps need the user: Step 3 (plan approval) and Step 6 (render approval). Do every step yourself except Step 4, where you dispatch one sub-agent per frame. Keep design and motion rules out of this file — they live in references/ and the frame-worker sub-agent.

SKILL_DIR = this skill directory. PROJECT_DIR = videos/<project-name>/.

Workflow: Step 0 setup → hyperframes.json + assets/bgm.mp3; Step 1 analyze → audiomap.json; Step 2 skeleton → STORYBOARD.md (frames, groups TBD); Step 3 plan → complete STORYBOARD.md + frame.md; Step 4 build → compositions/frames/NN-*.html; Step 5 assemble → index.html; Step 6 render → renders/video.mp4.

Two ideas that shape everything

  • One analyzer, and you trust it. analyze-beatgrid.py is the only beat analyzer — never re-measure beats with another tool or by ear. Its energy / density / rolls / onsets / silences are always reliable. Its bpm and beats_sec are reliable only when the music is genuinely rhythmic; on calm music the grid is a metronome the tracker imposed, so pace by phrases and energy instead and never hard-cut to it. Deciding which case you're in is each frame's pacing (Step 2).
  • One frame = one file; groups live inside. Step 2 cuts the track into frames, and each frame becomes one composition file compositions/frames/NN-<frame_id>.html, built by one frame-worker. A frame can subdivide into groups (each a template or a motion-primitives combo). Extra density goes inside a group, so frame count tracks distinct treatments, not beats — a fast track does not blow up the number of sub-agents.

Step 0: Setup, BGM, and inputs

Goal: Establish the music source, create the HyperFrames project, and note any user-supplied media.

The music is the spine — establish one track before anything else. This skill is tuned for fast, high-energy BGM: a strong beat grid drives the cuts (calm tracks work, but pace by phrase rather than beat). If the user gave you audio — a music file, or a video to pull the audio from — use it. If not, generate one: choose the mood from the user's description (e.g. "driving synthwave", "trap beat", "upbeat corporate") and produce a track via /hyperframes-media (references/bgm.md — HeyGen retrieval when credentialed, else local Lyria / MusicGen; ElevenLabs or another generator also works). Before generating, run npx hyperframes auth status and relay its output verbatim (don't paraphrase or rewrite it) — it shows whether BGM comes from HeyGen or local MusicGen and, if not signed in, how to sign in. If not signed in, STOP and wait for the user to choose — sign in, or continue offline with local MusicGen — before generating the track; don't write keys into a per-repo .env. (In autonomous mode, note the status and continue offline.) See /hyperframes-media → Preflight for the canonical guidance. Either way the track lands at assets/bgm.mp3. Stage any user-supplied images or videos so frames can weave them in on the beat grid; otherwise typography carries the whole video.

Initialize only if hyperframes.json is missing. Name <project> from the brief in kebab-case, such as midnight-drive-loop — never a timestamp. init checks the installed skills against the latest on GitHub and updates the global set if any are out of date.

npx hyperframes init "videos/<project>" --non-interactive --example=blank
mkdir -p "$PROJECT_DIR/assets" "$PROJECT_DIR/renders"
cp "<user-music>" "$PROJECT_DIR/assets/bgm.mp3"   # extract from a video first if needed
# only if the user gave you images/videos:
node <SKILL_DIR>/scripts/stage-assets.mjs --from <dir> --hyperframes "$PROJECT_DIR" --into public

The brand (font + palette) is chosen at Step 3, not here. Don't pick a genre or a track type up front — assets are just an optional ingredient, and the genre emerges from the per-frame choices.

Gate: hyperframes.json + assets/bgm.mp3 exist; aspect / length / fps and (if any) the asset inventory are noted.


Step 1: Analyze the music

Goal: Produce the one canonical timing analysis the whole video is built on.

analyze-beatgrid.py is the only beat analyzer — never re-measure beats with another tool or by ear. It reads the track once and writes audiomap.json: energy phases (level / density / feel), onsets + onset_rate, rolls, silences, hard_stops, key_moments, phrases, tempo / grid, and audio.duration_sec. It's deterministic — the same file always gives the same map. Most fields are reliable on any music; bpm and beats_sec are reliable only when the music is genuinely rhythmic, and judging that is the call you make at Step 2.

Prerequisites: Python 3 with librosa, numpy, and soundfile available. If import fails, install them into the active Python environment before running the analyzer:

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 exists; audio.duration_sec is known.


Step 2: Frame skeleton (structure only)

Goal: Read the music and lay out the frames — the skeleton of STORYBOARD.md.

Read references/frame-skeleton.md. Turn audiomap.json into the skeleton of STORYBOARD.md yourself — there is no intermediate JSON. Cut the track into frames at real musical changes (hard_stops, SURGE / DROP key_moments, the edges of a roll, a stretch with no onsets, a big energy jump), snapping every boundary to an audiomap anchor. For each frame set span_sec, pacing (the verdict from Step 1's trust call — beat_cut when the grid is real, phrase_flow when it's a metronome imposed on calm music), mood, and a one-line feel (the plain music situation Step 3 matches a template against). Only classify and lay out here: leave every frame's ### Groups as TBD (Step 3) and the frontmatter style blank — no templates, copy, color, or fonts. Expect ~1–6 frames.

Gate: frames tile the track (first at 0, last at duration_s); each carries span_sec + pacing + mood + feel; every ### Groups is TBD; no content anywhere.


Step 3: Fill the plan (user-gated)

Goal: Turn the skeleton into an approved, complete STORYBOARD.md.

Read references/planning.md, storyboard-format.md, template-catalog.md, motion-primitive-catalog.md, and montage.md (only if the user supplied assets). Editing the same file in place, do two things:

  1. Pick the brand. Choose one preset from ../hyperframes-creative/frame-presets/ using the table in ../hyperframes-creative/references/design-spec.md (match the track's mood; only its fonts and colors matter — templates own composition). Copy it into frame.md unmodified and fill the frontmatter style (font + a ≤4–6 swatch palette) from it.
  2. Fill every frame. Decide its groups and give each a treatment: a matched template from the catalog (with bound params and real audiomap anchors), a free-compose from the primitive catalog, or an asset treatment that obeys pacing. Write the copy. You own WHAT (template / primitives + content + anchors); the frame-worker owns HOW — never write millisecond tweens into the storyboard.
node <SKILL_DIR>/scripts/validate-plan.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
  --audiomap "$PROJECT_DIR/audiomap.json" --templates <SKILL_DIR>/references/templates

Fix every ✗ (hard errors: duration mismatch, frames not tiling the track, a missing src); warnings are best-effort. Then show the user a frame-by-frame summary and iterate until they approve.

Gate: frame.md is a verbatim preset copy; validate-plan.mjs exits 0; the user approved the plan.


Step 4: Build frames from the plan

Goal: Build every frame as a self-contained composition file.

Create compositions/frames/. Read sub-agents/frame-worker.md and ../hyperframes-core/references/subagent-dispatch.md. Dispatch one frame-worker per frame, in parallel where possible (otherwise in waves). Each worker gets exactly one frame and this context:

PROJECT_DIR: <abs path>
frame_id: <NN-frame_id>              # = the frame file stem, e.g. 02-f2; the composition id
Your block: the `## Frame N — <frame_id>` block in PROJECT_DIR/STORYBOARD.md
audiomap: PROJECT_DIR/audiomap.json
frame.md: PROJECT_DIR/frame.md
Materials: for each group, <SKILL_DIR>/references/templates/<id>/index.html (templates) and
           <SKILL_DIR>/references/motion-primitives/<id>/ (free); staged assets/ (asset groups)
Contracts: ../hyperframes-core/references/sub-compositions.md + determinism-rules.md
Canvas: <w>×<h>   Pacing: <beat_cut|phrase_flow>
Write to: PROJECT_DIR/compositions/frames/<frame_id>.html

The worker forks the cited materials, converts every anchor to frame-local seconds (local_t = track_t − span_sec[0]), gates its groups with 0ms cuts, and writes one seek-safe frame file. The worker never runs the hyperframes CLI — those commands operate on the assembled project, which doesn't exist yet, so they'd report on the wrong files. The worker just writes to the contract and stops; you verify after assembly (Step 6). As each worker returns, you can confirm its file landed on disk.

Gate: every frame has its compositions/frames/NN-*.html on disk.


Step 5: Assemble

Goal: Wire the built frames + BGM into the playable index.html.

assemble-index.mjs is deterministic — no subagent, no judgment. It references each frame file at its cumulative data-start, mounts assets/bgm.mp3 on track 11, and hard-cuts frame → frame (frames tile the track with no gaps, so there is no transition injector).

node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard "$PROJECT_DIR/STORYBOARD.md" \
  --hyperframes "$PROJECT_DIR" --audiomap "$PROJECT_DIR/audiomap.json"

Fix any ✗ it reports — a missing or blank frame file means that worker wrote a partial file; re-dispatch it (Step 4) and re-assemble.

Gate: index.html exists; total duration == audiomap.audio.duration_sec.


Step 6: Verify and render

Goal: Verify the assembled video, get user approval, and render the final MP4.

Run the CLI on the assembled project — that's the correct unit (the per-frame workers couldn't run it). lint checks structure, validate runs headless Chrome (catching JS errors and missing assets), inspect snapshots frames.

( cd "$PROJECT_DIR" && npx hyperframes lint . && npx hyperframes validate . && npx hyperframes inspect . )

Inspect at t=0, each frame start, the strongest DROP / SURGE, every hard_stops[].t, and the final frame. On failure, make the cheapest safe fix yourself: edit the offending compositions/frames/NN-*.html. Never change duration or audio timing to hide a sync issue. Once the gates pass, pause for user review, then render only on approval:

( cd "$PROJECT_DIR" && npx hyperframes render . --skill=music-to-video -q draft -o renders/video.mp4 --fps 30 )

Gate: lint / validate / inspect passed; the user approved; renders/video.mp4 exists with audio, duration == audiomap.audio.duration_sec. The final reply states the MP4 path and duration.


Resume table

You haveContinue from
assets/bgm.mp3 onlyStep 1
audiomap.jsonStep 2
STORYBOARD.md (skeleton)Step 3
STORYBOARD.md (complete)Step 4
all frame filesStep 5
index.htmlStep 6

Quick Reference

Formats: landscape 1920x1080 by default; portrait 1080x1920; square 1080x1080. Set the canvas once in the storyboard frontmatter (canvas: { w, h, fps }).

Scripts under scripts/: analyze-beatgrid.py (the one analyzer), validate-plan.mjs (plan check), assemble-index.mjs (index assembly), stage-assets.mjs (stage user media), lib/storyboard.mjs (vendored parser). Everything else is the hyperframes CLI.

ReadWhen
references/frame-skeleton.mdStep 2: read the music, lay out the frames, set pacing
references/planning.md · storyboard-format.mdStep 3: pick the brand, fill each frame, write the plan
references/template-catalog.mdStep 3: pick a template per group
references/motion-primitive-catalog.mdStep 3/4: L0 recipes for free-compose
references/montage.mdStep 3/4: asset treatments (beat-cut / ken-burns)
sub-agents/frame-worker.mdStep 4: dispatch + build one frame
../hyperframes-core/references/subagent-dispatch.mdStep 4: dispatch sub-agents safely
../hyperframes-creative/references/design-spec.mdStep 3: pick the preset (the brand)

Directory layout

music-to-video/
  SKILL.md
  references/   frame-skeleton.md · planning.md · storyboard-format.md
                template-catalog.md · motion-primitive-catalog.md · montage.md
                templates/<id>/          { index.html (+ assets/ · program.json) }  ← L1 catalog impls
                motion-primitives/<id>/  { index.html } (+ ../assets/gsap.min.js shared by recipes) ← L0 catalog impls
  scripts/      analyze-beatgrid.py · assemble-index.mjs · validate-plan.mjs · stage-assets.mjs · lib/storyboard.mjs
  sub-agents/   frame-worker.md   ← the one subagent (one per frame)

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

3d-asset-generation

免费有简介

从文字或图像生成3D模型,并与目录素材搭配使用。在Blender中检查形状、材质、大小和接地情况,记录生成条件、来源及费用,再将素材加入场景。

  • 根据文字生成独特的3D道具
  • 将概念图中的物体转为3D模型
  • 用目录中的植被和岩石填充背景
calesthio/OpenMontage7.1万2026年10月24日 更新

acestep

免费有简介

使用ACE-Step 1.5生成视频背景音乐和带歌词的歌曲,可指定曲风、时长、速度与调性,也支持改编参考音频,以及从混合音频中分离人声或乐器。

  • 制作适合视频场景的背景音乐
  • 制作带歌词的短广告曲
  • 将参考音频改编为爵士风格
calesthio/OpenMontage7.1万2026年10月24日 更新

agents

免费有简介

使用ElevenLabs创建语音对话助手或角色,配置声音、应答规则、语言模型及外部工具,支持嵌入网站,并通过Twilio集成设置电话外呼。

  • 创建回答咨询的语音机器人
  • 在网站中嵌入语音引导
  • 制作可对话的语音角色原型
calesthio/OpenMontage7.1万2026年10月24日 更新

ai-video-gen

免费有简介

根据文字描述或参考图片生成AI视频,并按用途和费用选择生成服务。支持设置画面比例、查看生成进度,以及通过Gemini Omni对话修改现有视频。

  • 将文字描述的场景制作成视频
  • 为商品照片添加动态效果
  • 制作社交媒体竖屏视频
calesthio/OpenMontage7.1万2026年10月24日 更新

ai-video-gen

免费有简介

根据文字或参考图像生成AI视频,并按用途、可用服务和预算选择模型。可制作社交平台竖屏短片、让商品照片动起来,也可通过对话编辑已有片段。

  • 制作社交平台竖屏短片
  • 为商品照片添加动态效果
  • 按预算和风格选择生成服务
calesthio/OpenMontage7.1万2026年10月24日 更新

atlas-cloud

免费有简介

通过Atlas Cloud使用多种模型生成和编辑图像与视频,只需一个API密钥,即可保存生成素材,以及所用模型、提交设置和预估费用等记录。

  • 通过同一服务生成图像和视频
  • 利用参考素材编辑商品图
  • 参考图像、视频和音频生成视频
calesthio/OpenMontage7.1万2026年10月24日 更新

查看 calesthio 的全部技能

报告此技能的问题