agentsclimarketplace

Make montage

Skill ecliptic-ai/skills/plugins/cadence/skills/make-montage

AI-augmented video splicing framework for Agents

Install
npx -y skills add ecliptic-ai/skills --skill make-montage

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Build a beat-synced video montage from a video and audio file by orchestrating cadence's MCP tools. Use when the user asks to create a montage, edit action footage to music, or cut video to the beat.

SKILL.md

5.4 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it

Build a beat-synced montage from the arguments: $0 is the video path, $1 is the audio path, $2 is the optional output path (default: montage.mp4 in the current working directory).

How this skill thinks

Cadence runs as a three-party conversation: you (Claude) orchestrate tool calls; Gemini acts as the subject-matter expert for video/audio perception and creative judgment; the user speaks through you. Gemini's reasoning carries across the calls in a session — it remembers what moments it found, which segment it picked, and why. Your job is to synthesize the user's raw request into a coherent userIntent at session-begin, then make targeted calls and inspect results.

Interpreting the user's request

Split intent across two axes before calling tools:

  • Content intentwhat should appear in the montage. Feeds the session's userIntent (shapes every Gemini call) and the optional per-call focusPrompt for refinement.
  • Arrangement stylehow the content should be cut. Passed as stylePrompt to reason-plan-edit.

Enrich vague user phrases into concrete criteria before passing. "Badass close combat" → "physical melee engagements — punches, kicks, grapples, throws, blocks; exclude ranged attacks, environmental destruction, and dialogue."

If the user hasn't given arrangement direction, ask. Reasonable defaults:

  • Fast-paced anime action: rapid cross-cutting, rarely hold a shot, anchor hardest hits on downbeats
  • Cinematic build: longer holds, moments breathe, cuts only on strong beats
  • Sequential scene: clips roughly follow the video's original order

Pipeline

1. Begin the session

session-begin(videoPath: $0, audioPath: $1, userIntent: "<your synthesis>")

Uploads both files to Gemini and opens a cached conversation. Everything below runs within this session — Gemini remembers the intent across all reason-* calls.

2. Measure the audio

audio-detect-beats(audioPath: $1) → { bpm, durationS, beats }

Pure DSP, not in the Gemini conversation. Keep the full beats array.

3. Find action moments

reason-find-action-moments(fps?: 5, focusPrompt?: "<optional refinement>")

Stores moments on the session. Returns { momentCount, highestIntensity, usage }. Gemini scores moments by fit-to-intent, not generic visual impact — a wide-shot explosion is low-intensity if the user wants hand-to-hand.

4. Pick the energy segment

reason-pick-energy-segment(beats: <full grid>, targetDurationS: 30, focusPrompt?: "<optional>")

Gemini picks the best audio window, snapped to beats. Returns { segmentStartS, segmentEndS, reasoning, usage }; segment is stored on the session for planning.

5. Plan the edit (and apply it)

reason-plan-edit(beats: <full grid>, stylePrompt?: "<arrangement direction>")

Pulls moments + segment from the session, asks Gemini to plan clip placement (with per-clip anchor metadata + reasoning), and applies the plan to the timeline directly. Returns a summary: { clipCount, issueCount, errorCount, warningCount, clipIds, segmentBounds, totalGeminiTokens }.

Each clip Gemini produces has an anchor — the source frame that should land on a specific beat on the output timeline — plus buildupS/resolutionS reservations that determine source range and timeline position. A clip can span multiple beat intervals if the moment needs room (explosions, reveals).

6. Resolve issues (only if needed)

If errorCount > 0, the timeline has overlaps or out-of-bounds clips. Warnings (gaps, small drift) are okay to ignore.

timeline-list-issues → { issues: [{ type, severity, affectedClipIds, message, deltaS }] }

For each error, inspect the affected clips:

timeline-inspect-clip(clipId) → { source, positionS, durationS, anchor, meta: { description, reasoning, intensity, origin } }

Decide which clip to modify based on the reasoning (e.g. "this clip's resolution is a low-motion dust-settle — trim it; the next clip's buildup is a critical dodge setup — keep it"). Apply the fix:

timeline-update-clip(clipId: "clip-16", sourceEndS: <new value>)   // trim a clip
timeline-remove-clip(clipId: "clip-9")                             // drop a clip
timeline-insert-clip(sourcePath, sourceStartS, sourceEndS, positionS, description)  // fill a gap

Each update revalidates. Loop until timeline-list-issues returns no errors.

7. Render

render-final(outputPath: $2 or "montage.mp4")

Refuses if errors remain. Returns { outputPath, outputBytes, clipCount, durationS, warnings }.

8. End the session

session-end

Deletes the Gemini cache. Do this even if you hit errors — the cache has a TTL but explicit cleanup is polite.

Report back to the user

After render, summarize in 3-4 lines:

  • Output path and size (MB)
  • Segment chosen (MM:SS → MM:SS)
  • Clip count and BPM
  • Total Gemini token usage (sum usage.totalTokens across reason-* calls)

Don't dump clip details — they're inspectable via timeline-inspect-clip and the plan thoughts blob is on the timeline resource. The per-call disk logs are at ${CLAUDE_PLUGIN_DATA}/cache/logs/.

Gives 1 of the 12 instructions most video audio skills give in ~1.3k tokens

Counted across 622 of the 795 authors here whose files we hold, read 2026-08-07

  • read individual rule files for detailed explanationsin 21 of 622, across 10 files
  • render final videohere, and in 13 of 622, across 6 files
  • Use WAV PCM 16kHz mono audio formatin 12 of 622, across 3 files
  • Use this skill when dealing with Remotion codein 11 of 622, across 4 files
  • save generated audio to a WAV filein 11 of 622, across 4 files
  • handle conversion errors gracefullyin 10 of 622, across 6 files
  • add captions to videos alwaysin 10 of 622, across 4 files
  • generate music from text descriptions using MusicGenin 9 of 622, across 2 files
  • do not skip pipeline layersin 9 of 622, across 3 files
  • do not make one tool do everythingin 9 of 622, across 3 files
  • use azure document intelligence for complex pdfsin 9 of 622, across 4 files
  • never ask the user to paste their full API keyin 9 of 622, across 3 files

Said here and by no other author read

  • synthesize user request into coherent intent
  • enrich vague user phrases into concrete criteria
  • ask for arrangement direction if none is given
  • begin session with video, audio, and intent
  • measure audio beats and keep full array
  • find action moments using intent and focus prompt

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.