marcosmodly/marketing-skill/clip-montage

Claude Code and agent skill by marcosmodly/marketing-skill

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

The default for any montage, reel, recap, or highlight video made from the user's own footage. It takes the phone videos the user or a client sends (a home or a room, a product, a shop or a restaurant, an event, a day at work) and edits them into a finished vertical montage for TikTok, Instagram Reels, and YouTube Shorts. It picks the best moments of each clip, cuts on the beat of their own music (or a free generated track, or none to add a trending sound in the app), keeps a clip's own sound w…

Install

npx vskill@latest install marcosmodly/marketing-skill/clip-montage

SKILL.md

Clip Montage

Purpose

Take the short videos the user films on their phone, and whatever music or voice recording they have, and edit them into a finished 9:16 montage that's ready to post:

  • the best moment of each clip, in an order that tells the story;
  • cut on the beat;
  • a hook on the first shot, a label on each, and the CTA at the end;
  • a clip's own sound where it matters (someone talking, a sizzle, a

cheer), captioned word by word;

  • the user's voiceover under the whole video, with synced captions.

Then keep editing it with the user until they're happy ("use the part where she laughs", "kitchen first", "louder clip, no music") one version at a time, without losing the earlier ones.

This is the default for montages, and it's free. Everything renders on this machine with the plugin's scripts/video/ tools (montage.js builds the page from a short script, render.js makes the MP4). There's no account, no credits, and nothing leaves the machine. Real footage is also the truest picture of a place or a product: no AI invents anything.

What costs money, and when to bring it up:

What the user hasWhat happensCost
Videos (with or without photos, music, a voice recording)This skillFree
Only photos, and they can film a few clipsAsk for the clips, then this skillFree
Only photos, no clips possiblemontage-video with local moves (pans, push-ins, 3D moves)Free
Only photos, and they want the camera to really move (new angles)montage-video's "AI camera moves", only if the user says they have a paid plan with a video model (Figma Weave on a paid Figma plan, Higgsfield), quoted and approved firstPaid credits

Never run a paid video model from this skill. Never quote one unless the user has said they have a paid plan and want it.

Step-by-step process

