From Recharm
Turn an end-to-end video creative brief into a sectioned shot list, search the user's Recharm clip library for footage that fits each section using label-based filters, and produce a final creative brief with picks. Use whenever a user provides a brief/script/storyboard and asks for matching footage from Recharm.
How this skill is triggered — by the user, by Claude, or both
Slash command
/recharm:brief-creatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You orchestrate a multi-step search loop against the user's Recharm clip library to turn a creative brief into a shot-by-shot brief with concrete clip picks. You use label-based filters to constrain searches — no visual review of clips is performed.
You orchestrate a multi-step search loop against the user's Recharm clip library to turn a creative brief into a shot-by-shot brief with concrete clip picks. You use label-based filters to constrain searches — no visual review of clips is performed.
The Recharm MCP server (recharm) is available in this plugin. Key behavioral notes:
list_labels once at the start — keep the result for the entire workflow; do not call it again per scene.save_brief a slim structured package; the server derives every clip's URLs, name, duration, and aspect ratio from its clipSymbol and renders the HTML.save_brief exactly once, after the clip picks are final. Each call mints a new URL.search_clips_visually — use the first page only.list_labels — do not invent or guess label strings.Please check the actual MCP server data for up-to-date API info.
Always refer to a clip in user-facing output as its clipName — <clipSymbol> - <sceneType> (e.g. "AB - Product Reveal"). If sceneType is null, fall back to just the clipSymbol.
This skill processes one video at a time. If you detect that the provided brief calls for creating multiple videos, prompt the user up front whether to run the skill once per video (sequentially) or pick a single video to process — then follow the steps below for each chosen video.
Follow the steps below in order.
lululemon, hike_footwear), use it.list_brands and ask the user to pick.Call list_labels(brandName) and keep the result for the rest of the workflow. You will use these categories and labels to build search filters. Do not invent or use label values that were not returned by this call.
Note the following special-case categories if present:
Hook, CTA, Product Benefit, Demo, and Product Shot.Read the brief and break it into ordered scenes. Each scene should be approximately 2–5 seconds and correspond to a single Recharm clip. Cap the total at 18 scenes.
For each scene capture:
If the user supplied an explicit scene breakdown, use it and skip to Step 4. Otherwise, show the proposed scene breakdown to the user and wait for confirmation before proceeding.
If a transcript (also called voiceover or VO) is provided, use it to inform what each scene should show — but section the brief independently of transcript timing.
For each scene, generate 2-4 search queries. Each query has:
filters object with 0–3 categories and 1-2 labels from the list_labels response.SceneType filter: use the SceneType that best matches the scene's narrative role when a relevant SceneType exists in the label list.
ActorType filter (transcript constraint): if a transcript (or voiceover/VO) was provided AND ActorType is present in the list_labels response, add ActorType: ["Actor B-roll", "No Actor"] as a hard filter on every query. If ActorType is absent from the label list, omit this filter entirely.
Product filter: if a specific product was named in the input:
list_labels response.General filter guidance: supply multiple labels within a category to broaden results (OR logic within a category). Only combine multiple categories when both constraints are genuinely required (AND logic across categories) — over-filtering will return too few results.
Each search_clips_visually hit is slim: clipSymbol, clipName, rawVideoPublicId, sceneType, cosineDistance (lower is closer), durationMs, and categoriesAndLabels (top hits). No media URLs are returned — pick clips by clipSymbol and the server derives the rest at render time.
For each scene:
search_clips_visually once per query phrase, passing brandName, query, and any filters. Do not paginate — use only the first page of results.cosineDistance. Do not fetch or examine poster images or sprite images.clipSymbol — if the same clip appears in multiple query results, count it once and attribute it to the query with the best cosineDistance.rawVideoPublicId within a scene — clips sharing a rawVideoPublicId are different moments of the same source video and look near-identical. Keep the best (lowest cosineDistance) and drop the rest, so each scene's picks are visually varied.Do not write HTML. Build a slim structured package the server will render:
title: a short brief title, e.g. "5 Outdated Rules" · UGC Testimonial · Women 50+.scenes: the ordered scenes from Step 3. Each scene is:
name: the scene heading.description: the 1–2 sentence on-screen description from Step 3.clips: the picked clips for the scene, in order. Each clip is:
clipSymbol: the clipSymbol from the search_clips_visually hit.searchString: the query phrase that surfaced this clip (Step 4/5).filters: the label filters used in that search, if any (the same filters object you passed to search_clips_visually).clips array — it renders as a "custom shoot needed" gap.You do not provide URLs, durations, dimensions, aspect ratios, or display names — the server derives all of those from each clipSymbol.
Once the package is assembled, call save_brief exactly once with the v2 payload:
save_brief(brandName, {
version: "v2",
title: "<brief title>",
scenes: [
{
name: "<scene heading>",
description: "<on-screen description>",
clips: [
{ clipSymbol: "<symbol>", searchString: "<query phrase>", filters: { <category>: ["<label>"] } }
]
}
// ...a scene needing a custom shoot uses: { name, description, clips: [] }
]
})
The tool derives, renders, and uploads the HTML, returning { url, briefId, s3Key } — surface the url to the user as the shareable link. After saving, give the user a short overall summary: scenes that need custom footage, cross-cutting observations, and obvious gaps in the brand's library. If the call fails, report the failure and show the structured package you assembled.
list_labels — the API will reject them.clipSymbols — only use ones returned by search_clips_visually.clipSymbol alone in user-facing output — always use clipName.save_brief the v2 structured package and let the server render.save_brief more than once per brief, and don't call it before the clip picks are final.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub recharm/claude-plugin --plugin recharm