Skip to main content
Glama

Compile a reference remake plan

plan_reference_remake

Compile a reference remake into a workflow plan without generating media: lay your script on reference beats, pick templates, captions and sounds, and flag what the plan cannot reproduce.

Instructions

Compile a reference remake into a new workflow plan without paying or starting a run. Free. Pass the reference_profile of the ad to remake, the accepted script (copied unchanged), actor_id, a voice and optional ready ast_* assets. The server lays the script on the reference beats and picks templates, captions and sounds; its warnings name everything the plan does not reproduce. Nothing is generated: make missing media separately with generate_image or generate_video, each with its own quote, and compile again. Then approve, quote and run the plan as any other.

Input Schema

NameRequiredDescriptionDefault
callNoYour call for a reference beat where the presenter listens to a recorded call: the presenter listens, then freezes, while it plays. The reference's own words are never offered; without lines the presenter keeps talking there.
siteNoYour site, for an end card on the closing beat.
voiceNoVoice name from list_voices. Curated presets: sarah | george | eric | daria_ru_female. The API refuses a name list_voices does not return, before any charge. Omitted means the default voice for the actor's gender: the gender of actor_id, actor_gender with image, or george for the default actor and for image without actor_gender. gemini-3.8-flash-tts speaks only its own voices (kind model_voice in list_voices, such as kore): naming one selects that model, and a voice is refused with a tts_model that does not speak it, before any charge. Mutually exclusive with voice_id.
assetsNoYour ready ast_* media, used in order by graphics that need it: a compare takes two images. Nothing is generated.
scriptYesThe accepted narration, copied into the plan unchanged.
messageNo
actor_idYes
audienceNo
voice_idNoRaw vendor voice id (16–32 letters and digits) for a voice outside the catalog. Checked lazily: an unknown id fails the run, not the request. Refused with tts_model=gemini-3.8-flash-tts. Mutually exclusive with voice.
reference_profileYesThe reference_profile analyze_reference returned, or one you wrote to the same schema.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.36.0
    • addedInput schema / properties / reference_profile / properties / beats / items / properties / graphics / items / properties / label_hint / description
      Added value: +"What the vision pass saw on it, in its words, such as \"Blue banner 'DEVELOP THE STORY'\"; empty when it gave none."
    • changedInput schema / properties / reference_profile / properties / beats / items / properties / graphics / items / properties / source_kind / enum
      Previous value: -[
      -  "toggle_checklist",
      -  "phone_call",
      -  "notification",
      -  "before_after_split",
      -  "split_screen",
      -  "stat",
      -  "product_ui",
      -  "screenshot",
      -  "title_card",
      -  "end_card",
      -  "particles",
      -  "tag",
      -  "lower_third",
      -  "quote",
      -  "callout",
      -  "checklist",
      -  "compare",
      -  "progress",
      -  "rating",
      -  "overlay_media",
      -  "insert_media",
      -  "layout_split",
      -  "unmapped",
      -  "other"
      -]New value: +[
      +  "toggle_checklist",
      +  "phone_call",
      +  "notification",
      +  "before_after_split",
      +  "split_screen",
      +  "stat",
      +  "product_ui",
      +  "screenshot",
      +  "title_card",
      +  "end_card",
      +  "particles",
      +  "banner",
      +  "logo_card",
      +  "comment_box",
      +  "price_card",
      +  "concept_card",
      +  "tag",
      +  "lower_third",
      +  "quote",
      +  "callout",
      +  "checklist",
      +  "compare",
      +  "progress",
      +  "rating",
      +  "overlay_media",
      +  "insert_media",
      +  "layout_split",
      +  "unmapped",
      +  "other"
      +]
    • addedInput schema / properties / reference_profile / properties / beats / items / properties / spoken_summary / description
      Added value: +"The words spoken in the beat, cut at 200 characters; empty when none were heard."
    • addedInput schema / properties / reference_profile / properties / hook
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "caption": {
      +      "description": "The first on-screen caption line the vision pass read inside the hook's window.",
      +      "maxLength": 120,
      +      "type": "string"
      +    },
      +    "end_s": {
      +      "description": "Where the hook's last word ends, else where its window does.",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "text": {
      +      "description": "The words that start in the first 3 s, through the end of their sentence (no word starting past 6 s); empty when none do.",
      +      "maxLength": 200,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "text",
      +    "end_s"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / reference_profile / properties / staging / properties / elements / items / properties / kind / enum
      Previous value: -[
      -  "toggle_checklist",
      -  "phone_call",
      -  "notification",
      -  "before_after_split",
      -  "split_screen",
      -  "stat",
      -  "product_ui",
      -  "screenshot",
      -  "title_card",
      -  "end_card",
      -  "particles",
      -  "tag",
      -  "lower_third",
      -  "quote",
      -  "callout",
      -  "checklist",
      -  "compare",
      -  "progress",
      -  "rating",
      -  "overlay_media",
      -  "insert_media",
      -  "layout_split",
      -  "unmapped",
      -  "other"
      -]New value: +[
      +  "toggle_checklist",
      +  "phone_call",
      +  "notification",
      +  "before_after_split",
      +  "split_screen",
      +  "stat",
      +  "product_ui",
      +  "screenshot",
      +  "title_card",
      +  "end_card",
      +  "particles",
      +  "banner",
      +  "logo_card",
      +  "comment_box",
      +  "price_card",
      +  "concept_card",
      +  "tag",
      +  "lower_third",
      +  "quote",
      +  "callout",
      +  "checklist",
      +  "compare",
      +  "progress",
      +  "rating",
      +  "overlay_media",
      +  "insert_media",
      +  "layout_split",
      +  "unmapped",
      +  "other"
      +]
    • addedInput schema / properties / reference_profile / properties / transcript
      Added value: +{
      +  "description": "The reference's speech as timed words, in order.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "end_s": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "speaker": {
      +        "description": "The transcription's speaker label, such as speaker_0; absent when it gave none.",
      +        "maxLength": 40,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "start_s": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "text": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text",
      +      "start_s",
      +      "end_s"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 1000,
      +  "type": "array"
      +}
    • changedInput schema / properties / voice / description
      Previous value: -"Voice name from list_voices. Curated presets: owner_ru_clone | sarah | george | eric | daria_ru_female (owner_ru_clone is the Russian cloned voice). The API refuses a name list_voices does not return, before any charge. Omitted means the default voice for the actor's gender: the gender of actor_id, actor_gender with image, or george for the default actor and for image without actor_gender. gemini-3.8-flash-tts speaks only its own voices (kind model_voice in list_voices, such as kore): naming one selects that model, and a voice is refused with a tts_model that does not speak it, before any charge. Mutually exclusive with voice_id."New value: +"Voice name from list_voices. Curated presets: sarah | george | eric | daria_ru_female. The API refuses a name list_voices does not return, before any charge. Omitted means the default voice for the actor's gender: the gender of actor_id, actor_gender with image, or george for the default actor and for image without actor_gender. gemini-3.8-flash-tts speaks only its own voices (kind model_voice in list_voices, such as kore): naming one selects that model, and a voice is refused with a tts_model that does not speak it, before any charge. Mutually exclusive with voice_id."
  2. Addedv0.35.0

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=false; the description goes well beyond that by disclosing that the call is free, starts no run, copies the script unchanged, and that the server auto-assigns templates, captions and sounds. It also explains that warnings enumerate everything the plan fails to reproduce — exactly the kind of behavioral disclosure an agent needs before invoking a mutating-but-non-destructive tool.

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?

The cost/no-run guarantee is front-loaded in the first two sentences, and the rest follows a logical order: inputs, what the server does, what it does not do, then next steps. A few clauses are slightly redundant ('Nothing is generated' partially echoes 'without paying or starting a run'), but no sentence is wasted.

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 tool with a very large nested schema and no output schema, the description covers the whole workflow: inputs, server behavior, warnings, missing-media handling, and the approve/quote/run handoff. It does not describe what the returned plan object contains or how to retrieve it afterward, which is the one remaining gap for a compile-and-return tool.

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?

With 70% schema coverage, the description adds real meaning for several parameters: the script is 'copied unchanged,' assets must be 'ready ast_*' and are consumed in order, and voice selection interacts with actor gender. It stays silent on call, site, message, audience and voice_id, several of which carry only thin or no schema descriptions, so it does not fully close the coverage gap.

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

Purpose4/5

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

States a specific verb and resource: 'Compile a reference remake into a new workflow plan,' with the key scoping detail that no run is started and nothing is charged. It implicitly separates itself from the generic prepare_workflow_plan by tying the output to a reference_profile, but it never names that sibling, so the differentiation is left partly to inference.

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?

Gives a clear trigger (you have a reference_profile and an accepted script) and explicit routing for the gap case: 'make missing media separately with generate_image or generate_video, each with its own quote, and compile again.' It also lays out the downstream sequence (approve, quote, run). What it lacks is an explicit 'do not use this when...' against prepare_workflow_plan for non-remake work.

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