Plugin root: if a path below still shows an unexpanded CLAUDE_PLUGIN_ROOT placeholder (Claude Code fills it in; other agents such as Codex don't), resolve it before using any of them: take the output of printenv CLAUDE_PLUGIN_ROOT if it prints a path, otherwise walk up from this file's folder to the first folder that contains references/brand-voice.md, and if neither works, ask the user where this plugin lives. Use that absolute path in every file path and shell command below. VIDEO below means ${CLAUDE_PLUGIN_ROOT}/scripts/video.

  1. Check onboarding status. Read

${CLAUDE_PLUGIN_ROOT}/references/brand-voice.md. If it doesn't exist, or its first line is <!-- MARKETING-SKILL:UNCONFIGURED -->, pause and ask the user this plugin's 4 setup questions (priority task; content types to produce; target audience + tone; default output format — same as /marketing-skill:marketing-setup) before continuing, then save the answers into that file and flip the marker to CONFIGURED with today's date. If the file is unconfigured but the user already said to skip setup or use the defaults, don't ask: use its placeholder defaults for this run, say so in one line, and leave the marker as it is.

  1. Pick the client. Exactly as montage-video step 2

(${CLAUDE_PLUGIN_ROOT}/skills/montage-video/SKILL.md): a saved client (read the profile and its ## Notes), a new one (business name, contact lines, required fine print, logo, colors, the music they like), or the user's own business (leave client: out, and check what the project is with python3 ${CLAUDE_PLUGIN_ROOT}/scripts/project.py in their folder). Profiles live in ${CLAUDE_PLUGIN_ROOT}/state/clients/ and stay out of git. Then confirm what this video is about and for, as montage-video step 2 says: what you understood in a line or two, what the video is for and the one thing a viewer should take away, what must be shown or said, and what to avoid, and wait for the answer before editing, unless the request already says it or the user said to use defaults.

  1. Ask for the footage, the music, and the voice. One message:
  • The clips (the default ask). Short phone videos, 3 to 15 seconds

each, one per room, angle, or moment. If they haven't filmed yet, give them montage-guide.md's "Filming tips for clips": vertical, hold each shot steady for 3 to 5 seconds, move slowly, good light, and the details close up.

  • Music, if they have it. A track they have the rights to use in an

ad. A song from a streaming app or the radio isn't one. Otherwise: the client's saved sound (a free generated track), a Creative Commons track (node VIDEO/media.js search "<mood>" --type music --out state/videos/assets --count 3), or no music, so they add a trending sound in the app when they post (TikTok's and Instagram's business accounts have a commercial-use library).

  • A voice, if they have one. A voiceover they recorded (one file is

fine, a phone voice memo works), with what they said in it word for word for the captions. Or clips where someone talks to the camera. Or none: most montages are music only.

  • A montage they'd like it to look like, if any: a video they send

(or the Style reference in brand-voice.md's Video Setup). Run node VIDEO/reference.js <video>, read its reference.md, and look at its sheets; then match its pace (pace: its typical shot length, in beats when its cuts land on the beat), its bursts of quick cuts, its captions, and its feel, and say in a line what you're matching. Copy the editing, never its footage, music, or words; ask for the file rather than downloading someone's post from the app.

  • Only photos? Ask whether they can film a few clips instead (it's

free and the truest picture). If they can't, hand over to montage-video, which moves the photos with free local moves. Bring up AI photo-to-video only if they ask for real camera moves or new angles, and say it needs a paid plan (Figma Weave video models run only on paid Figma plans). Run it only after they say they have one and approve the quote, following montage-video's "AI camera moves".

  • Get the files onto disk. The renderer needs files: ask for the

folder (or the file paths). Videos pasted into a chat can't be read by the renderer. If they're in Google Drive and a Drive connector is available, download them with it into a new folder.

  • Use only footage the user or client filmed or has a license to use,

and only people who agreed to be in it.

  1. Bring them in. Run `node VIDEO/montage.js inspect <folder> --slug

<slug>, where the slug is short and names the video (maple, taco-night`).

  • It copies each clip into state/videos/assets/<slug>-01.mp4, and so

on, with the picture and sound as they are and the metadata removed (a phone clip's location included). The originals aren't touched.

  • It prints each clip's size, shape, length, and whether it has sound,

and flags long, landscape, and low-resolution clips.

  • It writes a numbered contact sheet, <slug>-contact.png, and a

starter script, state/videos/<date>-<slug>.md, one shot per file.

  • Copy the user's music to state/videos/assets/<slug>-music.<ext>

and their voiceover to state/videos/assets/<slug>-vo.<ext>.

  1. Watch every clip. You can't play video, so look at frames:
  • Run node VIDEO/montage.js frames <clip> --every 1 for each clip

(--every 0.5 for a short, busy one). It lays out a frame every second with its time, and prints when the clip's sound is loud (someone talking, or a sound worth keeping). Read each sheet.

  • Name what each clip shows, and pick its best moment: steady, sharp,

well lit, the subject clear. Skip the shaky start, the phone being lowered, blur, and anyone who hasn't agreed to appear. Each pick is a stretch, [from: 3.5] [to: 6.5]: 1.5 to 4 seconds is right for most shots. A long clip can give two or three shots from different moments.

  • A landscape clip is cut to 9:16. Note what to keep in frame as

[focus: x%,y%] (the person, the product, the fireplace).

  • Note the clips whose sound should stay ([sound]): someone talking

to the camera, a laugh, the sizzle on the grill. You can't hear them, so ask the user what's said, word for word, for the captions, and say which clips you'd keep the sound of so they can check.

  • Say which clips or moments you left out and why, so the user can

overrule you.

  • Order the shots with

${CLAUDE_PLUGIN_ROOT}/references/montage-guide.md ("Clips: the order"): the strongest moment first, then a route through the place or the event, ending on the CTA.

  1. Confirm scope in one message. Propose, and let the user correct:
  • Length and shots: about 15, 30, or 60 seconds, and which moments

fill it.

  • Music: their track, the client's sound, another genre, a

Creative Commons track (send it to listen to first), or none.

  • Voice: their voiceover, the clips that keep their own sound, or

none.

  • The words on screen: the hook (three options from

${CLAUDE_PLUGIN_ROOT}/references/hooks.md, each from a different pattern), a label for each shot, a status sticker if any, and the CTA, plus the price and specs for a listing or a product. Every fact comes from the user or the client. If one is missing, ask, or leave it out.

  1. Write the script and build the page. Edit the starter script. The

format and every tag are documented at the top of VIDEO/montage.js:

```


title: taco night client: casa-lupe hook: tuesday is taco night cta: book a table · link in bio music: assets/taco-night-music.mp3 pace: 4 beats


  1. assets/taco-night-03.mp4 Fresh off the grill [from: 1.2] [to: 4] [sound]
  2. assets/taco-night-01.mp4 Handmade tortillas [from: 0.5] [to: 3] [focus: 40%,60%]
  3. assets/taco-night-02.mp4 Meet chef Lupe [from: 6] [to: 10.5] [sound] [say: Every tortilla is pressed by hand, every morning.]
  4. assets/taco-night-04.mp4 The patio [from: 2] [to: 5] [move: push-in]

```

  • Clip stretches: [from:] and [to:] set the stretch. The shot

is then fitted to the beat (rounded up, so it plays a moment past [to:]). Use pace: in beats, not bars, for clips: a bar rounds a 3-second stretch up to 5 seconds at 96 BPM.

  • A clip's own sound: [sound] plays it in sync, with the music

ducked under it. A [say: ...] on that clip is what's said in it, captioned word by word. It isn't voiced again.

  • The user's voiceover: voiceover: assets/<slug>-vo.m4a and

voiceover-text: <their words, word for word>. It plays from 0.3 seconds (voiceover-at: to change it), the music ducks under it, the captions run low on every shot, and the shots stretch to cover it. Don't also use [say: ...] voice lines.

  • Their music: music: assets/<slug>-music.mp3. Its beat is read

with beats.js and the cuts land on it. music: none leaves room for a trending sound added in the app.

  • Moves: a clip keeps its own motion. [move: push-in],

pull-out, or drift add a slow zoom on top. A pan slides the zoomed clip, since there's nothing beside the frame to pan to.

  • Photos mixed in move as in montage-video (pans, push-ins, 3D

moves).

Then run node VIDEO/montage.js state/videos/<date>-<slug>.md. It writes <date>-<slug>.html next to the script, prints the shot table, the sound, the voice, and any notes (a clip shorter than its shot, a shot held so its label can be read), and runs render.js --check. Fix what the check lists, usually by shortening a label, and run it again until it's clean.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
51
Repository forks
6
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/marcosmodly/marketing-skill/clip-montage/badge)](https://verified-skill.com/skills/marcosmodly/marketing-skill/clip-montage)

Something wrong with this skill or its page? Tell us.