marcosmodly/marketing-skill/montage-video

Claude Code and agent skill by marcosmodly/marketing-skill

Trust tier 2
  • community
LLM review pending
Source check pending

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

Turns photos of a home, a room, or a product into a finished vertical video: each photo moving like a camera, cut on the beat, with labels, price and specs, and a branded end card. Use whenever someone has listing or product photos and wants a listing video, property tour, slideshow, or product video. Video clips: that's clip-montage.

Install

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

SKILL.md

Montage Video

Purpose

Take the photos (or short phone clips) a client hands over, a house or apartment, a single room, or a product, and turn them into a finished 9:16 montage that's ready to post: the best shot first with a hook on it, each photo moving with purpose (in 3D where it can: the camera seems to circle, move into the room, or lift, with near things moving more than far ones), cuts on the beat, a label on every shot, the price and specs, a CTA, and the client's branded end card. Music, a voiceover, or both. Then keep editing it with the user until they're happy ("faster", "kitchen first", "calmer music", "drop the price"), one version at a time, without losing the earlier ones.

Everything renders locally with this plugin's own scripts/video/ tools. They're free and need no account. montage.js builds the page from a short script, and render.js makes the MP4.

This skill is the photo-driven sibling of short-form-video. Use that one when there are no client photos (a scripted ad, an explainer, an everyday FYP post). Use this one whenever the user's own pictures of a place or product are the video.

Videos come first. When the user has phone videos of the place or the product, or can film a few, clip-montage is the default: real camera moves, free, and nothing invented. This skill is for photos. Its moves are free too, except "AI camera moves", which spend the user's credits on a paid plan and run only when they say they have one and approve the quote.

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. That file is the user's own business. Each client they make videos for gets a profile of their own (step 2). 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. List ${CLAUDE_PLUGIN_ROOT}/state/clients/*.md

and ask who this video is for. state/clients/README.md has the profile format.

  • A saved client: read the profile, including its ## Notes. They

hold what this client has asked for before ("never show the price", "always calm music"). Apply them without being asked again.

  • A new client: ask for the business name, the contact lines for the

end card (the agent's or shop's name, phone, website), any fine print they must show (for real estate, often the brokerage name, a license number, or "Equal Housing Opportunity"; ask, never guess), the logo file, the brand colors (from their site, logo, or a description), a font if they have one, and the mood of music they like. Save the logo as state/clients/<slug>/logo.png and write state/clients/<slug>.md.

  • The client's sound: propose two genres from

${CLAUDE_PLUGIN_ROOT}/references/sound-guide.md that fit their mood, render a short preview of each (node VIDEO/render.js --sample <genre> <out.m4a> --key ... --mode ... --energy ... --motif ...), send both, and save the user's pick as the profile's ## Sonic Identity. You can't hear audio, so their ear decides.

  • The user's own business (not a client): leave client: out of

the script, and the look and sound come from brand-voice.md. Check what the project is first (python3 ${CLAUDE_PLUGIN_ROOT}/scripts/project.py in their folder, and the Project section of brand-voice.md).

  • **What this video is about and for, confirmed before anything is

made.** Say what you understood in a line or two (the property, product, or event; who it's for; where it'll be posted), then ask what the video is for (a listing, a launch, a sale, followers) and the one thing a viewer should remember or do, anything that must be shown or said (the price, the address, a sale ending), and anything to avoid. Wait for the answer before writing the script, unless the request already says it or the user said to use defaults. Never invent a price, a spec, or a feature.

  • Client profiles stay out of git (.gitignore), since they hold

people's phone numbers.

  1. Get the photos onto disk. The renderer needs files.
  • First ask whether they have, or can film, short videos of the

place or product. If so, hand over to clip-montage (free, and the truest picture). Carry on here with photos only.

  • Ask for the folder (or the file paths) the photos and clips are in.
  • If the user only pasted images into the chat, you can see them, but

the renderer can't. Ask them to save them in a folder and give you the path.

  • If they're in Google Drive and a Drive connector is available this

session, download them with it into a new folder.

  • Use only photos the client owns or has a license to use: their own

pictures, or the listing photographer's photos licensed to them. Never download photos from a listing site or another agent's listing. Ask the user for the original files instead.

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

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

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

