Skip to main content
Glama

generate_topic_short

Generate a Topic Short from a reviewed storyPlan or automatically plan one from the topic and storyFormat. Spoken narration fills the selected length. A short reviewed plan is expanded so the voiceover is not a music-only tail. A too-long plan is packed down; generate never fails for narration length. captionStyle defaults to spotlight (off, spotlight, impact, highlighter, editorial, boxed, kicker — the Story caption looks, burned from the voiceover word timings); transitionMode defaults to dynamic. Uses this month’s generation allowance or complimentary quota. Poll get_topic_short. Stock matching fail-opens: a Pexels miss or outage still returns a finished short. Caption failure also fail-opens (captionBurn.verdict = fallback). Legacy captionMode values are aliased onto captionStyle. Optional hookTemplateId seeds the topic from Opening hooks (script opening, not a caption look) and does not change consume or refund. Takes the same setup as quote_topic_short (storyFormat, aspectRatio, visualStyle, aiHook, language, host, sources, voiceCloneId, seriesEpisodeId); pass the same values on both. Cinematic and AI hook shots that miss their 2-minute deadline fall back to judged stock, so the short still ships. A seriesEpisodeId short is linked to that episode.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
topicNoTopic to plan from. Required unless hookTemplateId seeds it or seriesEpisodeId supplies it. An explicit topic wins over either seed.
voiceNoNarration voice id from list_audio_lab_voices. Defaults to the product default voice.
aiHookNoOptional AI hook: the opening shot is an AI clip and abstract beats can get AI stills; the rest stays judged stock. Quoted higher. Any AI shot that misses its 2-minute deadline falls back to the best stock clip. Not available on the free short.
formatNoAlias of storyFormat. storyFormat wins when both are set.
scriptNoOptional supplied narration. If it already fills the selected length it is preserved word for word; if it is too short the planner expands it so speech fills the duration. Too-long scripts are packed down to the speaking-pace envelope (never fail generate for narration length). Maximum 8,192 UTF-8 bytes.
quoteIdNoQuote id from quote_topic_short. Optional; generate quotes first when omitted if topic is set.
sourcedNoSourced script: research the topic, cite real sources, and soften or drop claims it cannot verify. The finished short carries a Sources card; get_topic_short returns the citations. Implied by sourceUrl, sourceUrls or sourceText. Not available on the free short.
languageNoNarration and caption language: en (English), es (Spanish), pt (Portuguese), de (German), fr (French), hi (Hindi). Default en. The planner writes the script in this language; pass a script already written in it. Stock search terms stay English.en
sourceUrlNoOne https article or page link that grounds a sourced script. Same as a one-item sourceUrls.
storyPlanNoOptional reviewed story from create_topic_short_story. Pass the same plan when quoting and generating; omit to plan automatically. A plan whose narration is too short for the selected length is expanded at generate so speech fills the duration. A too-long plan is packed down; generate never fails for narration length.
charactersNoauto (default) keeps one recurring fictional character consistent across shots on story formats (story_twist, mini_documentary) with cinematic or aiHook; off turns that off. Real people are never generated.
hookBlanksNoFill [bracket] keys from the Opening hooks seed. Example: { "the annoying thing": "soggy leftovers" }. Does not change the quote.
hookIntentNoOptional Opening hooks intent. Browse with list_hook_bank. Ignored when seeding if hookTemplateId is set.
hostLayoutNoWhere the host appears: pip_circle (default), pip_corner, or full frame. Only with hostNarratorId.pip_circle
sourceTextNoPasted article text (200–20,000 characters) that grounds a sourced script.
sourceUrlsNoUp to 3 https links that ground a sourced script. PDF uploads are website-only; paste the text with sourceText instead.
aspectRatioNoFrame size. 9:16 vertical (default), 16:9 landscape, or 1:1 square for feeds.9:16
captionModeNoLegacy Topic Shorts caption mode, accepted for old clients only. current maps to spotlight, hook to impact, phrase to kicker, off to off. Prefer captionStyle.
storyFormatNoStorytelling format: mini_documentary (Mini documentary), myth_check (Myth check), story_twist (Story with a twist), how_it_works (How it works), ranking (Top 5), quiz (Quiz), scary_story (Scary story), history_pov (History POV), reddit_story (Post story), what_if (What if). Defaults to mini_documentary. Each format has its own pacing, cards and music mood.
visualStyleNoVisual style: standard (judged stock footage, default) or cinematic (every shot is an AI keyframe animated to video). Cinematic is quoted higher and takes a few minutes longer. Not available on the free short. Real people and brands are never AI-generated.standard
captionStyleNoTopic Short caption look: off, spotlight (default — each spoken word lights up on a blue highlight), impact (bold outlined caps, two words at a time), highlighter (caps with one yellow key word), editorial (quiet lower-third phrases), boxed (phrases on a rounded dark pill), or kicker (phrase chunks with one oversized cyan word up top). Same seven looks as Story; burned by the API from the voiceover word timings, in the narration language (Hindi uses a Devanagari font). Does not change the quote amount. Caption failure still returns a finished short.spotlight
recipeSourceNoWith recipeGenerationId: part_two makes Part 2 of that short; same_style reuses only its setup for a new topic. Pass the same value when quoting and generating.part_two
voiceCloneIdNoOptional id of one of your ready cloned voices (list_topic_short_voice_clones). Replaces voice. Paid plans only. Shorts narrated with a clone keep the AI-voice disclosure unless it was turned off when the voice was recorded.
hookTemplateIdNoOptional Opening hooks template (catalog id hook_bank). The workspace picker is hidden. Seeds topic or Talking Shorts brief when that field is empty. Fill [brackets] via hookBlanks or by editing the seeded text. This is a script opening, not a caption look (captionStyle). Does not change the quote, consume, or refund.
hostNarratorIdNoOptional recurring host: a Character Films narrator (list_character_film_catalog) who appears lip-synced in the hook and outro. Quoted higher. Not available on the free short.
idempotencyKeyNoReuse this key and the same quoteId and inputs when retrying an ambiguous submission.
transitionModeNoClassic current cuts and dissolves, Dynamic punchier motion (default), or Off hard cuts. Does not change the quote.dynamic
captionsEnabledNoLegacy on/off. Prefer captionStyle. false selects Off captions.
durationSecondsNoTarget length of the finished short in seconds (15–180). Spoken narration is written to fill this length. Quoted on this duration, not word count.
seriesEpisodeIdNoOptional approved episode id from queue_topic_short_episodes. Uses that episode as the topic (when topic is empty) and the series style as the setup; explicit arguments still win. The short is linked to the episode. Quoted like any other short.
recipeGenerationIdNoOptional id of one of your earlier Topic Shorts (from generate_topic_short or get_topic_short). Copies its setup: voice, caption look, transitions, format, frame size, length and shot length. Any setting you pass explicitly wins. Never copies the topic, script or plan. Does not change how the short is priced. Pass the same value when quoting and generating.
clipDurationSecondsNoLength of each stock B-roll clip in seconds (2–6, default 3). Not the full short length.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusNoJob status such as pending, queued, in_progress, completed, or failed.
videoIdNoLibrary clip id for this job, when one exists.
idempotentNoTrue when this call reused an in-flight or finished job with the same idempotency key.
generationIdYesGeneration id. Poll the matching get_* tool until status is completed or failed.
creditsChargedNoUsage already consumed from this month’s generation allowance (internal units).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • addedInput schema / properties / aiHook
      Added value: +{
      +  "description": "Optional AI hook: the opening shot is an AI clip and abstract beats can get AI stills; the rest stays judged stock. Quoted higher. Any AI shot that misses its 2-minute deadline falls back to the best stock clip. Not available on the free short.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / aspectRatio / description
      Previous value: -"Frame size. 9:16 vertical (default) or 16:9 landscape."New value: +"Frame size. 9:16 vertical (default), 16:9 landscape, or 1:1 square for feeds."
    • changedInput schema / properties / aspectRatio / enum
      Previous value: -[
      -  "9:16",
      -  "16:9"
      -]New value: +[
      +  "9:16",
      +  "16:9",
      +  "1:1"
      +]
    • changedInput schema / properties / captionStyle / description
      Previous value: -"Topic Short caption look: off, spotlight (default — each spoken word lights up on a blue highlight), impact (bold outlined caps, two words at a time), highlighter (caps with one yellow key word), editorial (quiet lower-third phrases), boxed (phrases on a rounded dark pill), or kicker (phrase chunks with one oversized cyan word up top). Same seven looks as Story; burned by the API from the voiceover word timings. English only. Does not change the quote amount. Caption failure still returns a finished short."New value: +"Topic Short caption look: off, spotlight (default — each spoken word lights up on a blue highlight), impact (bold outlined caps, two words at a time), highlighter (caps with one yellow key word), editorial (quiet lower-third phrases), boxed (phrases on a rounded dark pill), or kicker (phrase chunks with one oversized cyan word up top). Same seven looks as Story; burned by the API from the voiceover word timings, in the narration language (Hindi uses a Devanagari font). Does not change the quote amount. Caption failure still returns a finished short."
    • addedInput schema / properties / characters
      Added value: +{
      +  "description": "auto (default) keeps one recurring fictional character consistent across shots on story formats (story_twist, mini_documentary) with cinematic or aiHook; off turns that off. Real people are never generated.",
      +  "enum": [
      +    "auto",
      +    "off"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / clipDurationSeconds / default
      Previous value: -5New value: +3
    • changedInput schema / properties / clipDurationSeconds / description
      Previous value: -"Length of each stock B-roll clip in seconds (2–6, default 5). Not the full short length."New value: +"Length of each stock B-roll clip in seconds (2–6, default 3). Not the full short length."
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "Alias of storyFormat. storyFormat wins when both are set.",
      +  "enum": [
      +    "mini_documentary",
      +    "myth_check",
      +    "story_twist",
      +    "how_it_works",
      +    "ranking",
      +    "quiz",
      +    "scary_story",
      +    "history_pov",
      +    "reddit_story",
      +    "what_if"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / hostLayout
      Added value: +{
      +  "default": "pip_circle",
      +  "description": "Where the host appears: pip_circle (default), pip_corner, or full frame. Only with hostNarratorId.",
      +  "enum": [
      +    "pip_circle",
      +    "pip_corner",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / hostNarratorId
      Added value: +{
      +  "description": "Optional recurring host: a Character Films narrator (list_character_film_catalog) who appears lip-synced in the hook and outro. Quoted higher. Not available on the free short.",
      +  "enum": [
      +    "pip",
      +    "mo",
      +    "lulu",
      +    "hazel",
      +    "otto",
      +    "rose",
      +    "bo",
      +    "sage",
      +    "wren",
      +    "kiko",
      +    "tally",
      +    "nib",
      +    "chalk",
      +    "rio",
      +    "juno",
      +    "yumi",
      +    "kenji",
      +    "dot",
      +    "patch",
      +    "ada",
      +    "marlo",
      +    "ollie",
      +    "zara",
      +    "barnaby",
      +    "momo",
      +    "bea",
      +    "rex",
      +    "nova",
      +    "gus",
      +    "tock",
      +    "fern",
      +    "duke",
      +    "lumi",
      +    "taro",
      +    "oya",
      +    "bolt",
      +    "reginald",
      +    "pepper",
      +    "lola",
      +    "moss",
      +    "noor",
      +    "arlo",
      +    "mei",
      +    "chip",
      +    "bruno",
      +    "stella",
      +    "kai",
      +    "plume",
      +    "grumble",
      +    "quill"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / language
      Added value: +{
      +  "default": "en",
      +  "description": "Narration and caption language: en (English), es (Spanish), pt (Portuguese), de (German), fr (French), hi (Hindi). Default en. The planner writes the script in this language; pass a script already written in it. Stock search terms stay English.",
      +  "enum": [
      +    "en",
      +    "es",
      +    "pt",
      +    "de",
      +    "fr",
      +    "hi"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / recipeGenerationId
      Added value: +{
      +  "description": "Optional id of one of your earlier Topic Shorts (from generate_topic_short or get_topic_short). Copies its setup: voice, caption look, transitions, format, frame size, length and shot length. Any setting you pass explicitly wins. Never copies the topic, script or plan. Does not change how the short is priced. Pass the same value when quoting and generating.",
      +  "type": "string"
      +}
    • addedInput schema / properties / recipeSource
      Added value: +{
      +  "default": "part_two",
      +  "description": "With recipeGenerationId: part_two makes Part 2 of that short; same_style reuses only its setup for a new topic. Pass the same value when quoting and generating.",
      +  "enum": [
      +    "part_two",
      +    "same_style"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / seriesEpisodeId
      Added value: +{
      +  "description": "Optional approved episode id from queue_topic_short_episodes. Uses that episode as the topic (when topic is empty) and the series style as the setup; explicit arguments still win. The short is linked to the episode. Quoted like any other short.",
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceText
      Added value: +{
      +  "description": "Pasted article text (200–20,000 characters) that grounds a sourced script.",
      +  "maxLength": 20000,
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceUrl
      Added value: +{
      +  "description": "One https article or page link that grounds a sourced script. Same as a one-item sourceUrls.",
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceUrls
      Added value: +{
      +  "description": "Up to 3 https links that ground a sourced script. PDF uploads are website-only; paste the text with sourceText instead.",
      +  "items": {
      +    "description": "An https article or page link.",
      +    "type": "string"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
    • addedInput schema / properties / sourced
      Added value: +{
      +  "description": "Sourced script: research the topic, cite real sources, and soften or drop claims it cannot verify. The finished short carries a Sources card; get_topic_short returns the citations. Implied by sourceUrl, sourceUrls or sourceText. Not available on the free short.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / storyFormat / description
      Previous value: -"Storytelling format: mini_documentary, myth_check, story_twist, or how_it_works. Defaults to mini_documentary."New value: +"Storytelling format: mini_documentary (Mini documentary), myth_check (Myth check), story_twist (Story with a twist), how_it_works (How it works), ranking (Top 5), quiz (Quiz), scary_story (Scary story), history_pov (History POV), reddit_story (Post story), what_if (What if). Defaults to mini_documentary. Each format has its own pacing, cards and music mood."
    • changedInput schema / properties / storyFormat / enum
      Previous value: -[
      -  "mini_documentary",
      -  "myth_check",
      -  "story_twist",
      -  "how_it_works"
      -]New value: +[
      +  "mini_documentary",
      +  "myth_check",
      +  "story_twist",
      +  "how_it_works",
      +  "ranking",
      +  "quiz",
      +  "scary_story",
      +  "history_pov",
      +  "reddit_story",
      +  "what_if"
      +]
    • changedInput schema / properties / storyPlan / properties / beats / items / properties / narration / description
      Previous value: -"Spoken line for this beat. Combined beats fill the selected length at about 2.3 words per second."New value: +"Spoken line for this beat. Combined beats fill the selected length at about 2.6 words per second."
    • changedInput schema / properties / storyPlan / properties / format / enum
      Previous value: -[
      -  "mini_documentary",
      -  "myth_check",
      -  "story_twist",
      -  "how_it_works"
      -]New value: +[
      +  "mini_documentary",
      +  "myth_check",
      +  "story_twist",
      +  "how_it_works",
      +  "ranking",
      +  "quiz",
      +  "scary_story",
      +  "history_pov",
      +  "reddit_story",
      +  "what_if"
      +]
    • changedInput schema / properties / topic / description
      Previous value: -"Topic to plan from. Optional when hookTemplateId seeds it. An explicit topic wins over the Opening hooks seed."New value: +"Topic to plan from. Required unless hookTemplateId seeds it or seriesEpisodeId supplies it. An explicit topic wins over either seed."
    • addedInput schema / properties / visualStyle
      Added value: +{
      +  "default": "standard",
      +  "description": "Visual style: standard (judged stock footage, default) or cinematic (every shot is an AI keyframe animated to video). Cinematic is quoted higher and takes a few minutes longer. Not available on the free short. Real people and brands are never AI-generated.",
      +  "enum": [
      +    "standard",
      +    "cinematic"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / voiceCloneId
      Added value: +{
      +  "description": "Optional id of one of your ready cloned voices (list_topic_short_voice_clones). Replaces voice. Paid plans only. Shorts narrated with a clone keep the AI-voice disclosure unless it was turned off when the voice was recorded.",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "topic"
      -]
  2. Changed2 schema fields changed
    • changedInput schema / properties / storyPlan / properties / beats / items / properties / searchTerms / description
      Previous value: -"English Pexels queries for this beat. Keep the topic’s concrete nouns (people, places, sports, objects). Relatable faces, hands, and motion when they belong to that topic — not generic stock abstraction. English only. Put the strongest on-topic visual first (hook beat plays in the first 1.2s). Later terms should be broader on-topic fallbacks (soccer / football / stadium, not cooking or cafe). Generate fail-opens with topic-near sports footage before lifestyle catalog if Pexels misses, and still ships last-resort clips if Pexels is down. Distinct clips per shot and per beat; identical reuse is last resort."New value: +"English Pexels queries for this beat. Name what this narration is saying (people, places, objects, actions), then the topic. Relatable faces, hands, and motion only when they belong to that spoken line — not a reused talking-head or walking-street clip. English only. Put the strongest visual for this line first (hook beat plays in the first 1.2s). Later terms should be broader on-topic fallbacks (soccer / football / stadium, not cooking or cafe). Generate searches this beat’s narration first, then topic-near sports footage, then lifestyle catalog if Pexels misses, and still ships last-resort clips if Pexels is down. Distinct clips per shot and per beat; identical reuse is last resort."
    • changedInput schema / properties / storyPlan / properties / beats / items / properties / searchTerms / items / description
      Previous value: -"One English Pexels query for this beat (people, places, sports, or objects named in the topic)."New value: +"One English Pexels query for this beat (people, places, objects, or actions named in this spoken line)."
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

With annotations only covering readOnly/destructive hints, the description carries the real behavioral load: quota consumption ('this month's generation allowance or complimentary quota'), fail-open stock matching and caption burn (captionBurn.verdict = fallback), 2-minute AI-shot deadlines, narration length never failing generation, and legacy captionMode aliasing. One tension: the description depicts external Pexels/AI interaction while openWorldHint=false, but the write/read/destructive profile is consistent.

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?

Core behavior (generate from plan, auto-plan, source of narration) is front-loaded in the first two sentences and the volume is defensible for a 32-parameter tool. It loses a point because several later sentences restate defaults already carried by the schema (captionStyle='spotlight', transitionMode='dynamic') and repeat the short/long-plan expansion rule.

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

Completeness5/5

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

An output schema exists so return values need no explanation, and the description still covers quota, polling, fail-open paths, and the quote/generate pairing. Nothing an agent needs to invoke this correctly appears missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-tool semantics the schema does not: the shared setup list with quote_topic_short, that hookTemplateId seeds the topic without affecting consume/refund, and that hookTemplateId is a script opening rather than a caption look. These are genuine disambiguations between easily confused parameters.

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?

The opening sentence names a specific verb and resource and states the two accepted inputs (a reviewed storyPlan or auto-planning from topic + storyFormat), which no sibling like quote_topic_short or create_topic_short_story does. An agent can distinguish this as the terminal render step from quote (pricing) and get_topic_short (polling) without opening schemas.

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

Usage Guidelines4/5

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

It routes the agent explicitly: 'Poll get_topic_short' after submitting, reuse 'the same setup as quote_topic_short ... pass the same values on both', and the schema notes quoting first when quoteId is omitted. It never states a when-not case, so it falls short of full alternative/exclusion guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources