Skip to main content
Glama

extract_clips

Cuts highlight moments from a long video or YouTube link into captioned vertical shorts by transcribing speech, scoring segments, tracking faces for 9:16 crops, and adding animated captions.

Instructions

Cut the best moments out of a long video (a local file path or a YouTube link) into captioned vertical shorts: it transcribes the speech with Whisper, scores the moments, crops to 9:16 with face tracking and burns in animated captions. It runs in the background: the call returns a job_id immediately and the work can take several minutes (longer on a computer without an NVIDIA GPU), so poll get_render_status until the job is 'completed' or 'failed'. Clipping works without any API key; an AI key only improves scoring and titles. Files are written under the ShortsFlow folder (sessions/...) and nothing is uploaded. Use generate_short instead to create a video from a topic.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "source_video": "<source_video>"
    },
    "name": "extract_clips"
  }
}

Input Schema

NameRequiredDescriptionDefault
layoutNoFraming: single = face-tracked crop; split = two speakers stacked; active = cut to whoever is talking (stacked when unsure), best for podcasts and interviews; fit = the whole picture centred over a blurred copy of itself, nothing cropped off the sides (screen recordings, gameplay).single
tightenNoCut out silences and dead air inside each short.
languageNoLanguage spoken in the video (en, hi, es, fr, ...; 'auto' detects it).en
auto_editNoEdit like an editor: cuts, zooms, cutaways, teaser opening, colour and sound effects for this kind of video.
clip_countNoHow many shorts to cut out.
smart_cropNoFollow the speaker's face when cropping the wide video to vertical.
source_videoYesLocal video file path or a YouTube/other video URL to clip. Required.
use_remotionNoAnimated captions (needs Node.js). False renders without animated captions.
caption_styleNoAnimated caption look (needs use_remotion): HORMOZI = bold yellow single words, GLOW_BOX = words in boxes with a pink highlight, BOUNCE = bouncy gold single words, MINIMAL = clean dark boxes, AUTO/RANDOM = pick for me.HORMOZI
edit_strengthNoWith auto_edit: how much of the edit shows (subtle keeps it quiet, hyped uses everything).medium

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.5.0
    • addedInput schema / properties / auto_edit
      Added value: +{
      +  "description": "Edit like an editor: cuts, zooms, cutaways, teaser opening, colour and sound effects for this kind of video.",
      +  "enum": [
      +    "podcast",
      +    "hype",
      +    "educational",
      +    "vlog"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / edit_strength
      Added value: +{
      +  "default": "medium",
      +  "description": "With auto_edit: how much of the edit shows (subtle keeps it quiet, hyped uses everything).",
      +  "enum": [
      +    "subtle",
      +    "medium",
      +    "hyped"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / language
      Added value: +{
      +  "default": "en",
      +  "description": "Language spoken in the video (en, hi, es, fr, ...; 'auto' detects it).",
      +  "type": "string"
      +}
    • changedInput schema / properties / layout / description
      Previous value: -"Framing: single = face-tracked crop; split = two speakers stacked; active = cut to whoever is talking (stacked when unsure), best for podcasts and interviews."New value: +"Framing: single = face-tracked crop; split = two speakers stacked; active = cut to whoever is talking (stacked when unsure), best for podcasts and interviews; fit = the whole picture centred over a blurred copy of itself, nothing cropped off the sides (screen recordings, gameplay)."
    • changedInput schema / properties / layout / enum
      Previous value: -[
      -  "single",
      -  "split",
      -  "active"
      -]New value: +[
      +  "single",
      +  "split",
      +  "active",
      +  "fit"
      +]
  2. Changed1 schema field changedv0.4.1
    • removedInput schema / properties / clip_count / maximum
      Removed value: -15
  3. Changed10 schema fields changedv0.1.1
    • addedInput schema / properties / caption_style / description
      Added value: +"Animated caption look (needs use_remotion): HORMOZI = bold yellow single words, GLOW_BOX = words in boxes with a pink highlight, BOUNCE = bouncy gold single words, MINIMAL = clean dark boxes, AUTO/RANDOM = pick for me."
    • addedInput schema / properties / caption_style / enum
      Added value: +[
      +  "HORMOZI",
      +  "GLOW_BOX",
      +  "BOUNCE",
      +  "MINIMAL",
      +  "AUTO",
      +  "RANDOM"
      +]
    • changedInput schema / properties / clip_count / description
      Previous value: -"Number of viral shorts to extract"New value: +"How many shorts to cut out."
    • addedInput schema / properties / clip_count / maximum
      Added value: +15
    • addedInput schema / properties / clip_count / minimum
      Added value: +1
    • changedInput schema / properties / layout / description
      Previous value: -"single: face-tracked crop; split: two speakers stacked; active: cut to whoever is talking (stacked when unsure) for podcasts/interviews"New value: +"Framing: single = face-tracked crop; split = two speakers stacked; active = cut to whoever is talking (stacked when unsure), best for podcasts and interviews."
    • changedInput schema / properties / smart_crop / description
      Previous value: -"Enable AI face and subject tracking crop for 9:16 vertical video"New value: +"Follow the speaker's face when cropping the wide video to vertical."
    • changedInput schema / properties / source_video / description
      Previous value: -"YouTube video URL or local video file path"New value: +"Local video file path or a YouTube/other video URL to clip. Required."
    • changedInput schema / properties / tighten / description
      Previous value: -"Automatically trim silence gaps for punchy high retention"New value: +"Cut out silences and dead air inside each short."
    • addedInput schema / properties / use_remotion / description
      Added value: +"Animated captions (needs Node.js). False renders without animated captions."
  4. First observedv0.1.0

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does so: it discloses asynchronous execution returning a job_id immediately, multi-minute runtimes that lengthen without an NVIDIA GPU, that no API key is needed (only improving scoring/titles), that files land under the ShortsFlow folder with nothing uploaded, and that captions need Node.js. These are exactly the behaviors an agent needs before invoking an expensive background job.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then async behavior, then prerequisites, then the alternative — a sensible order with no filler sentences. It is dense and clause-heavy in places, but every sentence contributes information an agent would otherwise lack.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter background job with no annotations and no output schema, the description covers execution model, timing expectations, credential requirements, filesystem effects, and the hand-off to get_render_status. What it omits is what the completed job result actually contains, forcing the agent to infer that from the status tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already carries its own semantics and enum explanations; the description adds no per-parameter guidance beyond restating that the source may be a path or URL. Baseline 3 is appropriate since the schema does the heavy lifting here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("cut the best moments out of a long video into captioned vertical shorts") and enumerates the pipeline stages: Whisper transcription, moment scoring, 9:16 face-tracked crop, burned-in animated captions. It also explicitly differentiates from the sibling generate_short, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative explicitly ("Use generate_short instead to create a video from a topic"), states the input forms accepted (local path or YouTube link), and gives the operational loop (returns job_id, poll get_render_status until 'completed' or 'failed'). Nothing about when to pick this over siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.