on. Photos come out upright and sized for the frame, with their metadata removed (a phone photo's GPS location included). The originals aren't touched.

  • It prints each file's size, shape (landscape or portrait),

brightness, and clip length. It flags photos that are dark, very bright, or low resolution.

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

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

  • iPhone HEIC photos are converted when the machine has a converter.

If not, it says how to export them as JPEG.

  • It says whether 3D moves are on. They need a free depth model set

up once (npm install @huggingface/transformers in VIDEO; the first use downloads about 100 MB from huggingface.co). If they're off, ask the user whether to set it up. Never install it unasked. Without it, every shot still moves, just flat (pans and zooms).

  • If the install stops on a GPU download (ONNX Runtime's CUDA files),

run it again with ONNXRUNTIME_NODE_INSTALL_CUDA=skip, or add --ignore-scripts. It runs on the CPU either way.

  • In a cloud session whose network policy blocks huggingface.co, the

model can't download and the shots move flat. Tell the user they can allow huggingface.co in the environment's network settings, then run montage.js again.

  1. Look at every photo. Read the contact sheet, then each photo you

need a closer look at, with the Read tool.

  • Name what each shot shows (front exterior, kitchen, main bath; or

hero shot, detail, in use, packaging).

  • Set aside duplicates and weak shots: dark, blurry, tilted, cluttered,

or a person in the frame who hasn't agreed to appear. Say which ones you left out and why, so the user can overrule you.

  • Note each shot's focal point (the fireplace, the view out the window,

the product's label), as focus=x%,y% of the photo.

  • Order the shots with

${CLAUDE_PLUGIN_ROOT}/references/montage-guide.md: the strongest shot first, then a route through the space (or around the product), ending on the facts and the CTA.

  1. Confirm scope in one message. Propose, and let the user correct:
  • Kind: property or product.
  • Length: about 15, 30, or 60 seconds, and roughly how many shots

that holds (montage-guide.md, "Length and number of shots"). Say which photos you'd drop to fit.

  • Music: the client's saved sound (the default), another mood for

this one (a genre), a licensed track (node VIDEO/media.js search "<mood>" --type music --out state/videos/assets --count 3 finds Creative Commons tracks that allow commercial use), or a track the user has a license for. Send any track to listen to before using it.

  • Voice: none (music only, the default for most listings), a free

local voice (node VIDEO/voice.js --audition <dir> "<a line from the script>" makes samples to pick from; English voices), or the user's own recordings, one file per voiced line, in any language.

  • 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 ("just listed", "open house sat 1–4", "new", "20% off"), the price, the specs, and the CTA. Every fact comes from the user or the client: the price, beds, baths, square footage, dimensions, materials, and product claims. If one is missing, ask, or leave it out. Never fill it in.

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

(or the Style reference in brand-voice.md's Video Setup). Run node VIDEO/reference.js <video>, read its reference.md and sheets, and match its pace (pace:), its moves, and its feel, copying the editing, never its footage, music, or words.

  • Staged or edited photos: ask whether any photo is virtually

staged, or edited beyond color and exposure. A virtually staged photo gets the [staged] badge.

  • How the camera moves: say plainly which kind of move each shot

gets.

  • Local moves (free): a pan or push-in, or a 3D move (orbit,

dolly-in, rise) that re-draws the photo from how far each part of it is. These only show what's in the photo: no new angles, nothing around a corner, and only small moves.

  • AI camera moves (a connected video model, paid credits): the

camera really orbits, glides through a doorway, or sees the room from a new angle, because the model invents what the photo doesn't show. Every clip is checked against its photo and labeled. See "AI camera moves" below. Not the default: offer it only when the user wants the camera to really move and says they have a paid plan with a video model. Otherwise say in one line that it needs a paid plan, and that filming a few clips (clip-montage) gives real camera moves for free.

  • A real second angle can also come from another photo of the same

room. Ask the photographer for two or three angles of the best rooms.

  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:

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

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

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

Source

Popularity

Repository stars
100
Repository forks
20
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/montage-video/badge)](https://verified-skill.com/skills/marcosmodly/marketing-skill/montage-video)

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