For each Creative Claw tool call that exposes it, pass the optional skills_used array with creativeclaw-edit-media, any other Creative Claw skills actually followed, and guide entries in the form <skill-name>/<relative-guide-path> (for example, creativeclaw-edit-media/references/workflow-basics.md). Include only skills and guides followed for that call. Omit attribution if the user declines tracking or the field is unavailable. Never send other plugin names, private data, or local paths.
Not connected yet? If no Creative Claw tools (such as list_models or generate_image) are available, the plugin is installed but the server is not connected. Stop and tell the user to open the plugin's Connectors tab in their app (or the MCP server list in a terminal client), connect Creative Claw, sign in, and ask again. Do not substitute other tools or describe a result that was not generated.
Read shared execution guidance once per task before using tools. It covers existing authorization, model discovery, optional cost checks, imports, and recovery.
Turn supplied footage or audio into a finished derivative. Apply the requested edits with sensible defaults and no settings questionnaire. Keep the original asset unchanged.
Pick only the operations you need
| Requested change | Tool and key limits |
|---|---|
| Shorten a video to one range | trim_video: set start_time explicitly, including zero, and either end_time or duration. |
| Cut, reorder, or reframe several chosen moments | cut_and_reframe_video: see Multi-cut edits. |
| Resize or make a vertical version | scale_video: even dimensions and an explicit mode. crop is a center crop, pad keeps the full frame, stretch distorts. No subject tracking. |
| Burn captions | add_subtitles: transcribes the video itself and fits the font, size, and placement to the frame and language. See Captions. |
| Get a transcript or find a passage | transcribe: exactly one of audio_url or video_url. |
| Clean a noisy recording | isolate_audio: keep and compare the original; cleanup can change speech. |
| Get still frames | extract_frames: check the schema for first/last/sampling controls. |
| Put narration or music on a clip | merge_media merge_audio_video: see Audio. |
| Join clips or audio files in order | merge_media merge_videos or merge_audios. |
| Burn a logo or copyright mark onto a finished video | merge_media overlay_images with a transparent image. remove_background can prepare a logo. |
| Build a video from timed images, clips, and optional audio | merge_media compose_video. |
| Add an intro, outro, or both | See Intros and outros. |
| Upscale or remove a background | upscale_media or remove_background, for the media type and parameters they support. |
Read assembly guidance before any merge_media call.
Route elsewhere: creativeclaw-generate-video for invented footage or a generative change to the source; creativeclaw-create-reels when the agent must pick highlights from long footage; creativeclaw-render-html only when the user explicitly wants HTML or HyperFrames rendering. A caption request alone does not select HTML. For an exact text watermark, render_html_image with transparent_background: true can make the PNG for overlay_images.
Workflow
- Reuse the known asset or import the source through platform-upload.md. Establish duration, aspect ratio, audio, and burned-in text from metadata and playback; do not invent measurements.
- Run the smallest edit chain. Trim a user-given range directly. Transcribe first only if text or timing is needed to choose cuts.
- Finish cuts and merges first, then resize to the final framing, then burn captions. Use a center crop only when the subject stays visible; otherwise pad or ask about the framing tradeoff.
- Resolve each queued job with
check_jobbefore passing its result on. On failure, follow job-recovery.md and resume from the last completed derivative. - Burn captions last, following Captions. Do not translate captions unless asked.
- Check final length, framing, speech, caption sync and safe areas, and audio. Name and tag the result, and state any check you could not do.
For "make this a captioned vertical clip": reuse the footage, trim only if a shorter clip was asked for, resize with an explicit mode, then add captions. No model discovery or generation is needed.
Captions
add_subtitles transcribes the video, detects the language, and chooses the font, size, line breaks, and a safe position for the frame. The defaults are white, readable on every aspect ratio and script, and keep emoji. Leave every styling input out unless the user asked for it. Set language only when the spoken language is known.
- Look:
presetisclean(default),highlight(the spoken word in colour),bold_pop(large uppercase, three words at a time),box(dark box behind the text),word_box(a box on the spoken word),one_word,reveal(words appear as they are spoken), orcinematic(small and light). Set one only when the user describes that look. - Let the user choose:
interactive: trueopens a card with the video, a demo of every look on it, and the price. The user can also set the position, size, and colours there. Nothing is rendered or charged until they pick a look and confirm in the card. Use it when the user wants to see or choose the style. After the call, tell them to pick in the card; do not calladd_subtitlesagain for that video. - Known wording: pass
scriptwhen the user has the text that is spoken; timing still comes from the audio, and a script that does not match the speech is ignored. Passcaptions(SRT, WebVTT, or a JSON list of{start, end, text}in seconds) when they have timed captions, including a translation they asked for; this skips transcription. - Names and jargon:
terms: ["WonderZap"]gives the transcriber the right spellings and adds one credit.corrections: [{ "from": "wonder zap", "to": "WonderZap" }]replaces a phrase after transcription. - Fix a finished result: call
add_subtitleswith the samevideo_url,fix_job_idset to the job ID of the captioned video, andcorrectionsand/or a differentpreset,position,font_size, or colours. It renders again from the original video without transcribing, at no charge, up to 20 times per video. The user can also do both themselves in the result card: edit the lines in its Text tab, or change the look, position, size, and colours in its Style tab. Never runadd_subtitleson an already captioned video to fix it: the old captions stay underneath. - Fonts: omit
font_nameunless the user names a font. A name is looked up among the workspace's brand theme fonts and uploaded fonts first, then Google Fonts.font_urltakes a font file directly (TTF, OTF, WOFF, or WOFF2).
add_subtitles({ video_url: "<video-url>", interactive: true })
add_subtitles({ video_url: "<video-url>", fix_job_id: "<captioned-job-id>", corrections: [{ from: "wonder zap", to: "WonderZap" }] })
Multi-cut edits
Use cut_and_reframe_video when the user has chosen the moments (or creativeclaw-create-reels has) and wants them cut, reordered, or reframed in one render. It does not pick highlights, transcribe, or track faces. If the tool is missing or returns "not configured", say so. Do not fake an exact multi-cut edit with a chain of lossy trims.
Read the cut-and-reframe contract before building input.
- The source must be a video asset in this workspace. Keep an unchanged source URL and a source-timed transcript. Inspect metadata and frames; do not invent sizes, word times, or coordinates.
- Choose safe boundaries. Listen around each edge when you can. Avoid clipped consonants, breaths, and cut-off reactions. Prefer a natural gap, keep enough lead-in and tail, and end on a short release without entering the next word. The renderer does not extend ranges. Do not remove every pause or change what someone meant.
- Set the requested width and height (1080×1920 is only the default). Use
padwhen position is uncertain. Usecenter_croponly after checking the subject stays in frame. Forcrop, give an even rectangle at the output aspect ratio, with static coordinates or keyframes set from real observations. If a speaker leaves the crop, revise the path or pad; never stretch or guess. - Captions are optional. Pass real source-timed words; the tool remaps them after the cuts and burns them last. With only sentence timing, render the cuts first and run
add_subtitleson the result. Never fabricate word alignment. Use plain captions for overlapping speakers or right-to-left text unless you can review karaoke visually. - Submit one call per output. Save the job ID and the exact edit plan. After a timeout, poll the existing job; do not resubmit blindly.
- Check every splice with about 1.5 seconds of context on each side, the first and last words, crop continuity, caption spelling and sync, and audio. Technical checks do not prove the edit reads well. Fix only identified faults; do not rerender speculatively.
Intros and outros
Get the bookend segments, then concatenate them around the main video.
- Supplied clips: import and use them.
- HTML title cards: only when the user asks for HTML, HyperFrames, or code-rendered cards, or accepts that option when you offer it for exact text, fonts, and logos. Render them with
creativeclaw-render-html. An intro/outro request alone does not authorizerender_html_video. - Generated cinematic bookend: use
creativeclaw-generate-video. To match the look,extract_framesfrom the main video and pass the frame as a style reference.
- Establish the main video's URL, size, aspect ratio, frame rate, audio, and platform.
- Use the requested copy, logo, duration, and audio. Ask only about missing copy; do not invent a slogan or call to action. Keep bookends short.
- Make segments at the main video's size and frame rate. Resolve and inspect each one.
- Merge in playback order. Set
canvas_video_indexto the main video's zero-based index andvideo_fit: "pad"to keep mismatched frames whole, unless cropping is authorized.
merge_media({
operation: "merge_videos",
video_urls: ["<intro-url>", "<main-video-url>", "<outro-url>"],
canvas_video_index: 1,
video_fit: "pad",
pad_color: "black"
})
Omit a bookend that was not requested. merge_videos is a hard cut: no dissolves, crossfades, or audio carried across the join. If the main audio must continue under a bookend or fade across a cut, say so before making segments.
Audio
merge_audio_videoreplaces the clip's audio by default and ends at the shorter input. Check both durations first; do not silently shorten the video to fit a voiceover.audio_mode: "mix"keeps the clip's own sound and layers the new track over it, at the video's full length. Setoriginal_volumeandadded_volume(0–1); about 0.3 keeps music under speech.compose_videolayers one audio track over the clips at full level, and the output can run past the last clip. Use it when the added audio should extend beyond the picture.merge_audiosjoins files end to end; it does not layer them.- There is no ducking, volume automation, or crossfade. Say which operation is missing before creating assets that cannot be assembled as asked.
Limits
- A public YouTube, Google Drive, or social video page can go straight to
transcribeasvideo_url. It is not a source for trimming, resizing, or subtitles; import the actual file for those. add_subtitlesalready transcribes. Add a separatetranscribejob only for a transcript the user wants or for choosing cuts.estimate_generationdoes not cover these processing operations. Discuss cost only when it matters to the request, and do not present a partial estimate as the total.