Skip to main content
Glama

Server Details

Edit videos with AI: cuts, captions, B-roll and motion in a style you pick or copy from any video.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 45 tools

Disambiguation3/5

Core creation tools (create_video, create_videos, edit_video, revise_video) and direct-edit tools (set_element_*, set_scene_*, remove_* variants) overlap in purpose, though descriptions explicitly distinguish faceless vs own-footage vs word-level revision vs exact canvas edits. An agent can usually choose correctly, but adjacent options like cut_video_words vs remove_scene_layer and fix_captions vs set_caption_style invite misselection.

Naming Consistency5/5

Names are consistently verb_noun in snake_case (create_video, get_project_context, set_scene_text, remove_video_overlay), with only natural intransitive exceptions remember/forget. The singular/plural create_video/create_videos pair is predictable.

Tool Count2/5

45 tools is far above the 3-15 well-scoped range and at the 25+ 'too many' threshold, even for a complex video platform. The direct-edit and scene-control tools substantially inflate the surface.

Completeness3/5

The video creation/editing surface is broad, covering faceless creation, own-footage editing, revisions, direct canvas edits, captions, styles, assets, memory and versions. However, the content-plan/publishing lifecycle has obvious dead ends: descriptions reference approve_plan, schedule_plan and update_post, but those tools are absent, and there is no explicit publish/post tool.

Available Tools

45 tools
add_sceneAdd a sceneA
DestructiveIdempotent
Inspect

Insert one scene using the supported scene shape returned by get_project_context; after null inserts it at the start. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
afterYesThe scene it follows; null for the start.
sceneYesThe new scene, shaped like the others.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Adds real context beyond annotations: saves a playable project, unsupported changes refuse without rebuilding, retries must reuse operation_id and exact inputs, consumes the account's direct-edit allowance, and is free of credits. It doesn't spell out what state is overwritten or what the destructive mutation affects, which would complete the picture for a destructiveHint=true 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?

Front-loaded and dense with useful facts; most clauses earn their place. The semicolon-chained phrasing and 'Cost: Free: no credits' are slightly awkward, but nothing is padding.

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?

Given an output schema exists, return values needn't be described. For a destructive, versioned mutation it covers prerequisites, failure mode, retry behavior, and billing. It leaves the direct-edit allowance's limits and the precise 'unsupported changes' condition implicit.

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. The description still adds value by naming the source of the scene shape (get_project_context), specifying which output_id and base_version to pass, and reinforcing retry semantics for operation_id.

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+resource ('Insert one scene') and a concrete placement rule ('after null inserts it at the start'), which separates it from move_scene, remove_scene, and replace_scene_screen. An agent can identify the operation 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 Guidelines4/5

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

Explicit prerequisites: 'Read get_project_context first and pass its base_version and selected output_id', and it routes file generation to 'check_video with_download'. It doesn't explicitly say when to prefer siblings like replace_scene_screen or how it differs from move_scene, but the workflow context is strong.

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

adjust_styleChange a styleA
DestructiveIdempotent
Inspect

Change one of the linked account's saved styles in plain words, for example 'bigger yellow captions, no zooms' or 'open on the strongest line'. Saves it as the style's next version; every later video in that style follows it, and earlier versions are kept. Preserve operation_id on retries.

NameRequiredDescriptionDefault
changeYes
style_idYes
operation_idYesA stable ID for this authorized request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true; the description resolves the apparent tension by explaining that the change is versioned ('saves it as the style's next version... earlier versions are kept'), which is exactly the context annotations cannot carry. The retry guidance reinforces idempotency but largely repeats the operation_id schema text.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what the tool does, then side effects, then the retry rule. No filler and every clause carries operative information.

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?

An output schema exists and annotations cover the safety profile, so the description only needs to supply the versioning model and retry discipline, which it does. Minor gaps remain around failure behavior (e.g., what happens if the plain-words request is ambiguous) and the role of style_id.

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 only 33%, with operation_id the sole documented field, so the description must compensate for `change` — and it does, specifying that the value is free-form natural language with worked examples. `style_id` is only implied by 'one of the linked account's saved styles' and never gets explicit semantics, which keeps it off a 5.

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 ('Change one of the linked account's saved styles') and narrows the input modality to plain words, which separates it from set_caption_style, copy_style, and browse_styles. The examples ('bigger yellow captions, no zooms') make the operation concrete rather than abstract.

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

Usage Guidelines3/5

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

The example phrasings imply what kind of request belongs here, and 'every later video in that style follows it' signals the scope of effect. But no sibling is named and no when-not-to-use guidance is given, so the agent must infer how this differs from set_caption_style or edit_video.

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

browse_stylesBrowse editing stylesA
Read-onlyIdempotent
Inspect

Show ready styles/copies with content format (faceless/motion/talking), frame formats, jobs, best_for, actual inputs and saved style_version when available. Motion is faceless type/music with inputs.voice:none by default; an explicit voiceover request overrides that default while keeping the visual style and aligns visuals to the recorded speech. Narrated faceless styles use inputs.voice:narrator. Also returns all 21 narrator descriptions, accent/tags and public audition URLs; use catalog names in create_video voice. Recommend suitable returned styles, never invent private IDs. Listen/show auditions before selecting an undecided voice.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
stylesNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
narratorsNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds non-obvious behavioral semantics: motion defaults to inputs.voice:none, an explicit voiceover overrides that while preserving the visual style and aligning visuals to speech, and narrated faceless styles use inputs.voice:narrator. That is meaningful default/override disclosure beyond the structured annotations, though return-format expectations remain thin.

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 purpose is front-loaded in the first clause, and the dense semicolon-separated clauses each carry content (format types, voice defaults, narrator catalog, audition guidance). It is information-heavy for a simple listing tool, but no sentence is pure filler.

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 no-parameter read tool with an output schema, the description is complete enough: it explains what is returned in categorical terms, the voice/default behavior, and how to act on auditions. Some enumerated return fields partially duplicate the output schema, but the behavioral rules (motion voiceover override, narrator voice) are what the schema would not convey.

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?

The tool takes zero parameters (additionalProperties: false), so there are no parameter semantics to explain; baseline 4 applies. The description instead documents referenced fields of returned styles (voice, style_version), which is relevant context rather than parameter guidance.

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?

The description opens with a specific verb+resource ('Show ready styles/copies') and enumerates what the listing contains: content format, frame formats, jobs, best_for, inputs, style_version, plus narrator descriptions and audition URLs. It is clearly a read/discovery tool, but it never names or distinguishes itself from siblings like adjust_style, copy_style, or apply_edits, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

It offers workflow guidance ('Recommend suitable returned styles, never invent private IDs', 'Listen/show auditions before selecting an undecided voice') that shapes downstream behavior, which is genuinely useful. However, it gives no explicit when-to-use/when-not-to-use framing against the sibling style tools, so usage is only implied.

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

check_videoCheck a videoA
Read-onlyIdempotent
Inspect

Check a video and show it. While the upload or the edit is still running, this waits for news before answering (up to 20 seconds; 50 in Claude), so call it again right away only if the user is waiting; the video card updates itself. state is waiting (give the user the upload link), uploading, editing, ready, draft (a rough cut, not the finished edit: say so and offer next_step) or failed (say problem and next_step). It also says when the length differs from the length asked. Download links are made only when asked: with_download: true (when the user wants the file).

NameRequiredDescriptionDefault
waitNoThe video card's own refresh sends false to answer at once. Leave it out: waiting for news is what keeps a check from being wasted.
job_idNoThe job_id revise_video returned for a change by typing: also reports that change (its steps so far, then its reply, whether it changed anything, and anything it could not do).
video_idNo
import_idNo
output_idNo
with_downloadNotrue: also make a 15-minute download link (only when the user wants the file).

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
readyNo
stateNo
changeNo
statusNo
dry_runNo
messageNo
outputsNo
plan_idNo
durationNo
playableNo
progressNo
style_idNo
video_idNo
availableNo
import_idNo
narrationNo
output_idNo
studio_urlNo
version_idNo
downloadableNo
download_page_urlNo
previous_version_idNo
revision_in_progressNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: the blocking wait duration and its platform variance, the self-refreshing card that makes re-polling wasteful, and that download link creation is opt-in via with_download. No behavior contradicts the annotations.

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?

Purpose and the key waiting behavior are front-loaded, and nearly every clause carries operational meaning. It is parenthetical-heavy and rambles in the middle, so it is dense rather than wasteful but not maximally tight.

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

Completeness3/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-shape explanation is unnecessary, and the description fully covers states and download behavior. However, with six optional parameters and no required fields, the description never resolves which of video_id/import_id/output_id to pass, leaving real ambiguity for an agent assembling the call.

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 coverage is 50%; the description does explain job_id's role (revise_video's change report) and with_download's side effect, matching the schema-documented params. But video_id, import_id, and output_id are bare strings in both schema and description with no indication of which identifier to supply in which situation.

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 ("Check a video and show it") and enumerates the state machine it surfaces (waiting, uploading, editing, ready, draft, failed). It is clearly a status/polling tool, though it never names which sibling it replaces (e.g. list_videos, get_video_activity) so an agent must still infer differentiation.

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?

Explicit when-to-call guidance: it waits up to 20s (50 in Claude) so only re-call right away if the user is waiting, and the card self-updates. It also prescribes per-state actions (draft: say it's a rough cut and offer next_step; failed: state the problem and next_step) and the condition for with_download (only when the user wants the file).

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

copy_styleMake an editing styleA
DestructiveIdempotent
Inspect

Build a reusable editing style from one reference video shared by link or file. mode clone (the default) is the deep copy: it measures the reference and writes its own captions and motion; the linked account includes style copies every month at no credit cost, and once they are used each costs 100 credits. mode match is the fast copy: it maps the reference onto Clypmint's own devices in a few minutes, is included for every account and is approximate. A copy that is still working or has stopped shows in browse_styles (with its time left, or why it stopped and how to try again). dry_run: true answers whether this one is included (and how many are left) or what it costs, and starts nothing.

NameRequiredDescriptionDefault
modeNoclone (default): deep, copies the reference's own motion and captions; slower; uses a monthly style copy, then credits. match: fast and approximate; included for every account.
nameNo
formatNo
dry_runNotrue: answer the cost and start nothing.
referenceNo
operation_idNoA stable ID for this authorized request. Preserve it on retries. Use a new ID only for a deliberate new request.
reference_urlNo

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, yet the description still adds meaningful behavior: credit economics (monthly included copies, then 100 credits each), rough timing for match (a few minutes), the approximate-vs-deep fidelity difference, and that in-progress/failed copies surface in browse_styles with remaining time or a stop reason. It does not explain what the destructiveHint implies (e.g., whether an existing style is overwritten), which is the one notable gap.

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 lead sentence front-loads purpose, and the mode/cost/dry_run sentences each carry distinct information. It is somewhat dense with colon-chained clauses, and the mode economics partially repeat the enum description in the schema, but there is little outright filler.

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?

With an output schema present, return values need no explanation, and the description covers the operationally critical facts: mode selection, cost and inclusion rules, dry-run behavior, and where to check status. It is slightly incomplete on the undocumented name/format parameters and on the destructive semantics flagged by annotations.

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 only 43%, and the description compensates well for mode (elaborating depth, cost, and inclusion beyond the enum doc) and dry_run, plus confirming reference can come as link or file. It says nothing about name, format (talking/faceless/motion), or reference_url, so several parameters remain undocumented across both the schema and the description.

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?

"Build a reusable editing style from one reference video shared by link or file" gives a specific verb (build), a specific resource (reusable editing style), and the required input source (reference video via link or file). It also differentiates from the sibling browse_styles by positioning that tool as where in-progress/failed copies are tracked.

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?

The clone-vs-match tradeoff is spelled out with concrete conditions: clone is the deep default that consumes a monthly style copy then 100 credits each, match is fast, approximate, and included for all accounts, and dry_run answers cost/eligibility without starting anything. What's missing is routing guidance against siblings like adjust_style or apply_edits, so the agent knows when this tool is the right entry point versus modifying an existing style.

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

create_videoMake a faceless videoA
DestructiveIdempotent
Inspect

Make a faceless video without filming or uploading footage. Supply exactly one of idea (Clypmint writes the narration) or script (spoken exactly as supplied). Defaults to a 30-second vertical video; seconds may be 15, 30 or 60. An exact script sets its own length at about 2.5 words a second (at most 172 words for 60 s); leave seconds out with a script and the shortest length that fits is used, and a script too long is refused at once with the word count. Uses the selected style’s pictures, designed screens, captions and sound, with the linked account’s existing credits and limits. Style: inspect browse_styles and its actual inputs. Serif Editorial Launch is format: motion with inputs.voice:none by default; Bold Navy Statement is narrated faceless with Chris as its style default. An explicit voiceover request adds narration to motion while keeping its visuals and aligning them to the recorded speech. Other faceless styles or ready saved copies remain available. A style marked format: talking is made for someone on camera. Optional: style_id (with style_version for a saved style of your own), formats (9:16, 16:9, 1:1, 4:5; first is the main one), voice (one of 21 narrators by name; omitted, preserve the style’s voice default, including none for motion; "Voice: " in instructions works too), sound_effects (on unless false), music_bed (the style’s music under the voice, only when true), purpose, instructions up to 8,000 characters, asset_ids from list_assets, asset_staging_keys from import_asset (logo: true for the brand’s logo), and music_staging_key from import_asset. Cost: 3 credits to make, plus 1 for each started minute of voice-over and 1 for each started minute of finished video after the first, plus 2 for each extra format; dry_run: true answers the cost and starts nothing. For several videos at once use create_videos; for a month of posts use plan_content. Return the studio_url and call check_video with video_id for progress and the finished download. Preserve operation_id and arguments on retries; never publish unless separately requested.

NameRequiredDescriptionDefault
ideaNo
titleNo
voiceNoThe narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. "Voice: <name>" in instructions does the same.
formatNovertical
scriptNo
dry_runNotrue: answer the credit cost and start nothing.
formatsNoEvery shape to make, the main one first: 9:16, 16:9, 1:1, 4:5.
purposeNoorganic (a post), ad (three openings by default), youtube (horizontal), sales_page.
secondsNoHow long: 15, 30 or 60. With a script, leave it out: the script sets the length (about 2.5 words a second; at most 43 words for 15, 86 for 30, 172 for 60).
style_idNo
asset_idsNo
music_bedNotrue: lay the style's own music bed under the narration (none unless asked); false: never. music_staging_key brings a song of your own instead.
instructionsNoAnything else the user asked for, in their own words: where each picture goes, the tone. Length, narrator, pictures and shapes go in their own fields. No rule lists. A link written here is not opened: import a picture first with import_asset.
operation_idYes
sound_effectsNo
style_versionNo
music_staging_keyNoA song from import_asset (mp3, wav or m4a) to lay under the voice.
asset_staging_keysNoPictures the user wants shown (a portrait, a product shot, an app screen): import each with import_asset (its url) and list the keys here.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover mutation, idempotency, and destructiveness, but the description adds substantial behavioral context: exact credit costs, dry_run behavior, script-length refusal rules, voiceover alignment behavior, style format constraints, and retry guidance preserving operation_id.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is an extremely dense run-on paragraph. Many details are necessary for 18 parameters, yet the lack of structure and sentence economy makes it harder to scan than it should be.

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?

Given the 18-parameter complexity, 50% schema description coverage, and the existence of an output schema, the description supplies nearly all missing decision context. It covers creation semantics, cost, retries, output handling, and publishing constraints.

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

Parameters5/5

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

Schema coverage is only 50%, but the description compensates heavily: exactly one of idea or script, script length implied by seconds, style_id plus style_version for saved styles, voice defaults including none for motion, music_bed only when true, and staging-key usage for imported assets.

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 description states a specific verb and resource: make a faceless video without filming or uploading footage. It distinguishes itself from siblings by naming create_videos for multiple videos, plan_content for monthly posts, browse_styles for style inspection, and check_video for progress.

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?

It explicitly routes the agent: use create_videos for several videos at once and plan_content for a month of posts. It explains dry_run as a cost-answer mode that starts nothing, and directs agents to check_video for progress and downloads.

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

create_videosMake several faceless videosA
DestructiveIdempotent
Inspect

Make up to 10 faceless videos in one call (more: batches of 10; a month of posts is plan_content), each from an idea or an exact script, with shared defaults (seconds, style_id, formats, voice: matilda/sarah/jessica/alice/liam/chris/brian/george/roger/laura/charlie/river/will/eric/bella/daniel/lily/bill/adam/callum/harry, sound_effects). Every item is checked before any starts; each is idempotent on its own operation id (operation_id.N), so a retry never makes doubles. Each video costs 3 credits to make, plus 1 for each started minute of voice-over and 1 for each started minute of finished video after the first, plus 2 for each extra format; dry_run: true answers the total and starts nothing. Returns the video ids; check each with check_video, then schedule_plan. Cost: About 4 credits per 30-second video (3 credits to make, plus 1 for each started minute of voice-over and 1 for each started minute of finished video after the first, plus 2 for each extra format).

NameRequiredDescriptionDefault
itemsYesUp to 10 videos, each with exactly one of idea or script.
dry_runNotrue: answer the credit cost and start nothing.
defaultsNoSettings every item gets unless it says otherwise.
operation_idYesA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
itemsNo
stateNo
statusNo
videosNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructive=true and idempotent=true, and the description adds real context: every item is validated before any rendering starts, retries are safe because each item is keyed on operation_id.N, and dry_run returns cost without starting work. The only shortfall is that it never says what makes this destructive or how partial failures are reported, though it does say validation happens up front.

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

Conciseness3/5

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

Front-loaded with the batch limit and routing, which is good, but the pricing is stated twice in near-identical wording, padding the definition. The long inline voice list also bloats a sentence that the schema already documents.

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?

For a nested, 4-parameter batch mutation with an output schema and annotations, the description covers the cap, the per-item idea-or-script requirement, shared defaults, idempotency, dry-run, cost, and the next steps. An agent has everything needed to call it correctly and interpret the result.

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 baseline is 3, but the description adds meaning beyond the schema: it lists the shared defaults by name (seconds, style_id, formats, voice, sound_effects), enumerates the voice options, and ties seconds and extra formats to cost impact. It still leaves asset_ids, style_version and music_staging_key unexplained.

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 ('make up to 10 faceless videos in one call') and distinguishes itself from singular create_video and from plan_content for a month of posts. An agent can route between batch, single, and planning tools without opening a 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?

Explicit routing rules: more than 10 videos means batches of 10, a month of posts means plan_content, and the follow-up path is check_video then schedule_plan. It also names the dry_run condition for price checking before committing.

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

cut_video_wordsCut footage by wordsA
DestructiveIdempotent
Inspect

Remove footage time for the inclusive transcript word range. This removes speech, unlike removing a graphic layer. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
wordsYes[first, last] word numbers from the transcript in get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations declare destructive/idempotent/not-readOnly, and the description adds genuinely new behavior: it saves a playable project rather than producing a file, unsupported changes are refused without rebuilding, the operation consumes the account's direct-edit allowance, and operation_id must be preserved on retries. These are exactly the traits an agent needs before calling a destructive mutation.

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-loads the action and scope, then prerequisite, side effects, retry, and cost in short sentences with no obvious filler. The telegraphic style ('Cost: Free: no credits') is slightly clipped but still efficient.

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?

Output schema exists and annotations cover the safety profile, so the description only needs to cover prerequisites, side effects, retry/idempotency, and cost – all of which it does. A destructive mutation with a required sequencing dependency is fully explained.

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 the schema already documents words, video_id, output_id, base_version, and operation_id. The description adds only the sourcing hint that base_version and output_id come from get_project_context; with the schema doing the heavy lifting, baseline 3 is appropriate.

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 ('Remove footage time for the inclusive transcript word range') and explicitly distinguishes it from the nearby layer-removal operation ('This removes speech, unlike removing a graphic layer'). An agent can tell what it does and what it is not 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 Guidelines4/5

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

Gives a concrete prerequisite sequence ('Read get_project_context first and pass its base_version and selected output_id') and routes file retrieval to a sibling ('request a file separately with check_video with_download'). It lacks an explicit statement of when not to use it versus the layer/scene removal siblings beyond the speech distinction, so not quite a 5.

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

edit_content_planChange ideas in a content calendarA
DestructiveIdempotent
Inspect

Change ideas by number (n) before they are made or posted: title, hook, script, caption, hashtags, posting time, platforms, or removed: true to drop one (false puts it back). Words cannot change once an idea is being made; a scheduled post changes with update_post. Free. Cost: Free: no credits.

NameRequiredDescriptionDefault
itemsYes
plan_idYes

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
itemsNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, and the description usefully adds that removal is reversible and that text is locked once an idea enters production. However, the trailing 'Free. Cost: Free: no credits' is repetitive boilerplate, and it never clarifies what exactly gets replaced on a partial update.

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 critical constraint (editable before production) is front-loaded and the field list is compact. The final 'Free. Cost: Free: no credits' clause is redundant filler that weakens an otherwise dense sentence.

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

Completeness3/5

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

An output schema exists and the annotations cover the safety profile, so the description need not explain returns. But for a destructive mutation it never says whether omitted fields are preserved or cleared, which 'words' are locked once production starts, or what plan_id must reference — gaps an agent needs resolved before calling.

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 only 0% schema description coverage, the description carries the burden well: it explains that 'n' is the idea number and maps the editable fields to title, hook, script, caption, hashtags, post_at and platforms, plus the true/false semantics of 'removed'. It adds nothing about plan_id, and the value constraints (max 31 items, 10 hashtags, 3 platforms) are left entirely to the schema.

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?

A specific verb plus resource ('Change ideas by number') with an explicit list of the fields that can be edited. It also draws a boundary against the sibling update_post for already-scheduled posts, so an agent can identify the right tool 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?

States the precondition 'before they are made or posted' and names the alternative path explicitly ('a scheduled post changes with update_post'). It also gives the when-to-use rule for removal versus restoration ('true to drop one, false puts it back'), leaving nothing to inference.

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

edit_videoEdit a videoA
DestructiveIdempotent
Inspect

Edit the user's own footage into a finished video. Put what they asked for into the fields, never into prose rules: kind (montage: pictures and music lead, e.g. sport, travel, events; talking: someone speaks), length ({min_seconds, max_seconds} for "45-60 s"), style_id (read browse_styles once first: a saved style of theirs (own: true) that fits the request is the one to use), music_staging_key (a song from import_asset) or song_upload: true (they have a song file but no link: the upload link takes it too), camera_sound, formats (only when they asked for a shape; otherwise the video keeps its own and nothing is cropped). instructions holds only anything else they asked for, in their own words. Clypmint watches the footage itself: do not describe the footage, write rules or ask the user how to edit. In ChatGPT attach the video as video. Otherwise leave it out: the answer has a private upload link (15 minutes) to give the user, and editing starts when the video lands. One upload per video: to change the length, song, cut or shape of a video already made, use revise_video or a direct edit tool on that video (a shape is one set_output_frame call), never a new upload; a separate new edit of the same footage is footage_from: that video_id. Like another video? reference_url (+ reference_mode clone or match) copies that video's style beside the upload, saves it to the user's styles, and the edit waits for it; leave style_id out. No footage (an idea or a script)? Use create_video. Also: purpose (organic, ad, youtube, sales_page), hooks 1-3 (an ad's openings), shorts 0-10 or 'all', clips (a long recording cut into clips alone), speaker_name, names, spellings, sound_effects, asset_ids, source_url (a public link where links are open). Cost: 3 credits to make, plus 1 for each started minute of footage and 1 for each started minute of finished video after the first, plus 2 for each extra hook, length or format and 2 for each clip; dry_run: true answers the cost and starts nothing. Preserve operation_id on retries.

NameRequiredDescriptionDefault
kindNotalking: someone speaks and their words lead the cut (talking head, interview, podcast, tutorial). montage: the pictures and the music lead (sport, action, travel, events, scenery, b-roll); what people say is not followed. Leave out when unsure: Clypmint decides from the footage.
clipsNoClips alone from one recording (no main film): podcasts, streams, long talks.
hooksNoOpenings to make (1-3): an ad gets 3 by default, the main cut counting as one.
namesNoExact person, company and product names to spell correctly in this video; not a lasting account rule.
titleNo
videoNoThe attached video file (ChatGPT). Leave out to get a private upload link instead.
voiceNoThe narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. "Voice: <name>" in instructions does the same.
formatNoThe older one-shape switch; formats says more.
lengthNoHow long the finished video should be. "45-60 s" is {min_seconds: 45, max_seconds: 60}; "under a minute" is {max_seconds: 60}; "about 30 s" is {min_seconds: 25, max_seconds: 35}. Leave out when the user named no length.
shortsNoShorts to cut from the recording too (0-10), or 'all' the good ones.
dry_runNotrue: answer the credit cost and start nothing.
formatsNoOnly when the user asked for a shape: vertical, TikTok, Reels or Shorts is 9:16; square is 1:1; 4:5; YouTube or widescreen is 16:9. Every shape to make, the main one first. Leave it out otherwise: the video keeps its own shape and nothing is cropped.
purposeNoorganic (a post), ad (three openings by default), youtube (horizontal), sales_page.
style_idNoA style id from browse_styles, e.g. serif-editorial-launch, bold-navy-statement, crimson-serif-explainer, warm, luxe, brand, or a saved style of your own (my-...).
asset_idsNo
spellingsNoExplicit heard-to-correct spelling pairs for this video, for example {"KMAC":"KMAK"}.
source_urlNoA public https link to the footage (where links are open), instead of a file.
song_uploadNotrue when the user has a song file but no public link to it (a song attached in Claude, a file on their computer): the private upload link asks for the video and the song together. Leave out when music_staging_key is set.
camera_soundNoThe footage's own sound. mute: only the song plays (the default for a montage with a song). keep: the camera sound stays (the default otherwise).
footage_fromNoThe video_id of a video already made from this footage: a new edit of the same footage with no new upload (another kind, length or style). To change that video itself, use revise_video or apply_edits instead.
instructionsNoAnything else the user asked for, in their own words, usually one or two sentences. Length, kind, song, style and formats go in their own fields, not here. Clypmint watches the footage itself: do not describe the footage, write rules or explain how to edit. Kept in full.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.
speaker_nameNoWho is talking, spelled right, e.g. "Dr. Ana Ruiz".
reference_urlNoA video to make this edit LIKE (a public https link from Instagram, TikTok, X, Facebook, Loom or LinkedIn): Clypmint copies its style beside the upload, saves it to the user's styles, and the edit waits for it. Use it when the user says "like this one"; leave style_id out. reference_mode picks how.
sound_effectsNotrue: sound effects on the edit.
style_versionNo
reference_modeNoHow to copy reference_url. clone (the default): deep, copies the reference's own motion and captions; slower, uses one of the monthly style copies, then credits. match: fast and approximate, included.
speaker_companyNoThe speaker's company or business, spelled exactly for this video.
music_staging_keyNoThe song for this video, from import_asset (mp3, wav or m4a): a montage's soundtrack, or music under the speech.
asset_staging_keysNo
source_duration_secondsNo

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, the description discloses credit costs, dry_run behavior, the 15-minute private upload link, that editing starts when the video lands, one upload per video, and that operation_id must be preserved on retries. These details materially inform an agent about side effects and operational constraints.

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 description is front-loaded with the core action and field-mapping rules, and most clauses carry useful routing or operational information. It is nonetheless a dense single paragraph with some overlap against schema descriptions, which slightly reduces scanability despite the complexity warranting detail.

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?

For a 31-parameter mutation tool with an output schema, the description covers the essential workflow, alternatives, upload handling, cost, dry_run, retries, references, and style selection. Combined with the rich schema and annotations, an agent has enough context to invoke it correctly.

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 description coverage is already high at 84%, so the schema carries much of the parameter burden. The description still adds valuable cross-parameter guidance: mapping user requests to kind, length, style_id, music staging, formats, instructions, purpose, hooks, shorts, clips, reference_url, and cost-related dry_run behavior.

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 description states a specific verb and resource: editing the user's own footage into a finished video. It explicitly distinguishes this from create_video when there is no footage, from revise_video for changes to an already-made video, and from footage_from for a separate new edit of the same footage.

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?

It gives explicit routing rules: use browse_styles once before choosing style_id, use import_asset for songs, use create_video for an idea or script, use revise_video or direct edit tools for changes to an existing video, and use reference_url for 'like this one'. It also explains when to omit style_id when reference_url is set.

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

fix_captionsFix captionsA
DestructiveIdempotent
Inspect

Fix caption words or the key-word colour of a finished video, without a new edit; timing never moves. Either rewrite lines (from, to, text from get_project_context captions) or swap words everywhere with replace: [{ heard, spelled }] (brand names, people). To remember a spelling for future videos, use remember when available. Each spoken word keeps a caption word, so a 2-word name cannot become 1 word here: use remember plus revise_video. Free; 5 a day per video. Cost: Free: no credits.

NameRequiredDescriptionDefault
colorNoThe key words' colour.
linesNoThe caption lines to rewrite, from get_project_context captions (from, to, text).
replaceNoSwap words everywhere they appear, e.g. a brand name: [{ heard: "Clip Mint", spelled: "ClipMint" }].
video_idYesThe video id from list_videos.
base_versionNo
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint/idempotentHint annotations, the description discloses a non-obvious invariant ("Each spoken word keeps a caption word"), a quota ("5 a day per video"), and cost ("Free: no credits"). The timing-never-moves guarantee also clarifies what destructiveHint actually touches here — the words/colour, not the timeline.

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-loads the core action and constraint, then routes to alternatives in a compact run of sentences. The trailing "Cost: Free: no credits." largely restates the earlier "Free; 5 a day per video" and could be dropped without loss.

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?

With an output schema present and annotations covering safety, the description supplies what structured fields can't: the fixed-timing invariant, quota, cost and the remember/revise_video fallback. The only unhinted parameter is base_version, whose role in conflict handling an agent must infer.

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?

Adds real meaning over an already 83%-covered schema: lines are sourced from get_project_context captions and carry from/to/text, and replace is explained as a global word swap with a concrete brand-name example ("Clip Mint" → "ClipMint"). color, base_version and operation_id get no prose, so it stops short of full coverage.

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 ("Fix caption words or the key-word colour of a finished video") plus a hard scope boundary — "without a new edit; timing never moves" — that separates it from revise_video and edit_video. An agent can pick this over siblings without opening any 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?

Gives explicit routing: rewrite lines pulled from get_project_context captions, or use replace for brand names/people. It also names the escape hatch for cases this tool can't handle ("a 2-word name cannot become 1 word here: use remember plus revise_video"), which is exactly the when-not guidance most definitions omit.

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

forgetForget a preferenceA
DestructiveIdempotent
Inspect

Forget one remembered preference by its id from list_memory. Later videos leave it out. Cost: Free: no credits.

NameRequiredDescriptionDefault
memory_idYesAn id from list_memory.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: the downstream effect ('Later videos leave it out') and the cost ('Free: no credits'). It does not state whether the removal is recoverable, but the added effect and pricing info go beyond the structured fields.

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

Conciseness5/5

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

Three short sentences with zero waste; the core action and its id source are front-loaded, with effect and cost as supporting detail. Nothing could be removed without losing information.

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?

An output schema exists, so return values need not be explained, and the destructive idempotent nature is covered by annotations. What remains thin is the absence of any irreversibility or recovery note for a destructive operation, though the coverage is otherwise adequate for a one-parameter 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% and the single memory_id parameter is fully documented in the schema with a reference to list_memory. The description mentions the same source but adds no format or syntax detail beyond it, so the baseline 3 applies.

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 (forget) and a precisely scoped resource (one remembered preference by its id from list_memory), which cleanly distinguishes it from the sibling remember (adds a preference) and list_memory (enumerates ids). It stops short of naming remember as the inverse operation, but the resource is unambiguous.

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

Usage Guidelines3/5

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

The phrase 'by its id from list_memory' implicitly tells the agent to source the id from the sibling list_memory tool first, which is useful routing. However there is no explicit when-to-use or when-not-to-use guidance (e.g., preferring disable over delete, or that this is irreversible).

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

get_account_identityIdentify the connected accountA
Read-onlyIdempotent
Inspect

Return only the stable identity and display labels of the account represented by this request. Used for account linking. For account rights, credits and usage use get_profile.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
idYes
nameNo
emailNo
nicknameNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful scope context ('return only' identity/labels) and the intended workflow (account linking), though it says nothing about auth requirements or rate limits.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is returned, then the purpose, then the routing instruction. No filler.

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 tool is a parameterless read. The description covers scope, purpose and the sibling alternative, leaving nothing an agent needs 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?

Zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond the fact that no input is required, which the empty schema already conveys.

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 action (return) on a specific resource (the account's stable identity and display labels), and constrains scope with 'only'. It is clearly distinguishable from sibling get_profile, which the description explicitly names.

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?

Gives an explicit use case ('Used for account linking') and an explicit redirect for the adjacent need: 'For account rights, credits and usage use get_profile.' This is exactly the when/when-not/alternative pattern.

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

get_content_planCheck a content calendarB
Read-onlyIdempotent
Inspect

Read a calendar from plan_content: each idea’s state (draft, making, ready, needs_connect, needs_time, scheduled, posted, failed), its video and post, and the quote. Cost: Free: no credits.

NameRequiredDescriptionDefault
plan_idYes

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
itemsNo
stateNo
statesNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new context beyond that: the cost ('Free: no credits') and the full set of possible idea states, which tells the agent what a successful read can contain.

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?

A single front-loaded sentence with no filler. The eight-state enumeration is long but functional, since it tells the agent what values to expect rather than padding the text.

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?

Return values are covered by the existing output schema, and annotations handle safety, so the description's remaining job is cost and content shape, both of which it gives. The gaps are minor: the required parameter's identity and the distinction from plan_content/edit_content_plan are not spelled out.

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

Parameters2/5

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

Schema coverage is 0% and the single parameter plan_id has no description. The description never explains what a plan_id is, where it comes from, or its required pln_<hex> format, so the only parameter is undocumented in both places.

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?

The description states a specific verb and resource: 'Read a calendar from plan_content,' and enumerates the returned idea states, so an agent knows exactly what it gets back. It doesn't name the sibling it contrasts with (plan_content, edit_content_plan), so the differentiation is implied via 'Read' rather than explicit.

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

Usage Guidelines2/5

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

There is no when-to-use statement or alternates named. The read-oriented phrasing hints that this is for inspecting an existing plan rather than creating or editing one, but the agent must infer that from sibling names alone.

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

get_profileGet linked profileA
Read-onlyIdempotent
Inspect

Return the Clypmint profile linked to this request, with its credits (used and included this billing month, and when they renew) and videos used, so you can say what a request will use before spending.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, closed-world and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral content by disclosing exactly what the read returns — credits consumed, credits included this billing month, renewal timing, and videos used.

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?

A single front-loaded sentence that leads with the returned resource before the purpose clause. The parenthetical credit detail is dense but every element maps to real return content, so nothing 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?

A no-argument, read-only tool with an output schema and full annotation coverage needs little more than a scope statement, which this provides. The only unstated detail is failure behavior when no profile is linked, a minor omission given the output schema carries the return contract.

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?

The tool takes zero parameters, so the baseline is 4; there is no parameter surface for the description to clarify or for the schema to obscure.

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 ('Return') and resource ('the Clypmint profile linked to this request'), and enumerates the payload (credits used/included/renewal, videos used). This is clearly distinct from siblings like get_account_identity or get_project_context, though it never names an alternative to disambiguate explicitly.

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?

The closing clause 'so you can say what a request will use before spending' gives a concrete usage context: consult this before committing credits. It stops short of naming when-not-to-use or an alternative sibling, so it is clear context without exclusions.

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

get_project_contextInspect a video projectA
Read-onlyIdempotent
Inspect

Read an owned video’s version, scenes, captions and editable canvas element IDs/capabilities. Optional output_id selects a clip/format; element_offset pages through the canvas inventory. Use the returned version/output, IDs and capabilities with the named direct-edit tools, such as set_element_content or set_element_layout, without a second Clypmint model round. Canvas image IDs name assets already in this version. Returns project data without a visual card.

NameRequiredDescriptionDefault
video_idYes
output_idNo
element_offsetNo

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
scenesNo
statusNo
dry_runNo
messageNo
plan_idNo
captionsNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is met; the description still adds real context: no visual card is returned, no second model round is needed for edits, and canvas image IDs refer to assets already present in this version. Pagination behavior is mentioned but page granularity and bounds are not.

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?

Five sentences, front-loaded with what is returned, then parameters, then downstream usage, then return-shape caveat. Dense but every sentence carries information; only the phrasing is slightly compressed ('version/output') rather than padded.

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?

With an output schema present, the description does not need to enumerate return fields, and it correctly focuses on scope, parameter meaning, and how to use the result. The remaining gap is paging mechanics (page size, when to stop) for a canvas inventory that could be large.

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 description coverage is 0%, so the description carries the burden and mostly does: output_id is explained as selecting a clip/format, and element_offset as paging through the canvas inventory. video_id's ownership constraint is stated ('an owned video'), though the page size or default for element_offset is not given.

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?

The description names a specific verb and resource with concrete scope: version, scenes, captions, and editable canvas element IDs/capabilities for an owned video. It implicitly distinguishes itself from mutation siblings by pointing at set_element_content and set_element_layout as consumers of its output, though it never explicitly contrasts with read siblings like list_versions or check_video.

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

Usage Guidelines3/5

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

It gives a clear downstream-use pattern (feed the returned version/output, IDs, and capabilities directly into the direct-edit tools without a second model round), which implies when to reach for this tool. However, there are no explicit when-not-to-use conditions or a named read alternative (e.g., list_versions for version history, check_video for validation), leaving the agent to infer routing.

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

get_threadRead a video’s historyA
Read-onlyIdempotent
Inspect

Read every round of changes, direct edit and caption fix on a video, oldest first, with who asked, the status and the version it made. Cost: Free: no credits.

NameRequiredDescriptionDefault
video_idYesThe video id from list_videos.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
itemsNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish the safe, idempotent, closed-world read profile, and the description adds real context on top: deterministic ordering (oldest first), an inventory of the fields returned (who asked, status, resulting version), and an explicit cost statement (free, no credits). It does not mention pagination or result-size limits, which keeps it short of a 5.

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?

A single front-loaded sentence carries the scope, ordering, and returned fields, followed by a short cost tag. It is dense but every clause earns its place; the enumerative run-on is the only mild readability cost.

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 one-parameter, read-only tool with an output schema, annotations, and full schema coverage, the description supplies what structured data cannot: ordering, field inventory, and cost. The remaining gap is routing guidance against sibling history/activity tools.

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?

With a single parameter and 100% schema description coverage, the schema fully documents video_id and its provenance from list_videos. The description contributes nothing parameter-specific, so this is the baseline 3.

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 (read) and resource (a video's history) and enumerates what the thread contains: rounds of changes, direct edits, caption fixes, authors, statuses, versions. It does not, however, distinguish itself from nearby siblings such as get_video_activity or list_versions, which an agent may plausibly confound.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: no statement of the situation that calls for the thread versus get_video_activity, check_video, or list_versions. The only usable cue is the free-cost note, which is a preference signal rather than a usage rule.

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

get_video_activityWatch the editor workA
Read-onlyIdempotent
Inspect

While a video is being made, read what the editor is doing: its stage, minutes left, the paper edit, each step (looked at footage, searched, previewed) and the names it heard. Use it to narrate progress instead of waiting silently. Cost: Free: no credits.

NameRequiredDescriptionDefault
video_idYesThe video id from list_videos.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral facts beyond those: it only applies 'while a video is being made' and it is free ('Cost: Free: no credits'), which is exactly the kind of cost/auth context annotations cannot express. It stops short of describing polling cadence or what happens after completion.

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?

Three short sentences, front-loaded with the triggering condition and core action before the field list, usage advice, and cost note. Every sentence earns its place, though 'Cost: Free: no credits' has redundant phrasing that could be tightened.

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?

With an output schema present the description need not explain return values — yet it still previews them usefully — and annotations carry the safety profile. Between the timing constraint ('while a video is being made'), the narration guidance, and the cost note, an agent has everything needed to call this correctly during a render.

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?

There is a single parameter (video_id) and schema description coverage is 100%, so the schema already documents it fully as 'The video id from list_videos.' The description mentions no parameters at all, so the baseline of 3 applies — the schema does all the parameter work.

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 ('read what the editor is doing') and enumerates the returned fields (stage, minutes left, paper edit, steps, names heard), which is far more concrete than a tautology. It does not, however, explicitly distinguish itself from closely related siblings such as check_video or list_videos, so it lands at clear-but-undifferentiated rather than a full 5.

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 when-to-use rule: 'Use it to narrate progress instead of waiting silently,' which frames it as a polling/narration tool during an in-flight render. It supplies no exclusions or named alternatives (e.g., what to call once the video is finished, or how it differs from check_video), so it is strong context without the full when-not guidance.

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

get_workflowRead current Clypmint workflowsA
Read-onlyIdempotent
Inspect

Fuller notes on using Clypmint, when a request is unusual: overview (which tool and fields for a request, and one-call changes), music, styles, editing (changes and the canvas), publishing (posting and monthly plans), capabilities. A normal request needs none of it: the tool descriptions are enough. Read-only, free.

NameRequiredDescriptionDefault
topicNooverview

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description restates 'Read-only' (no added credit) and adds only 'free', a minor cost signal. It doesn't disclose return shape beyond the topic list, but with annotations and an output schema present, a 3 is fair.

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 what the tool is, then the topics, then the usage discriminator, with no filler. Slightly dense in the middle clause, but every sentence earns its place.

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 zero-required-parameter docs-retrieval tool with annotations and an output schema, the description covers purpose, the option space, and when to invoke. Nothing essential is missing, though it could note the default topic behavior explicitly.

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 description coverage is 0%, so the description must carry the parameter, and it does: it names all six enum values for 'topic' and glosses what several contain ('which tool and fields for a request', 'changes and the canvas', 'posting and monthly plans'). That adds real meaning beyond the bare enum in the schema.

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?

The description makes clear this tool returns extended guidance notes on Clypmint and enumerates the six topic areas (overview, music, styles, editing, publishing, capabilities), so the resource is unambiguous. The verb is only implied ('Fuller notes on using Clypmint') rather than stated, and the name/title ('get_workflow' / 'Read current Clypmint workflows') is arguably more precise than the body, but the purpose is still identifiable.

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?

It gives an explicit when-to-use ('when a request is unusual') and an explicit when-not ('A normal request needs none of it: the tool descriptions are enough'). That is a genuinely discriminating routing rule an agent can apply without inspecting siblings.

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

import_assetImport a shared assetA
Idempotent
Inspect

Import one image or song up to 32 MiB for a video: a file attached in ChatGPT (file), or a public https link to the file (url) from Claude or any host that cannot attach files. logo: true marks the image as the brand’s logo. Returns an asset_staging_key for create_video’s asset_staging_keys (or music_staging_key for a song), usable for seven days. Repeating the same operation_id and file returns the original receipt. Does not import video footage (edit_video does) or read the host’s wider library. No link and no attachment? The account owner can add the logo once on the Brand page (no website needed): https://clypmint.com/studio/brand.

NameRequiredDescriptionDefault
urlNoA public https link to the image (PNG, JPEG, WebP, GIF) or song (MP3, WAV, M4A), up to 32 MiB. Use it from Claude or any host that cannot attach a file: the direct link to the file itself, not a page that shows it.
fileNoA file attached in ChatGPT. Hosts that cannot attach files send url instead.
logoNotrue when the image is the brand's logo: the video uses it as the brand's mark.
file_nameNoA name for the file.
operation_idYes

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
mime_typeNo
output_idNo
studio_urlNo
version_idNo
asset_staging_keyNo

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the 32 MiB cap, the seven-day lifetime of the staging key, and the idempotency mechanism (same operation_id and file returns the original receipt). Annotations already flag idempotentHint and openWorldHint, so the added expiry and size limits are the real value; rate limits and permission requirements go unmentioned.

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 and size limit, then the input-path branching. Slightly dense in a single paragraph, and the closing Brand-page URL is a mild tangent, though it serves a real dead-end case.

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?

Covers the input modes, the size ceiling, logo semantics, the return value's downstream use (asset_staging_keys on create_video), and its expiry. With an output schema present and 80% param coverage, nothing an agent needs to call this correctly is 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?

With 80% schema coverage the baseline is 3, but the description adds genuine meaning: it explains when to prefer url over file, that logo:true designates the brand mark, and what operation_id buys (idempotent replay). Only the file_name parameter gets no added explanation.

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 (import), the exact resource (one image or song up to 32 MiB), and immediately names what it is not: "Does not import video footage (edit_video does)." An agent can distinguish it from list_assets and edit_video without opening a 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?

Explicitly routes between the two input paths: file for attachments in ChatGPT, url "from Claude or any host that cannot attach files." It names the exclusion (no video footage; edit_video does that) and gives a fallback for the no-link no-attachment case via the Brand page.

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

list_assetsList reusable mediaA
Read-onlyIdempotent
Inspect

List reusable media owned by the linked account, including the asset IDs accepted by video creation.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
assetsNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world, and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context with the ownership constraint (only assets belonging to the linked account) and the fact that the returned IDs are the ones video creation accepts. Pagination/ordering behavior is not mentioned.

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

Conciseness5/5

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

A single well-formed sentence with no filler, front-loading the primary action and scope, and ending on the detail that makes the output actionable.

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 zero-parameter read tool with rich annotations and an output schema describing the returned assets, the description covers identity, scope, and downstream use. It omits only minor operational detail such as result limits or ordering.

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?

The tool takes zero parameters, which sets the baseline at 4. The description correctly implies no filtering or selection arguments are needed, and the schema already carries 100% coverage.

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?

The description uses a specific verb+resource ("List reusable media") and adds scope ("owned by the linked account") plus the downstream purpose ("asset IDs accepted by video creation"). It clearly separates this from write-oriented siblings like import_asset, but never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent infers it should call this to discover asset IDs before video creation, since the description ties the output to that workflow. There is no explicit when-to-use, when-not, or named alternative such as list_videos.

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

list_memoryList what Clypmint remembersB
Read-onlyIdempotent
Inspect

List the preferences, looks and spellings Clypmint remembers for the brand, with the ids forget takes. Cost: Free: no credits.

NameRequiredDescriptionDefault
brand_idNo

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world behavior, so the safety profile is covered. The description's only additive behavioral detail is billing context ("Cost: Free: no credits"), which is genuinely useful but thin; nothing is said about scoping, defaults, or result size.

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?

A single compact sentence with no filler, and the resource being listed is front-loaded. It is slightly dense and run-on (resource, forget linkage, and cost packed together), but nothing 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 simple read-only list tool this covers the essentials: what is listed, the relationship to forget, and the fact that it is free. An output schema exists so return values need not be described, though the optional brand_id default remains unexplained.

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

Parameters2/5

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

Schema description coverage is 0% and the description never explains brand_id — it only obliquely implies the listing is "for the brand". Since brand_id is optional (0 required), an agent gets no help on what happens when it is omitted, and the format/pattern details are left entirely to the schema.

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 ("List") and a concrete resource ("the preferences, looks and spellings Clypmint remembers for the brand"), which is far more informative than the tautological title. It also links to the forget sibling via "the ids forget takes", helping distinguish it from remember/forget, though it never states how it differs from remember directly.

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

Usage Guidelines3/5

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

"with the ids forget takes" implies the intended workflow (list to obtain ids, then forget), which is real, if implicit, usage guidance. It does not explicitly say when to prefer this over remember or any other sibling, nor does it address the optional brand_id case, so guidance stays at the implied level.

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

list_versionsList versionsA
Read-onlyIdempotent
Inspect

List the versions of a video, newest last, and which one is live. Use with restore_version to undo. Cost: Free: no credits.

NameRequiredDescriptionDefault
video_idYesThe video id from list_videos.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
versionsNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond them: result ordering (newest last), inclusion of the live-version indicator, and the free/no-credit cost. It doesn't discuss pagination, though an output schema exists to cover the shape.

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

Conciseness5/5

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

Three short clauses, front-loaded with purpose and ordering, then workflow pairing, then cost. No filler sentences; each clause carries distinct information.

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?

For a single-parameter read-only list tool with an output schema, the description covers what an agent needs: what it returns (versions, newest last, live flag), how it relates to restore_version, and that it costs nothing. Nothing material is missing.

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% and the single required video_id is documented there ('The video id from list_videos'). The description adds no syntax or format detail beyond the schema, so the baseline 3 for schema-carried parameters is appropriate.

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 (List) and resource (versions of a video), plus distinguishing output facts — ordering (newest last) and which version is live. It also names the sibling it pairs with (restore_version), so an agent can place it without reading 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 Guidelines4/5

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

Explicitly ties the tool to restore_version for undoing changes, giving a clear workflow context. It stops short of stating when-not-to-use or naming other alternatives, but the intended use is unambiguous.

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

list_videosList your videosA
Read-onlyIdempotent
Inspect

List up to 20 recent videos in the linked Clypmint account.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
videosNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description usefully adds the hard cap of 20 results and recency ordering, but says nothing about pagination or how to retrieve anything beyond those 20, which matters for a list tool.

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

Conciseness5/5

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

A single sentence with zero filler, front-loading the result cap and recency ordering before the account scope. Every clause earns its place.

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?

An output schema exists, so return values need no explanation, and the zero-param schema needs no parameter prose. The description covers scope, ordering and cap; the only gap is whether the 20-result limit is a hard ceiling or paginated.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. The description correctly implies the tool is unfiltered and unscoped by input.

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 (list) and resource (videos), plus meaningful scope: 'up to 20 recent' and 'in the linked Clypmint account'. It does not differentiate itself from siblings like list_assets, list_posts, list_versions, or check_video, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no when-not-to-use, and no mention of alternatives such as check_video or get_video_activity. The only implicit signal is that it returns 'recent' videos, which is weak routing information among so many sibling tools.

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

move_sceneChange scene timingA
DestructiveIdempotent
Inspect

Set the scene’s first and last transcript word numbers. Use this to shorten a graphic without removing the footage underneath. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
wordsYes[first, last] word numbers from the transcript in get_project_context.
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is known. The description usefully adds the quota basis ('direct-edit allowance'), cost, refusal behavior for unsupported changes, and the retry/idempotency rule, but it does not state how prior bounds are affected or whether the change can be undone.

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 and effect, followed by short operational notes in rough dependency order (precondition, save behavior, refusal, retry, quota/cost). Slightly dense with operational boilerplate, but every sentence carries usable information.

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?

Output schema and annotations cover return values and safety, and the description fills in prerequisite workflow, payability of the result, refusal semantics, and a follow-up path ('check_video with_download'). Only the precise meaning of 'refuse without rebuilding' and irreversibility of bounds changes remain unstated.

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 coverage is 100%, so all six parameters are already documented, including operation_id retry semantics. The description adds workflow provenance for base_version/output_id, but its claim that output_id comes from get_project_context mildly diverges from the schema's 'one output from check_video', so it does not clearly exceed the schema.

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 ('Set the scene's first and last transcript word numbers') and immediately clarifies the effect ('shorten a graphic without removing the footage underneath'), which distinguishes it from remove_scene and cut_video_words. An agent reading only this line knows what changes and what is preserved.

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 explicit sequencing ('Read get_project_context first and pass its base_version and selected output_id') and a clear use case. It doesn't name a sibling alternative (e.g. cut_video_words) for when the underlying footage should also go, so a small routing gap remains.

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

plan_contentWrite a month of video ideasA
Idempotent
Inspect

Start a content calendar for a topic: count faceless videos (1-31) over days (7-31), each with a title, hook, the exact script, caption, hashtags and a posting time. Best: write the ideas yourself in the conversation and send them as items (taken as written, at once); otherwise Clypmint writes them (this call keeps going until they are written, or tells you to call again with the same operation_id). Makes nothing and spends nothing; answers plan_id, the ideas and the quote (credits a video, room left this month). Show the user the ideas, change them with edit_content_plan, and approve_plan only after their yes. Use for "start a faceless account" or "a month of posts about X". Cost: Free to write; making each video costs about 4 credits (30 s).

NameRequiredDescriptionDefault
daysYesOver how many days (7-31).
countNoHow many videos (1-31); leave out when sending items.
itemsNoIdeas you wrote yourself (title, hook, script, caption, hashtags): taken as written, at once. Without them Clypmint writes the ideas.
topicYesWhat the account posts about.
voiceNoThe narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. "Voice: <name>" in instructions does the same.
secondsNo
audienceNo
start_atNoThe first day; tomorrow when left out.
style_idNo
timezoneNo
platformsNoWhere each post goes; Instagram when left out.
instructionsNo
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
itemsNo
quoteNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.5/5.0
Behavior5/5

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

Discloses important behavior beyond the annotations: the call may be long-running, may tell the agent to retry with the same operation_id, makes no videos and spends no credits, and returns plan_id, ideas, and a quote. It also states the cost model for later video creation, which an agent needs before recommending approval.

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 description is dense but front-loaded with the main purpose and key constraints. Every sentence adds useful procedural or cost context, though the long parenthetical-heavy prose could be more scannable for a tool with this many parameters.

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 complex 13-parameter planning tool, the description covers the critical call behavior, output values, cost, and approval workflow, and an output schema exists for return details. The remaining gap is that several optional parameters are not explained in the description and are only partially covered by the schema.

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?

The description explains the core parameters (topic, days, count, items) and the item shape, and clarifies that supplied items are taken as written at once. However, with 13 parameters and only 62% schema description coverage, it leaves several optional parameters such as seconds, audience, style_id, timezone, and instructions unexplained in the description. The schema carries part of the burden, so a baseline 3 is appropriate.

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 ('Start a content calendar for a topic') plus the exact output shape: video ideas with title, hook, script, caption, hashtags, and posting time. It names the relevant downstream siblings edit_content_plan and approve_plan, so the agent can distinguish this from editing or approving a plan.

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?

Gives explicit trigger phrases ('start a faceless account', 'a month of posts about X') and explains the two modes: send self-written items versus let Clypmint write them. It also prescribes the post-call workflow: show the ideas to the user, use edit_content_plan for changes, and call approve_plan only after the user agrees.

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

put_video_overlayAdd or update an overlayA
DestructiveIdempotent
Inspect

Add or update one timed text, image or video overlay with none, fade, slide or pop animation. Use only existing canvas asset IDs and editable capabilities returned by the project. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
overlayYes
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, and the description adds substantive context beyond them: the edit persists as a playable project, unsupported changes are refused without partial rebuilds, operation_id must be preserved on retries, the call consumes the account's direct-edit allowance, and it costs no credits. The only gap is not spelling out what an 'update' does to unlisted properties of an existing overlay.

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?

Purpose and allowed kinds are front-loaded, then prerequisites, persistence semantics, failure behavior, retry rules, and cost in a tight sequence of short sentences. Slightly telegraphic phrasing ('Cost: Free: no credits') is dense but each sentence carries distinct information, so little is wasted.

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?

For a destructive, version-guarded mutation with an output schema present, the description covers everything an agent needs before calling: required prior tool, ID sources, concurrency token, idempotent retry protocol, refused-change behavior, and quota/cost. Return-value details are correctly omitted since an output schema exists.

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 80% and four parameters already carry descriptions, so the baseline is 3. The description goes above that by explaining the overlay kinds (text/image/video) that drive the untyped oneOf and their animation enum, and by tying base_version/output_id to get_project_context so the agent knows where those values come from.

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+resource+scope: 'Add or update one timed text, image or video overlay', and enumerates the animation types. An agent can distinguish this from remove_video_overlay by the verb, but no sibling is named explicitly, so differentiation is implicit rather than stated.

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?

Gives explicit prerequisites ('Read get_project_context first and pass its base_version and selected output_id'), constrains inputs ('Use only existing canvas asset IDs and editable capabilities returned by the project'), and routes elsewhere for the follow-on need ('request a file separately with check_video with_download'). This is clear when-to-use and when-to-use-something-else guidance.

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

rememberRemember a preferenceC
DestructiveIdempotent
Inspect

Teach Clypmint one lasting preference for every later video of this brand, in plain words: caption size, pace, sound effects, colours, "own footage first", or how a name is spelled. Up to 200 characters. Free. Cost: Free: no credits.

NameRequiredDescriptionDefault
textYesOne preference in plain words, e.g. "Bigger captions" or "Always spell it ClipMint".
brand_idNo

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, idempotentHint=true and openWorldHint=false, but the description never explains what is destroyed (e.g., whether a new preference overwrites an existing one) or why a "remember" action is marked destructive. The cost line ("Free: no credits") is the only behavioral addition, and the 200-character limit merely repeats the schema's maxLength.

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

Conciseness3/5

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

The purpose is front-loaded and the sentence is reasonably compact, but the trailing "Free. Cost: Free: no credits." is redundant self-repetition that adds no information. The character-limit clause duplicates the schema constraint rather than earning its place.

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

Completeness3/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 not be explained, and the core operation is understandable. However, for a mutation tool flagged destructive, the missing overwrite/idempotency semantics and the undocumented brand_id leave real gaps for correct invocation.

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

Parameters2/5

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

Schema coverage is only 50%: text is documented in the schema, and the description's "plain words" plus examples largely duplicate that. The brand_id parameter has no description anywhere, and the description does not clarify whether it defaults to the current brand, which is exactly the gap a description should fill.

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?

"Teach Clypmint one lasting preference for every later video of this brand" gives a specific verb (teach/store), resource (preference, scoped to a brand), and scope (applies to later videos). The examples of preference types (caption size, pace, name spelling) make the intent unambiguous. It does not name its siblings (forget, list_memory), so an agent must infer which one removes or lists preferences.

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

Usage Guidelines3/5

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

Usage is implied: call this when you want to persist a durable brand-level preference rather than a one-off edit. There is no explicit guidance on when not to use it, no mention of the forget/list_memory alternatives, and no statement about whether brand_id is required or what happens when it is omitted.

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

remove_sceneRemove a sceneA
DestructiveIdempotent
Inspect

Remove this scene and its footage time. To remove only graphics or camera motion while keeping speech, use remove_scene_layer. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/idempotentHint annotations: it discloses that footage time is destroyed, that the result is a saved playable project rather than a file, that unsupported changes refuse without rebuilding, that operation_id and exact inputs must be preserved on retries, that it consumes the account's direct-edit allowance, and that it costs no credits.

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?

Purpose is front-loaded and each sentence carries operational value (alternative, prerequisite, output, failure mode, retry, quota, cost). It is dense and slightly crammed into one paragraph, but there is no filler.

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?

For a destructive mutation with an output schema and annotations already covering safety, the description supplies everything else an agent needs: prerequisite call ordering, version pinning, idempotent retry protocol, quota/cost impact, and failure behavior.

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 already 100%, so baseline is 3; the description adds cross-tool provenance for base_version/output_id and stresses retry semantics for operation_id. Slight ambiguity: it says output_id comes from get_project_context while the schema attributes it to check_video, which could confuse a careful agent but is not harmful.

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 ("Remove this scene and its footage time") and immediately names the closest sibling (remove_scene_layer) with the distinction between full-scene removal and layer-only removal. An agent can differentiate it from add_scene/move_scene without inspecting any 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?

Gives explicit when-to-use vs. alternative ("To remove only graphics or camera motion while keeping speech, use remove_scene_layer"), plus a mandatory prerequisite sequence (read get_project_context first, pass base_version and output_id) and follow-up routing (request a file via check_video with_download).

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

remove_scene_layerRemove a scene layerA
DestructiveIdempotent
Inspect

Remove the graphic or camera movement from this scene, preserving its footage and captions. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
layerYes
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructive/idempotent, but the description adds substantially: unsupported changes refuse rather than rebuild, a playable project is saved while file export is a separate step, operation_id must be preserved on retries, and the call draws on the account's direct-edit allowance at no credit cost. These are non-obvious operational traits an agent cannot infer from the schema or annotations.

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 action and its preservation guarantee, then supporting operational detail in short clauses. Dense and largely telegraphic, but virtually every sentence carries a distinct constraint; only the trailing cost sentence is close to boilerplate.

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?

With an output schema handling return shape and annotations covering safety, the description fills the remaining gaps: prerequisites, version pinning, refusal behavior, retry identity, export path, and cost. Nothing needed to invoke it correctly is 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 83%, so the schema already documents all six parameters including the layer enum. The description still adds value by tying base_version and output_id to get_project_context/check_video and by explaining retry semantics for operation_id.

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 ('Remove the graphic or camera movement from this scene') and immediately scopes it ('preserving its footage and captions'), which distinguishes it from remove_scene and add_scene without the agent opening any schema.

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 prerequisite ('Read get_project_context first and pass its base_version and selected output_id') and routes file retrieval to check_video with_download. It does not explicitly name remove_scene as the alternative when the entire scene should go, so the exclusion is only implied.

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

remove_video_overlayRemove an overlayA
DestructiveIdempotent
Inspect

Remove one added overlay by its returned ov_ ID, preserving underlying footage. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
idYes
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint/idempotentHint, and the description adds real context: underlying footage is preserved, a playable project is saved, unsupported changes are refused without rebuilding, the account's direct-edit allowance is consumed, and the call is free. That is meaningful disclosure beyond the structured safety flags.

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 and outcome, and every clause carries operational value (cost, refusals, retries). The telegraphic fragments ('Cost: Free: no credits.') are efficient but slightly clipped in style.

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?

Given an output schema, return values need not be explained; the description instead covers what an agent actually needs — prerequisites, versioning, side effects, refusal behavior, retry semantics, and cost. Nothing essential is missing for correct invocation.

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 80% schema coverage the baseline is 3, and the description adds provenance: base_version and output_id come from get_project_context, and operation_id must be stable across retries. Minor friction in that the schema says output_id comes from check_video while the description points at get_project_context.

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 ('Remove one added overlay by its returned ov_ ID') plus the resulting state ('preserving underlying footage'), which cleanly separates it from put_video_overlay and remove_scene. The ID-pattern reference makes the target unambiguous.

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?

Explicitly prescribes the prerequisite sequence ('Read get_project_context first and pass its base_version and selected output_id') and routes to siblings for adjacent needs ('request a file separately with check_video with_download'). Retry guidance ('Preserve operation_id and exact inputs on retries') covers the main misuse case.

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

replace_scene_screenReplace scene graphicsA
DestructiveIdempotent
Inspect

Replace this scene screen with the supported screen shape returned by get_project_context. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
screenYesA screen in the shape get_project_context shows for that scene.
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations, the description discloses important behavior: saving a playable project, refusal of unsupported changes without rebuilding, retry/idempotency handling via operation_id, use of the account's direct-edit allowance, and that the operation is free. These details materially help an agent call it correctly.

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

Conciseness5/5

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

The description is front-loaded with the core action and then adds only operationally relevant details: prerequisites, project saving, refusal behavior, retries, allowance, and cost. Each sentence carries useful information with no filler.

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?

Given the 100% schema coverage, output schema, and destructive/idempotent annotations, the description covers the key prerequisites, side effects, retry behavior, cost, and separate file retrieval. An agent has enough context to invoke it correctly.

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 workflow meaning by tying base_version and output_id to get_project_context and by reinforcing operation_id preservation on retries. It does not add much about the nested screen object, but the schema already documents that.

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?

The description names a specific verb and resource: replacing a scene screen with the supported screen shape from get_project_context. It is clear enough for an agent to identify the operation, though it does not explicitly distinguish it from nearby tools such as swap_scene_picture or add_scene.

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 gives clear workflow guidance: read get_project_context first, pass base_version and selected output_id, and use check_video with_download to request a file separately. It also notes that unsupported changes are refused, but it does not explicitly compare this tool against sibling editing tools beyond the download alternative.

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

restore_versionRestore a versionA
DestructiveIdempotent
Inspect

Make an earlier version of a video live again (undo). Nothing is deleted. Free. Cost: Free: no credits.

NameRequiredDescriptionDefault
video_idYesThe video id from list_videos.
version_idYesA version_id from list_versions.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Adds real behavioral context beyond the annotations: it clarifies the undo semantics, that nothing is deleted, and that the call costs no credits. The 'nothing is deleted' note usefully scopes the destructiveHint=true annotation rather than contradicting it (the live version is still superseded). It does not say what happens to the currently live version, which is the one remaining gap.

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

Conciseness3/5

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

The purpose clause is well front-loaded, but the tail is padded and garbled: 'Free. Cost: Free: no credits.' says the same thing twice in an awkward fragment. One of those sentences does not earn its place.

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 simple two-parameter mutation with a 100%-covered schema and an output schema, the description covers the essentials: what it does, that it is non-deleting, and that it is free. Only the effect on the previously live version is unstated.

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%, and both parameters are already documented in the schema (video_id from list_videos, version_id from list_versions). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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: 'Make an earlier version of a video live again (undo)'. This is unmistakably distinct from siblings like list_versions or edit_video, so an agent can select it 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 Guidelines3/5

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

Usage is implied by the undo framing (use it to roll back to a prior version), but the description names no alternatives and states no prerequisites or when-not conditions. An agent must infer the trigger scenario from the verb alone.

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

revise_videoRequest a video changeA
DestructiveIdempotent
Inspect

Change a finished video against its saved base_version. A change asked for in words costs 1 credit (dry_run: true answers the price and sends nothing); exact edits with the direct edit tools and fix_captions are free. Name output_id for one hook/Short/format; attachment changes require one output when the video has several. Attach up to four still images with explicit intent: reference_only studies the image without placing it, use_in_video must place it. Supply each as a genuine ChatGPT file descriptor, an import_asset asset_staging_key, or an owned imported asset_id. PNG/JPEG/WebP may be placed; GIF references inspect the first frame only. Prepared owned video sources may be placed by ID; motion/audio analysis of video references needs a separate preparation path. Unsupported requests return a reason and preserve the saved project. Exact supported changes use the direct edit tools or fix_captions. On the legacy rendered revision path only (a video without a saved native project), replace retained main scratch narration when check_video.narration.can_change is true: pass explicit voice plus a voice-only change such as 'Change narrator to Brian. Keep the script and edit.' using the selected catalog name. This preserves script/edit/assets; send other edits separately. Uploaded speech, silent motion and mixed voice/visual instructions are refused on that replacement path. To ADD narration to an eligible silent main motion video on the legacy path, keep voice omitted and begin change with 'Narrator: liam Narration: '. Use a catalog narrator name; this supports one main hook, aligns rebuilt visuals to the recorded narration word clock, and refuses mismatched, clipped or missing voiceover. The saved native project path currently returns typed project_update_unsupported for voice replacement or narration addition because its separate narration preparation path is unavailable. Do not promise native narration support or retry by forcing a legacy rebuild. Preserve operation_id, base/output, roles and arguments on retries; a refreshed file download URL for the same host file may resume its upload. Use a new operation_id for a deliberate new change and check the resulting version. No movie export is started by a native project update. A change by typing runs in the background: this answers at once with a job_id, and check_video with that job_id shows the steps as they happen and then the editor's reply and what it could not do.

NameRequiredDescriptionDefault
voiceNoThe narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. "Voice: <name>" in instructions does the same.
changeYes
dry_runNotrue: say what the change uses and send nothing.
video_idYes
output_idNoChange only this output (a hook, a Short or a format) from check_video.
attachmentsNo
base_versionNo
operation_idNoA stable ID for this authorized request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.1/5.0
Behavior5/5

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

Goes far beyond the annotations (destructiveHint true, idempotentHint true, readOnlyHint false): discloses the 1-credit cost model, that unsupported requests return a reason and preserve the saved project, that the call answers immediately with a job_id and runs in the background, that no movie export is started, and that the native project path currently returns project_update_unsupported for narration. It also explains retry semantics (preserve operation_id, base/output, roles, arguments; refreshed download URL may resume upload).

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

Conciseness3/5

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

The core purpose and cost are correctly front-loaded, but the body is a dense run-on block that mixes normal-path behavior, legacy rendered revision rules, the ADD-narration template, and native-path limitations into one paragraph. The low-frequency legacy-path detail is long enough that an agent skimming for 'should I call this?' must wade through it, and some statements are restated ('Exact supported changes use the direct edit tools or fix_captions' appears twice in substance).

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 an 8-parameter, high-stakes mutation tool, the description covers pricing, safety of failures, async job flow, retry identity, attachment constraints, and the two revision paths. An output schema exists so return shape needn't be explained, and it doesn't over-explain it. The remaining gap is that the primary word-based change format (what a good `change` string looks like outside the legacy narration case) is only implied by examples in the edge paths.

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 only 50% schema description coverage, the description carries real weight: it defines output_id scope (one hook/Short/format), the attachment limit of four and the meaning of reference_only vs use_in_video, the three accepted attachment forms (file descriptor, asset_staging_key, asset_id), which image types may be placed, that GIF references inspect only the first frame, and how voice interacts with the legacy narration path. base_version and operation_id are explained but somewhat implicitly; the semantics of 'change' text in the normal (non-legacy) path is not specified.

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: change a finished video against its saved base_version, with credit cost and dry_run preview immediately up front. It distinguishes itself from exact-edit paths by saying word-based changes cost a credit while 'the direct edit tools and fix_captions are free', but it never names which concrete sibling tool handles which exact edit, so the agent must still infer the routing.

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?

Explicit conditional guidance: use dry_run to price without sending, use direct edit tools or fix_captions for exact changes, use output_id when the video has several outputs, use a new operation_id only for a deliberate new change, and check_video with job_id to follow progress. The 'when not to use' story is present but references an unnamed category ('the direct edit tools') rather than named siblings, which weakens routing.

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

save_clipKeep a clip to use againA
Idempotent
Inspect

Keep a finished clip (or hook, or film) of a video as a reusable asset. Its asset_id goes in asset_ids of edit_video or create_video, so a clip can open another video, sit inside one, or become the whole video. Read output_id from check_video. Free. Cost: Free: no credits.

NameRequiredDescriptionDefault
video_idYesThe video id from list_videos.
output_idYesThe clip (or hook, or main film) to keep, from check_video, e.g. short-2-9x16.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description's only added behavioral information is that the call is free, which is useful but not about side effects, repeat-save behavior, or limits. It neither contradicts nor enriches the annotation picture much.

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

Conciseness3/5

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

The core is front-loaded and efficient, but the closing 'Free. Cost: Free: no credits.' is a redundant duplicate of the same fact stated twice in one breath. That waste undercuts an otherwise tight three-sentence definition.

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?

An output schema exists, so return values need not be explained, and the description supplies the missing piece — where output_id comes from and where asset_id goes. The naming mismatch between the input 'output_id' and the resulting 'asset_id' is introduced without explicit reconciliation, which is the only real gap.

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 coverage is 100%, so both video_id and output_id are already documented in the schema, including the example 'short-2-9x16'. The description reinforces the source of output_id but adds no format or edge-case meaning beyond what the schema states — baseline 3 applies.

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?

The first sentence names a specific verb ('keep') and resource ('a finished clip (or hook, or film) of a video') and explains what the result becomes — a reusable asset. It does not distinguish itself from sibling list_assets or import_asset, so an agent must infer the difference between saving a rendered clip and importing an external asset.

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 gives concrete guidance: read output_id from check_video first, then use the resulting asset_id in edit_video or create_video. That is clear 'use it like this' instruction. It stops short of stating when NOT to use it versus import_asset or list_assets, so no exclusions are offered.

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

set_caption_styleStyle captionsA
DestructiveIdempotent
Inspect

Change caption size, position or style using supported values from the project. Size and position work on every caption style; a font change is refused on styles that draw their own type (the change is not partly saved). For spelling or caption text use fix_captions. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
captionsYes
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations (destructive=true, idempotent=true), the description discloses atomicity ('the change is not partly saved'), retry guidance ('Preserve operation_id and exact inputs on retries'), cost ('Free: no credits'), and the account's direct-edit allowance. It adds rich behavioral context that annotations alone do not provide.

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 description is front-loaded with purpose and packs necessary details about alternatives, prerequisites, failure modes, retries, and cost. It is slightly verbose (six sentences) and could be more structured, but every sentence contributes useful information.

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?

Given the tool's complexity (mutation, nested parameters, idempotency, dependencies, cost) and the presence of an output schema, the description is complete. It covers prerequisites, failure behavior, retry semantics, and cost, leaving no critical gaps for correct invocation.

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 80% schema description coverage, the baseline is 3. The description adds meaning by listing the caption fields (size, position, style) and noting that values must come from the project and that font changes are refused on certain styles. However, it doesn't specify where to find the supported values (e.g., browse_styles), leaving a small gap.

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 description states a specific verb+resource ('Change caption size, position or style') and explicitly distinguishes from fix_captions for text changes. An agent can immediately tell what the tool does and when it differs from siblings.

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?

It names the alternative tool for spelling/text ('For spelling or caption text use fix_captions'), gives a prerequisite ('Read get_project_context first and pass its base_version and selected output_id'), and explains how to request a file separately via check_video. This covers when and how to use the tool explicitly.

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

set_element_contentChange an elementA
DestructiveIdempotent
Inspect

Change supported text, color or hidden state on one returned editable canvas element. A null edit restores its authored content. Preserve authored animation. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
editYes
elementYes
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: a null edit restores authored content, authored animation is preserved, unsupported changes refuse without rebuilding (no partial rebuild), operation_id and exact inputs must be preserved on retries, the call consumes the account's direct-edit allowance, and it is free. The quota and refuse-without-rebuilding details are exactly the kind of behavior annotations cannot express.

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 and supported fields, then proceeds to prerequisites, side effects, and cost in a logical order. Dense but nearly every sentence carries operational information; the terse 'Cost: Free: no credits.' phrasing is slightly awkward but not wasteful.

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 not be explained, and the description covers what remains: prerequisites, mutation and restore semantics, refusals, retry/idempotency discipline, quota consumption, and the follow-up download path. Nothing an agent needs in order to call this correctly is 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 67%, and the description fills the most important gap the schema leaves: the meaning of a null `edit` (restores authored content), which the schema only types as null with no explanation. It also explains the provenance of base_version and output_id (from get_project_context) and the retry contract for operation_id. The `element` identifier format is only loosely implied by 'one returned editable canvas element'.

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 (change) on a specific resource (one returned editable canvas element) and enumerates exactly which fields are supported: text, color, hidden state. This cleanly separates it from siblings such as set_element_layout, set_scene_text, and adjust_style without needing to name them.

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 an explicit prerequisite chain (read get_project_context first, pass its base_version and output_id) and routes file delivery to a different tool (check_video with_download). It also states refusal behavior for unsupported changes. It stops short of explicitly contrasting with the nearest sibling, set_element_layout, so layout-vs-content selection is left implicit.

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

set_element_layoutMove or resize an elementA
DestructiveIdempotent
Inspect

Move, scale or rotate one returned editable canvas element using its units. A null layout restores its authored layout. Preserve authored animation. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
layoutYes
elementYes
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses behavior well beyond the annotations: null layout restores the authored layout, authored animation is preserved, unsupported changes refuse without rebuilding, retries must preserve operation_id and exact inputs, and a direct-edit allowance/cost applies. These details add substantial operational context for a destructive but idempotent mutation.

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 description is front-loaded and dense with useful constraints, and most sentences carry operational value. It is slightly list-like and could be structured more cleanly, but it avoids repetition and wasted prose.

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?

For a destructive, idempotent mutation with an output schema, the description covers prerequisites, preservation behavior, refusal behavior, retry guidance, file-download separation, and cost. Nothing essential for correct invocation 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 67%, and the description adds meaning for key parameters: layout null semantics, base_version/output_id context from get_project_context, and operation_id retry behavior. It does not fully explain the element identifier or layout unit semantics, but it compensates for much of the schema gap.

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 description states a specific action set (move, scale, rotate), the exact resource (one returned editable canvas element), and the unit context. It clearly distinguishes layout operations from content or scene operations through its focus on element layout.

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 gives concrete prerequisites: read get_project_context first, pass base_version and selected output_id, and preserve operation_id on retries. It also routes file requests to check_video with_download, but it does not explicitly contrast when to use this versus sibling tools like set_element_content.

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

set_output_frameChange video shapeA
DestructiveIdempotent
Inspect

Reshape the selected output to 9:16, 16:9, 1:1 or 4:5. subject follows the subject; contain keeps the whole picture with bars; cover fills with optional x/y. add true creates another output and preserves this one. frame null restores the original shape. Crop only when requested. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
addNo
frameYes
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds real context beyond them: 'add true' preserves the existing output, frame null restores the original shape, unsupported changes refuse without rebuilding, retries must reuse operation_id, and the edit draws on the account's direct-edit allowance at no cost. That is exactly the behavioral detail the annotations cannot express.

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 and the ratio enum, and nearly every clause carries unique information. The semicolon-chained, telegraphic style ('subject follows the subject') is slightly harder to parse and could be broken into clearer sentences without losing density.

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 not be described, and the description still covers prerequisites, mutation semantics, error/refusal behavior, retry protocol, cost, and the follow-up download path. Nothing an agent needs to call this destructive write correctly is missing.

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

Parameters5/5

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

With 67% schema coverage, the description still adds meaning the schema cannot: it explains fit modes (subject follows subject, contain adds bars, cover fills with optional x/y), that frame=null restores the original, and that add=true branches a new output. It also ties base_version/output_id to get_project_context and explains operation_id retry semantics.

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?

Opens with a specific verb and resource plus the exact set of allowed ratios, so the agent knows precisely what changes. It is distinguishable from siblings such as edit_video, revise_video, and check_video because it is scoped to output framing only.

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?

Gives explicit prerequisites (read get_project_context first and pass its base_version and output_id), an explicit exclusion ('Crop only when requested'), and routes file retrieval to a different tool ('request a file separately with check_video with_download'). When-to-use and when-not-to-use are both covered.

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

set_scene_soundsChange scene sound cuesA
DestructiveIdempotent
Inspect

Replace this scene’s added sound cues; an empty cues list removes them. Use names from scenes.soundOptions and word indices from soundWords. Preserve speech; the global sound mute still applies. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
cuesYes
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses consequences beyond the annotations: an empty list removes cues, speech is preserved, global mute still applies, unsupported changes are refused without rebuilding, and retries must preserve operation_id and exact inputs. These details materially supplement the destructiveHint and idempotentHint annotations without contradicting them.

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 purpose is front-loaded and most sentences carry operational value. The description is long and telegraphic across several sentences, so it loses some crispness but avoids obvious filler.

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?

Given a mutation with a nested cues array, an output schema, and annotations covering destructiveness and idempotency, the description supplies the missing prerequisites, refusal behavior, retry guidance, and cost context. An agent has enough information to invoke it correctly.

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 description coverage is 83%, so the structured schema already carries most parameter meaning. The description adds useful semantics for cue names from scenes.soundOptions, word indices from soundWords, and retry handling for operation_id, though it does not explain cue fields such as on, gain, or offset.

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 first sentence names a specific verb and resource: replacing this scene's added sound cues. The scope is clear enough to distinguish it from video-level sound tools such as set_video_sound_effects, and the empty-list behavior is stated immediately.

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 gives clear prerequisites: read get_project_context first and pass base_version and selected output_id. It also directs file requests to check_video with_download and says to preserve operation_id on retries. It does not explicitly contrast this tool with sibling sound-editing tools, keeping it below 5.

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

set_scene_textChange scene textA
DestructiveIdempotent
Inspect

Set one text field, such as screen.title, on the selected scene. Preserve the user’s exact words. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
pathYesWhich text, e.g. 'screen.title'.
textYes
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond annotations: it saves a playable project, unsupported changes refuse without rebuilding, operation_id must be preserved on retries, and it uses the account's direct-edit allowance at no credit cost. These details clarify mutation behavior, retry semantics, and billing without contradicting destructiveHint=true or idempotentHint=true.

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 purpose is front-loaded and the sentences are mostly dense and useful. It is slightly procedural and could be organized more crisply, but every sentence carries operational information.

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?

Given the mutation, seven parameters, annotations, and an output schema, the description covers the key workflow: prerequisite context, version/output selection, retry safety, save behavior, separate file retrieval, and cost. An agent has enough information to invoke it correctly.

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 description coverage is high at 86%, so the baseline is 3. The description adds workflow meaning for base_version and output_id by tying them to get_project_context and also explains operation_id retry behavior, though it does not elaborate on text, scene_id, or video_id beyond the schema.

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: 'Set one text field' on the 'selected scene', with 'screen.title' as an example. The scope is narrow enough to distinguish it from broader siblings like set_element_content or replace_scene_screen.

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?

Provides explicit prerequisites: read get_project_context first and pass base_version and selected output_id. Also gives follow-up guidance for requesting a file separately via check_video. It lacks an explicit when-not or named alternative for editing other kinds of scene content, but the practical usage context is clear.

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

set_video_musicChange video musicA
DestructiveIdempotent
Inspect

Enable or remove added music while preserving source speech. Use a music_staging_key from import_asset or one of these tracks: bright-house (upbeat), lofi-desk (calm), tech-forward (tech), documentary-pulse (story), gym-phonk (energetic), acoustic-morning (warm), soft-piano (emotional), funk-pop (fun), night-suspense (mystery), rise-up (inspiring). level_db is relative to source audio. beat_sync is supported only for source-shot action montages; other clocks refuse it. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
trackNo
enabledYes
level_dbNo
video_idYesThe video id from list_videos.
beat_syncNo
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.
music_staging_keyNo

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag destructive and idempotent behavior, and the description adds real detail beyond them: unsupported changes are refused without rebuilding, retries must preserve operation_id, the call consumes the account's direct-edit allowance, and it is free-tier costless. What it does not state is whether removing music is reversible or what a refusal response looks like, so it falls short of the top band.

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 information is front-loaded — purpose first, then valid inputs, then constraints and prerequisites — and nearly every clause carries operational meaning. It is dense and long for a single description, with the track list consuming much of the length, which slightly hurts scanning but not correctness.

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?

For a nine-parameter destructive edit tool with an output schema, the description covers the decision-relevant surface: prerequisites, input provenance, constraint behavior, retry semantics, quota, and cost. Return-value explanation is correctly omitted because the output schema handles it.

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 only 44%, so the description carries much of the load, and it does: each track name is annotated with a mood, level_db is defined as relative to source audio, beat_sync is constrained to source-shot action montages, and music_staging_key is traced back to import_asset. Only 'enabled' and the staging-key format remain unexplained, which keeps it from a 5.

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 definition opens with a specific verb and resource pair, 'Enable or remove added music while preserving source speech,' which tells an agent exactly what changes and what is left alone. It is clearly distinguishable from sibling mutation tools such as set_scene_sounds and set_video_sound_effects, which act on different audio layers.

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?

It gives explicit prerequisites ('Read get_project_context first and pass its base_version and selected output_id'), names the source of an alternative input ('a music_staging_key from import_asset'), and routes file delivery to a different tool ('request a file separately with check_video with_download'). Those are when-to-use and when-to-use-something-else statements, not inferences.

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

set_video_sound_effectsChange sound effectsA
DestructiveIdempotent
Inspect

Enable or disable added sound effects and select subtle or punchy intensity. Preserve speech and music. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
video_idYesThe video id from list_videos.
intensityNo
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.
sound_effectsYes

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: unsupported changes are refused without rebuilding, retries must preserve operation_id and exact inputs, the operation saves a playable project, file export is separate, and it uses the account's direct-edit allowance. This covers side effects, retry semantics, and resulting state, which is more than the destructiveHint/idempotentHint annotations alone convey.

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

Conciseness5/5

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

Front-loads the purpose, then packs prerequisites, save behavior, retry guidance, and cost into short clauses with no filler. Every sentence adds operational value.

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?

Given six parameters, an output schema, and rich annotations, the description covers the key gaps: prerequisite context call, version/output targeting, retry idempotency, refusal behavior, save side effect, export separation, and cost. Nothing critical is missing for correct invocation.

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 67%, and the description compensates well by explaining intensity as 'subtle or punchy', routing base_version and output_id from get_project_context, and clarifying operation_id retry behavior. It does not explicitly cover sound_effects or video_id semantics, but those are covered or inferable from the schema.

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 ('Enable or disable added sound effects') and scope ('Preserve speech and music'), which distinguishes it from sibling tools like set_video_music and set_scene_sounds. An agent can identify the operation 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 Guidelines4/5

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

Gives a clear prerequisite workflow: read get_project_context first and pass base_version and output_id. It does not explicitly compare itself to alternatives such as set_video_music or set_scene_sounds, so it lacks full when-not guidance, but the context is otherwise actionable.

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

set_word_emphasisChange word emphasisA
DestructiveIdempotent
Inspect

Add or remove emphasis on specific transcript word indices, keeping the words and their timing. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
addNo
removeNo
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false; the description adds value on top: unsupported changes refuse rather than silently rebuild, operation_id must be preserved on retries, and the call consumes the account's direct-edit allowance at zero credit cost. It does not explain what 'destructive' means here (whether removed emphasis is recoverable via restore_version), which is the one gap annotations leave open.

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 action and its invariant, then prerequisites, side effects, retry rules, and cost in a compact sequence with no filler. Some clauses are telegraphic ('Unsupported changes refuse without rebuilding') and would read better as full sentences, but nothing is redundant.

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?

For a 6-parameter mutation with an output schema, the description covers what the agent must supply from elsewhere, that the result is a saved playable project, that file export is a separate call, refusal behavior, retry/idempotency discipline, and cost. No decision-relevant information is 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 67%, with add/remove carrying no descriptions in the schema; the description compensates by framing them as transcript word indices and by indicating that words and timing are untouched. It also clarifies the provenance of base_version and output_id (from get_project_context) and the retry contract for operation_id beyond the schema's own wording. It stops short of clarifying index-base or what happens if an index is already emphasized/unemphasized.

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 ('Add or remove emphasis on specific transcript word indices') plus the key invariant ('keeping the words and their timing'). That scope cleanly separates it from sibling mutators like cut_video_words (which deletes) and set_caption_style (which restyles).

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?

Gives an explicit prerequisite chain ('Read get_project_context first and pass its base_version and selected output_id') and routes the follow-up need elsewhere ('request a file separately with check_video with_download'). An agent knows both what to do before calling and where the file-export step lives.

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

swap_scene_pictureSwap a scene pictureA
DestructiveIdempotent
Inspect

Replace the selected scene picture with a picture key already used in this version, not a library asset ID. Read get_project_context first and pass its base_version and selected output_id. Saves a playable project; request a file separately with check_video with_download. Unsupported changes refuse without rebuilding. Preserve operation_id and exact inputs on retries. Uses the account's direct-edit allowance. Cost: Free: no credits.

NameRequiredDescriptionDefault
asset_idYesA picture key this version already uses (a scene's picture from get_project_context), not a library asset id.
scene_idYesA scene id (sceneId) from get_project_context.
video_idYesThe video id from list_videos.
output_idNoOne output (a hook, a Short, a format) from check_video; the main film when left out.
base_versionNoThe version the edits are for; the current one when left out.
operation_idNoA stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescription
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructive=true and idempotent=true, but the description adds real operational context beyond them: the call saves a playable project, unsupported edits are refused without rebuilding, operation_id must be preserved on retries, and it consumes the account's direct-edit allowance at no credit cost. This is the kind of failure/retry/billing behavior an agent cannot infer from structured fields alone.

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?

Roughly five short sentences, front-loaded with the core action and its key semantic distinction, then prerequisites and cost. Some clauses are telegraphic ("Cost: Free: no credits.", "Unsupported changes refuse without rebuilding."), which costs a little readability but no sentence is filler.

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?

For a destructive 6-param edit tool, it covers the prerequisite read, the identity of the asset reference, retry/idempotency behavior, refusal semantics, and how to obtain the resulting file (with a pointer to check_video). With an output schema present, no return-value explanation is required, so nothing material is 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; the description goes further by explaining that asset_id is a version-scoped picture key rather than a library ID, and that base_version/output_id should come from get_project_context. It doesn't cover scene_id or video_id sourcing, so it stops short of a 5.

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?

"Replace the selected scene picture with a picture key already used in this version" names a specific verb, resource, and scope, and immediately disambiguates from library-asset operations (import_asset/list_assets) and from the sibling replace_scene_screen. An agent can tell exactly what changes and what the input refers to 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?

It gives an explicit prerequisite workflow ("Read get_project_context first and pass its base_version and selected output_id"), names an exclusion (not a library asset ID), and routes a related need to a different tool ("request a file separately with check_video with_download"). Conditions for choosing alternatives are stated rather than implied.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedcheck_video1 field changed
      • addedOutput schema / properties / download_page_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
  2. 19 tool updates
    • Addedadd_scene
    • Removedapply_edits
    • Addedcut_video_words
    • Addedmove_scene
    • Addedput_video_overlay
    • Addedremove_scene
    • Addedremove_scene_layer
    • Addedremove_video_overlay
    • Addedreplace_scene_screen
    • Addedset_caption_style
    • Addedset_element_content
    • Addedset_element_layout
    • Addedset_output_frame
    • Addedset_scene_sounds
    • Addedset_scene_text
    • Addedset_video_music
    • Addedset_video_sound_effects
    • Addedset_word_emphasis
    • Addedswap_scene_picture
  3. 2 tool updates
    • Changededit_content_plan4 fields changed
      • addedInput schema / properties / items / items / properties / hashtags / items / description
        Added value: +"One word, letters, digits or _, with or without #."
      • addedInput schema / properties / items / items / properties / hashtags / items / maxLength
        Added value: +61
      • addedInput schema / properties / items / items / properties / hashtags / items / minLength
        Added value: +1
      • removedInput schema / properties / items / items / properties / hashtags / items / pattern
        Removed value: -"^#?[\\p{L}\\p{N}_]{1,60}$"
    • Changedplan_content4 fields changed
      • addedInput schema / properties / items / items / properties / hashtags / items / description
        Added value: +"One word, letters, digits or _, with or without #."
      • addedInput schema / properties / items / items / properties / hashtags / items / maxLength
        Added value: +61
      • addedInput schema / properties / items / items / properties / hashtags / items / minLength
        Added value: +1
      • removedInput schema / properties / items / items / properties / hashtags / items / pattern
        Removed value: -"^#?[\\p{L}\\p{N}_]{1,60}$"
  4. 9 tool updates
    • Removedapprove_plan
    • Removedcancel_post
    • Removedconnect_social_accounts
    • Removedget_social_accounts
    • Removedlist_posts
    • Removedpost_content_plan
    • Removedschedule_plan
    • Removedschedule_post
    • Removedupdate_post
  5. 3 tool updates
    • Changedcheck_video2 fields changed
      • addedInput schema / properties / job_id
        Added value: +{
        +  "description": "The job_id revise_video returned for a change by typing: also reports that change (its steps so far, then its reply, whether it changed anything, and anything it could not do).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / change
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcopy_style1 field changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "clone (default): deep, copies the reference's own motion and captions; slower; uses a monthly style copy, then credits. match: fast and approximate; included for every account.",
        +  "enum": [
        +    "clone",
        +    "match"
        +  ],
        +  "type": "string"
        +}
    • Changededit_video2 fields changed
      • addedInput schema / properties / reference_mode
        Added value: +{
        +  "description": "How to copy reference_url. clone (the default): deep, copies the reference's own motion and captions; slower, uses one of the monthly style copies, then credits. match: fast and approximate, included.",
        +  "enum": [
        +    "clone",
        +    "match"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / reference_url
        Added value: +{
        +  "description": "A video to make this edit LIKE (a public https link from Instagram, TikTok, X, Facebook, Loom or LinkedIn): Clypmint copies its style beside the upload, saves it to the user's styles, and the edit waits for it. Use it when the user says \"like this one\"; leave style_id out. reference_mode picks how.",
        +  "format": "uri",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
  6. 2 tool updates
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "layer": {
        -        "enum": [
        -          "graphic",
        -          "camera"
        -        ],
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_layer",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "layer"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "beat_sync": {
        -        "type": "boolean"
        -      },
        -      "enabled": {
        -        "type": "boolean"
        -      },
        -      "level_db": {
        -        "maximum": 0,
        -        "minimum": -36,
        -        "type": "number"
        -      },
        -      "music_staging_key": {
        -        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "music",
        -        "type": "string"
        -      },
        -      "track": {
        -        "enum": [
        -          "bright-house",
        -          "lofi-desk",
        -          "tech-forward",
        -          "documentary-pulse",
        -          "gym-phonk",
        -          "acoustic-morning",
        -          "soft-piano",
        -          "funk-pop",
        -          "night-suspense",
        -          "rise-up"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "enabled"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "intensity": {
        -        "enum": [
        -          "subtle",
        -          "punchy"
        -        ],
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cues": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "gain": {
        -              "maximum": -10,
        -              "minimum": -36,
        -              "type": "number"
        -            },
        -            "name": {
        -              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        -              "type": "string"
        -            },
        -            "offset": {
        -              "maximum": 3600,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "on": {
        -              "maximum": 9007199254740991,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "name"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 8,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "scene_sounds",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "cues"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "type": "boolean"
        -      },
        -      "frame": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "fit": {
        -                "default": "subject",
        -                "enum": [
        -                  "subject",
        -                  "cover",
        -                  "contain"
        -                ],
        -                "type": "string"
        -              },
        -              "ratio": {
        -                "enum": [
        -                  "9:16",
        -                  "16:9",
        -                  "1:1",
        -                  "4:5"
        -                ],
        -                "type": "string"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "ratio"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "output_frame",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "frame"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "put_overlay",
        -        "type": "string"
        -      },
        -      "overlay": {
        -        "oneOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "align": {
        -                "enum": [
        -                  "left",
        -                  "center",
        -                  "right"
        -                ],
        -                "type": "string"
        -              },
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "color": {
        -                "pattern": "^#[a-f0-9]{6}$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "font": {
        -                "enum": [
        -                  "Inter-Medium",
        -                  "Poppins-SemiBold",
        -                  "Roboto"
        -                ],
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 0.2,
        -                "minimum": 0.015,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "text",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "text",
        -              "font",
        -              "fontSize",
        -              "color"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "assetId": {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "image",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "assetId"
        -            ],
        -            "type": "object"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "overlay"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_overlay",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "layout": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 4,
        -                "minimum": 0.1,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "x",
        -              "y",
        -              "scale",
        -              "rotation"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "layout",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "layout"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edit": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "color": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "edit"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "layer": {
        +        "enum": [
        +          "graphic",
        +          "camera"
        +        ],
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_layer",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "layer"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "beat_sync": {
        +        "type": "boolean"
        +      },
        +      "enabled": {
        +        "type": "boolean"
        +      },
        +      "level_db": {
        +        "maximum": 0,
        +        "minimum": -36,
        +        "type": "number"
        +      },
        +      "music_staging_key": {
        +        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "music",
        +        "type": "string"
        +      },
        +      "track": {
        +        "enum": [
        +          "bright-house",
        +          "lofi-desk",
        +          "tech-forward",
        +          "documentary-pulse",
        +          "gym-phonk",
        +          "acoustic-morning",
        +          "soft-piano",
        +          "funk-pop",
        +          "night-suspense",
        +          "rise-up"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "enabled"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "intensity": {
        +        "enum": [
        +          "subtle",
        +          "punchy"
        +        ],
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "offset": {
        +              "maximum": 3600,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "type": "boolean"
        +      },
        +      "frame": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fit": {
        +                "default": "subject",
        +                "enum": [
        +                  "subject",
        +                  "cover",
        +                  "contain"
        +                ],
        +                "type": "string"
        +              },
        +              "ratio": {
        +                "enum": [
        +                  "9:16",
        +                  "16:9",
        +                  "1:1",
        +                  "4:5"
        +                ],
        +                "type": "string"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "ratio"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "output_frame",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "frame"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "video",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "sourceIn": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedrevise_video1 field changed
      • addedInput schema / properties / attachments
        Added value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "pattern": "^src_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        +        "type": "string"
        +      },
        +      "asset_staging_key": {
        +        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        +        "type": "string"
        +      },
        +      "file": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "download_url": {
        +            "format": "uri",
        +            "type": "string"
        +          },
        +          "file_id": {
        +            "maxLength": 200,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "file_name": {
        +            "maxLength": 255,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "mime_type": {
        +            "enum": [
        +              "image/png",
        +              "image/jpeg",
        +              "image/webp",
        +              "image/gif"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "download_url",
        +          "file_id",
        +          "mime_type"
        +        ],
        +        "type": "object"
        +      },
        +      "intent": {
        +        "enum": [
        +          "reference_only",
        +          "use_in_video"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "intent"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 4,
        +  "type": "array"
        +}
  7. 1 tool update
    • Changedcreate_video2 fields changed
      • addedInput schema / properties / asset_staging_keys / description
        Added value: +"Pictures the user wants shown (a portrait, a product shot, an app screen): import each with import_asset (its url) and list the keys here."
      • changedInput schema / properties / instructions / description
        Previous value: -"Anything else the user asked for, in their own words: where each picture goes, the tone. Length, narrator, pictures and shapes go in their own fields. No rule lists."New value: +"Anything else the user asked for, in their own words: where each picture goes, the tone. Length, narrator, pictures and shapes go in their own fields. No rule lists. A link written here is not opened: import a picture first with import_asset."
  8. 2 tool updates
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "beat_sync": {
        -        "type": "boolean"
        -      },
        -      "enabled": {
        -        "type": "boolean"
        -      },
        -      "level_db": {
        -        "maximum": 0,
        -        "minimum": -36,
        -        "type": "number"
        -      },
        -      "music_staging_key": {
        -        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "music",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "enabled"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cues": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "gain": {
        -              "maximum": -10,
        -              "minimum": -36,
        -              "type": "number"
        -            },
        -            "name": {
        -              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        -              "type": "string"
        -            },
        -            "offset": {
        -              "maximum": 3600,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "on": {
        -              "maximum": 9007199254740991,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "name"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 8,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "scene_sounds",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "cues"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "type": "boolean"
        -      },
        -      "frame": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "fit": {
        -                "default": "subject",
        -                "enum": [
        -                  "subject",
        -                  "cover",
        -                  "contain"
        -                ],
        -                "type": "string"
        -              },
        -              "ratio": {
        -                "enum": [
        -                  "9:16",
        -                  "16:9",
        -                  "1:1",
        -                  "4:5"
        -                ],
        -                "type": "string"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "ratio"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "output_frame",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "frame"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "put_overlay",
        -        "type": "string"
        -      },
        -      "overlay": {
        -        "oneOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "align": {
        -                "enum": [
        -                  "left",
        -                  "center",
        -                  "right"
        -                ],
        -                "type": "string"
        -              },
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "color": {
        -                "pattern": "^#[a-f0-9]{6}$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "font": {
        -                "enum": [
        -                  "Inter-Medium",
        -                  "Poppins-SemiBold",
        -                  "Roboto"
        -                ],
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 0.2,
        -                "minimum": 0.015,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "text",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "text",
        -              "font",
        -              "fontSize",
        -              "color"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "assetId": {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "image",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "assetId"
        -            ],
        -            "type": "object"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "overlay"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_overlay",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "layout": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 4,
        -                "minimum": 0.1,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "x",
        -              "y",
        -              "scale",
        -              "rotation"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "layout",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "layout"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edit": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "color": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "edit"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "layer": {
        +        "enum": [
        +          "graphic",
        +          "camera"
        +        ],
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_layer",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "layer"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "beat_sync": {
        +        "type": "boolean"
        +      },
        +      "enabled": {
        +        "type": "boolean"
        +      },
        +      "level_db": {
        +        "maximum": 0,
        +        "minimum": -36,
        +        "type": "number"
        +      },
        +      "music_staging_key": {
        +        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "music",
        +        "type": "string"
        +      },
        +      "track": {
        +        "enum": [
        +          "bright-house",
        +          "lofi-desk",
        +          "tech-forward",
        +          "documentary-pulse",
        +          "gym-phonk",
        +          "acoustic-morning",
        +          "soft-piano",
        +          "funk-pop",
        +          "night-suspense",
        +          "rise-up"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "enabled"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "intensity": {
        +        "enum": [
        +          "subtle",
        +          "punchy"
        +        ],
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "offset": {
        +              "maximum": 3600,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "type": "boolean"
        +      },
        +      "frame": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fit": {
        +                "default": "subject",
        +                "enum": [
        +                  "subject",
        +                  "cover",
        +                  "contain"
        +                ],
        +                "type": "string"
        +              },
        +              "ratio": {
        +                "enum": [
        +                  "9:16",
        +                  "16:9",
        +                  "1:1",
        +                  "4:5"
        +                ],
        +                "type": "string"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "ratio"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "output_frame",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "frame"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Addedsave_clip
  9. 4 tool updates
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "beat_sync": {
        -        "type": "boolean"
        -      },
        -      "enabled": {
        -        "type": "boolean"
        -      },
        -      "level_db": {
        -        "maximum": 0,
        -        "minimum": -36,
        -        "type": "number"
        -      },
        -      "music_staging_key": {
        -        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "music",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "enabled"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cues": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "gain": {
        -              "maximum": -10,
        -              "minimum": -36,
        -              "type": "number"
        -            },
        -            "name": {
        -              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        -              "type": "string"
        -            },
        -            "offset": {
        -              "maximum": 3600,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "on": {
        -              "maximum": 9007199254740991,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "name"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 8,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "scene_sounds",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "cues"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "frame": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "fit": {
        -                "enum": [
        -                  "contain",
        -                  "cover"
        -                ],
        -                "type": "string"
        -              },
        -              "ratio": {
        -                "enum": [
        -                  "9:16",
        -                  "16:9",
        -                  "1:1",
        -                  "4:5"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "ratio",
        -              "fit"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "output_frame",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "frame"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "put_overlay",
        -        "type": "string"
        -      },
        -      "overlay": {
        -        "oneOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "align": {
        -                "enum": [
        -                  "left",
        -                  "center",
        -                  "right"
        -                ],
        -                "type": "string"
        -              },
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "color": {
        -                "pattern": "^#[a-f0-9]{6}$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "font": {
        -                "enum": [
        -                  "Inter-Medium",
        -                  "Poppins-SemiBold",
        -                  "Roboto"
        -                ],
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 0.2,
        -                "minimum": 0.015,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "text",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "text",
        -              "font",
        -              "fontSize",
        -              "color"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "assetId": {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "image",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "assetId"
        -            ],
        -            "type": "object"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "overlay"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_overlay",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "layout": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 4,
        -                "minimum": 0.1,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "x",
        -              "y",
        -              "scale",
        -              "rotation"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "layout",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "layout"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edit": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "color": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "edit"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "beat_sync": {
        +        "type": "boolean"
        +      },
        +      "enabled": {
        +        "type": "boolean"
        +      },
        +      "level_db": {
        +        "maximum": 0,
        +        "minimum": -36,
        +        "type": "number"
        +      },
        +      "music_staging_key": {
        +        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "music",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "enabled"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "offset": {
        +              "maximum": 3600,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "type": "boolean"
        +      },
        +      "frame": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fit": {
        +                "default": "subject",
        +                "enum": [
        +                  "subject",
        +                  "cover",
        +                  "contain"
        +                ],
        +                "type": "string"
        +              },
        +              "ratio": {
        +                "enum": [
        +                  "9:16",
        +                  "16:9",
        +                  "1:1",
        +                  "4:5"
        +                ],
        +                "type": "string"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "ratio"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "output_frame",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "frame"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedcheck_video1 field changed
      • addedInput schema / properties / wait
        Added value: +{
        +  "description": "The video card's own refresh sends false to answer at once. Leave it out: waiting for news is what keeps a check from being wasted.",
        +  "type": "boolean"
        +}
    • Changedcreate_video2 fields changed
      • addedInput schema / properties / instructions / description
        Added value: +"Anything else the user asked for, in their own words: where each picture goes, the tone. Length, narrator, pictures and shapes go in their own fields. No rule lists."
      • addedInput schema / properties / seconds / description
        Added value: +"How long: 15, 30 or 60. With a script, leave it out: the script sets the length (about 2.5 words a second; at most 43 words for 15, 86 for 30, 172 for 60)."
    • Changededit_video8 fields changed
      • addedInput schema / properties / camera_sound
        Added value: +{
        +  "description": "The footage's own sound. mute: only the song plays (the default for a montage with a song). keep: the camera sound stays (the default otherwise).",
        +  "enum": [
        +    "keep",
        +    "mute"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / footage_from
        Added value: +{
        +  "description": "The video_id of a video already made from this footage: a new edit of the same footage with no new upload (another kind, length or style). To change that video itself, use revise_video or apply_edits instead.",
        +  "pattern": "^prj_[A-Za-z0-9_-]{6,96}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / formats / description
        Previous value: -"Every shape to make, the main one first: 9:16, 16:9, 1:1, 4:5."New value: +"Only when the user asked for a shape: vertical, TikTok, Reels or Shorts is 9:16; square is 1:1; 4:5; YouTube or widescreen is 16:9. Every shape to make, the main one first. Leave it out otherwise: the video keeps its own shape and nothing is cropped."
      • changedInput schema / properties / instructions / description
        Previous value: -"What you want, in plain words, up to 8,000 characters. Kept in full."New value: +"Anything else the user asked for, in their own words, usually one or two sentences. Length, kind, song, style and formats go in their own fields, not here. Clypmint watches the footage itself: do not describe the footage, write rules or explain how to edit. Kept in full."
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "talking: someone speaks and their words lead the cut (talking head, interview, podcast, tutorial). montage: the pictures and the music lead (sport, action, travel, events, scenery, b-roll); what people say is not followed. Leave out when unsure: Clypmint decides from the footage.",
        +  "enum": [
        +    "talking",
        +    "montage"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / length
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "How long the finished video should be. \"45-60 s\" is {min_seconds: 45, max_seconds: 60}; \"under a minute\" is {max_seconds: 60}; \"about 30 s\" is {min_seconds: 25, max_seconds: 35}. Leave out when the user named no length.",
        +  "properties": {
        +    "max_seconds": {
        +      "maximum": 3600,
        +      "minimum": 5,
        +      "type": "integer"
        +    },
        +    "min_seconds": {
        +      "maximum": 3600,
        +      "minimum": 5,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "max_seconds"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / music_staging_key / description
        Previous value: -"A song from import_asset (mp3, wav or m4a) to lay under the voice."New value: +"The song for this video, from import_asset (mp3, wav or m4a): a montage's soundtrack, or music under the speech."
      • addedInput schema / properties / song_upload
        Added value: +{
        +  "description": "true when the user has a song file but no public link to it (a song attached in Claude, a file on their computer): the private upload link asks for the video and the song together. Leave out when music_staging_key is set.",
        +  "type": "boolean"
        +}
  10. 1 tool update
    • Changedschedule_post1 field changed
      • addedInput schema / properties / connectionId
        Added value: +{
        +  "pattern": "^(primary|sc_[a-f0-9]{24})$",
        +  "type": "string"
        +}
  11. 2 tool updates
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cues": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "gain": {
        -              "maximum": -10,
        -              "minimum": -36,
        -              "type": "number"
        -            },
        -            "name": {
        -              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        -              "type": "string"
        -            },
        -            "offset": {
        -              "maximum": 3600,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "on": {
        -              "maximum": 9007199254740991,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "name"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 8,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "scene_sounds",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "cues"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "frame": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "fit": {
        -                "enum": [
        -                  "contain",
        -                  "cover"
        -                ],
        -                "type": "string"
        -              },
        -              "ratio": {
        -                "enum": [
        -                  "9:16",
        -                  "16:9",
        -                  "1:1",
        -                  "4:5"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "ratio",
        -              "fit"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "output_frame",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "frame"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "put_overlay",
        -        "type": "string"
        -      },
        -      "overlay": {
        -        "oneOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "align": {
        -                "enum": [
        -                  "left",
        -                  "center",
        -                  "right"
        -                ],
        -                "type": "string"
        -              },
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "color": {
        -                "pattern": "^#[a-f0-9]{6}$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "font": {
        -                "enum": [
        -                  "Inter-Medium",
        -                  "Poppins-SemiBold",
        -                  "Roboto"
        -                ],
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 0.2,
        -                "minimum": 0.015,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "text",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "text",
        -              "font",
        -              "fontSize",
        -              "color"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "assetId": {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "image",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "assetId"
        -            ],
        -            "type": "object"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "overlay"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_overlay",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "layout": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 4,
        -                "minimum": 0.1,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "x",
        -              "y",
        -              "scale",
        -              "rotation"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "layout",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "layout"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edit": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "color": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "edit"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "beat_sync": {
        +        "type": "boolean"
        +      },
        +      "enabled": {
        +        "type": "boolean"
        +      },
        +      "level_db": {
        +        "maximum": 0,
        +        "minimum": -36,
        +        "type": "number"
        +      },
        +      "music_staging_key": {
        +        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "music",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "enabled"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "offset": {
        +              "maximum": 3600,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "frame": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fit": {
        +                "enum": [
        +                  "contain",
        +                  "cover"
        +                ],
        +                "type": "string"
        +              },
        +              "ratio": {
        +                "enum": [
        +                  "9:16",
        +                  "16:9",
        +                  "1:1",
        +                  "4:5"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "ratio",
        +              "fit"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "output_frame",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "frame"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Addedget_workflow
  12. 1 tool update
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cues": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "gain": {
        -              "maximum": -10,
        -              "minimum": -36,
        -              "type": "number"
        -            },
        -            "name": {
        -              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        -              "type": "string"
        -            },
        -            "on": {
        -              "maximum": 9007199254740991,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "name"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 8,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "scene_sounds",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "cues"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "frame": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "fit": {
        -                "enum": [
        -                  "contain",
        -                  "cover"
        -                ],
        -                "type": "string"
        -              },
        -              "ratio": {
        -                "enum": [
        -                  "9:16",
        -                  "16:9",
        -                  "1:1",
        -                  "4:5"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "ratio",
        -              "fit"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "output_frame",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "frame"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "put_overlay",
        -        "type": "string"
        -      },
        -      "overlay": {
        -        "oneOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "align": {
        -                "enum": [
        -                  "left",
        -                  "center",
        -                  "right"
        -                ],
        -                "type": "string"
        -              },
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "color": {
        -                "pattern": "^#[a-f0-9]{6}$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "font": {
        -                "enum": [
        -                  "Inter-Medium",
        -                  "Poppins-SemiBold",
        -                  "Roboto"
        -                ],
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 0.2,
        -                "minimum": 0.015,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "text",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "text",
        -              "font",
        -              "fontSize",
        -              "color"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "assetId": {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "image",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "assetId"
        -            ],
        -            "type": "object"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "overlay"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_overlay",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "layout": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 4,
        -                "minimum": 0.1,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "x",
        -              "y",
        -              "scale",
        -              "rotation"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "layout",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "layout"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edit": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "color": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "edit"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "offset": {
        +              "maximum": 3600,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "frame": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fit": {
        +                "enum": [
        +                  "contain",
        +                  "cover"
        +                ],
        +                "type": "string"
        +              },
        +              "ratio": {
        +                "enum": [
        +                  "9:16",
        +                  "16:9",
        +                  "1:1",
        +                  "4:5"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "ratio",
        +              "fit"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "output_frame",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "frame"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
  13. 1 tool update
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cues": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "gain": {
        -              "maximum": -10,
        -              "minimum": -36,
        -              "type": "number"
        -            },
        -            "name": {
        -              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        -              "type": "string"
        -            },
        -            "on": {
        -              "maximum": 9007199254740991,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "name"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 8,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "scene_sounds",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "cues"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "put_overlay",
        -        "type": "string"
        -      },
        -      "overlay": {
        -        "oneOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "align": {
        -                "enum": [
        -                  "left",
        -                  "center",
        -                  "right"
        -                ],
        -                "type": "string"
        -              },
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "color": {
        -                "pattern": "^#[a-f0-9]{6}$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "font": {
        -                "enum": [
        -                  "Inter-Medium",
        -                  "Poppins-SemiBold",
        -                  "Roboto"
        -                ],
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 0.2,
        -                "minimum": 0.015,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "text",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "text",
        -              "font",
        -              "fontSize",
        -              "color"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "animation": {
        -                "enum": [
        -                  "none",
        -                  "fade",
        -                  "slide",
        -                  "pop"
        -                ],
        -                "type": "string"
        -              },
        -              "assetId": {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "end": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "height": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "id": {
        -                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "const": "image",
        -                "type": "string"
        -              },
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "start": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "width": {
        -                "maximum": 1,
        -                "minimum": 0.02,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "start",
        -              "end",
        -              "x",
        -              "y",
        -              "width",
        -              "height",
        -              "kind",
        -              "assetId"
        -            ],
        -            "type": "object"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "overlay"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "remove_overlay",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "layout": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "rotation": {
        -                "maximum": 180,
        -                "minimum": -180,
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 4,
        -                "minimum": 0.1,
        -                "type": "number"
        -              },
        -              "x": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              },
        -              "y": {
        -                "maximum": 1,
        -                "minimum": -1,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "x",
        -              "y",
        -              "scale",
        -              "rotation"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "op": {
        -        "const": "layout",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "layout"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edit": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "color": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "hidden": {
        -                "type": "boolean"
        -              },
        -              "text": {
        -                "maxLength": 300,
        -                "minLength": 1,
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "element": {
        -        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "element",
        -      "edit"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "frame": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fit": {
        +                "enum": [
        +                  "contain",
        +                  "cover"
        +                ],
        +                "type": "string"
        +              },
        +              "ratio": {
        +                "enum": [
        +                  "9:16",
        +                  "16:9",
        +                  "1:1",
        +                  "4:5"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "ratio",
        +              "fit"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "output_frame",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "frame"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
  14. 1 tool update
    • Changededit_video3 fields changed
      • addedInput schema / properties / names
        Added value: +{
        +  "description": "Exact person, company and product names to spell correctly in this video; not a lasting account rule.",
        +  "items": {
        +    "maxLength": 80,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • addedInput schema / properties / speaker_company
        Added value: +{
        +  "description": "The speaker's company or business, spelled exactly for this video.",
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / spellings
        Added value: +{
        +  "additionalProperties": {
        +    "maxLength": 80,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "description": "Explicit heard-to-correct spelling pairs for this video, for example {\"KMAC\":\"KMAK\"}.",
        +  "propertyNames": {
        +    "maxLength": 80,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  15. 9 tool updates
    • Changedapply_edits1 field changed
      • changedInput schema / properties / ops / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "remove",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "replace_screen",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "screen": {
        -        "additionalProperties": {},
        -        "description": "A screen in the shape get_project_context shows for that scene.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "screen"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "set_text",
        -        "type": "string"
        -      },
        -      "path": {
        -        "description": "Which text, e.g. 'screen.title'.",
        -        "maxLength": 80,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "text": {
        -        "maxLength": 600,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "path",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asset_id": {
        -        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        -        "maxLength": 200,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "op": {
        -        "const": "swap_picture",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "asset_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "move",
        -        "type": "string"
        -      },
        -      "scene_id": {
        -        "description": "A scene id (sceneId) from get_project_context.",
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "scene_id",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "anyOf": [
        -          {
        -            "description": "A scene id (sceneId) from get_project_context.",
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The scene it follows; null for the start."
        -      },
        -      "op": {
        -        "const": "add",
        -        "type": "string"
        -      },
        -      "scene": {
        -        "additionalProperties": {},
        -        "description": "The new scene, shaped like the others.",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "after",
        -      "scene"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "cut_words",
        -        "type": "string"
        -      },
        -      "words": {
        -        "description": "[first, last] word numbers from the transcript in get_project_context.",
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 2,
        -        "minItems": 2,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "words"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "add": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      },
        -      "op": {
        -        "const": "emphasis",
        -        "type": "string"
        -      },
        -      "remove": {
        -        "items": {
        -          "maximum": 9007199254740991,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "maxItems": 200,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "op"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "captions": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "position": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "size": {
        -            "maxLength": 20,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "style": {
        -            "maxLength": 40,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "op": {
        -        "const": "captions",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "captions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "op": {
        -        "const": "sound",
        -        "type": "string"
        -      },
        -      "sound_effects": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "op",
        -      "sound_effects"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "remove",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "replace_screen",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "screen": {
        +        "additionalProperties": {},
        +        "description": "A screen in the shape get_project_context shows for that scene.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "screen"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "set_text",
        +        "type": "string"
        +      },
        +      "path": {
        +        "description": "Which text, e.g. 'screen.title'.",
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 600,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "path",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asset_id": {
        +        "description": "A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "swap_picture",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "asset_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "move",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after": {
        +        "anyOf": [
        +          {
        +            "description": "A scene id (sceneId) from get_project_context.",
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The scene it follows; null for the start."
        +      },
        +      "op": {
        +        "const": "add",
        +        "type": "string"
        +      },
        +      "scene": {
        +        "additionalProperties": {},
        +        "description": "The new scene, shaped like the others.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "after",
        +      "scene"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "cut_words",
        +        "type": "string"
        +      },
        +      "words": {
        +        "description": "[first, last] word numbers from the transcript in get_project_context.",
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 2,
        +        "minItems": 2,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "words"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "add": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "emphasis",
        +        "type": "string"
        +      },
        +      "remove": {
        +        "items": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "maxItems": 200,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "captions": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "position": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "size": {
        +            "maxLength": 20,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "style": {
        +            "maxLength": 40,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "op": {
        +        "const": "captions",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "captions"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "sound",
        +        "type": "string"
        +      },
        +      "sound_effects": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "sound_effects"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cues": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "gain": {
        +              "maximum": -10,
        +              "minimum": -36,
        +              "type": "number"
        +            },
        +            "name": {
        +              "pattern": "^[a-z][a-z0-9.]{0,60}$",
        +              "type": "string"
        +            },
        +            "on": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 8,
        +        "type": "array"
        +      },
        +      "op": {
        +        "const": "scene_sounds",
        +        "type": "string"
        +      },
        +      "scene_id": {
        +        "description": "A scene id (sceneId) from get_project_context.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scene_id",
        +      "cues"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "put_overlay",
        +        "type": "string"
        +      },
        +      "overlay": {
        +        "oneOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "align": {
        +                "enum": [
        +                  "left",
        +                  "center",
        +                  "right"
        +                ],
        +                "type": "string"
        +              },
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "color": {
        +                "pattern": "^#[a-f0-9]{6}$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "font": {
        +                "enum": [
        +                  "Inter-Medium",
        +                  "Poppins-SemiBold",
        +                  "Roboto"
        +                ],
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 0.2,
        +                "minimum": 0.015,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "text",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "text",
        +              "font",
        +              "fontSize",
        +              "color"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "animation": {
        +                "enum": [
        +                  "none",
        +                  "fade",
        +                  "slide",
        +                  "pop"
        +                ],
        +                "type": "string"
        +              },
        +              "assetId": {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "end": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "height": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "id": {
        +                "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "const": "image",
        +                "type": "string"
        +              },
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "start": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "width": {
        +                "maximum": 1,
        +                "minimum": 0.02,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "start",
        +              "end",
        +              "x",
        +              "y",
        +              "width",
        +              "height",
        +              "kind",
        +              "assetId"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "overlay"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "pattern": "^ov_[A-Za-z0-9_-]{1,64}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_overlay",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "layout": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "rotation": {
        +                "maximum": 180,
        +                "minimum": -180,
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 4,
        +                "minimum": 0.1,
        +                "type": "number"
        +              },
        +              "x": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              },
        +              "y": {
        +                "maximum": 1,
        +                "minimum": -1,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "x",
        +              "y",
        +              "scale",
        +              "rotation"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "op": {
        +        "const": "layout",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "layout"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "edit": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "color": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "hidden": {
        +                "type": "boolean"
        +              },
        +              "text": {
        +                "maxLength": 300,
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "element": {
        +        "pattern": "^[A-Za-z0-9:_-]{1,160}$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "element",
        +      "edit"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedbrowse_styles2 fields changed
      • addedOutput schema / properties / styles / items / properties / preview_credits_url
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / styles / items / properties / preview_shape
        Added value: +{
        +  "enum": [
        +    "9:16",
        +    "16:9"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_video2 fields changed
      • addedInput schema / properties / music_bed
        Added value: +{
        +  "description": "true: lay the style's own music bed under the narration (none unless asked); false: never. music_staging_key brings a song of your own instead.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / voice / description
        Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."
    • Changedcreate_videos2 fields changed
      • changedInput schema / properties / defaults / properties / voice / description
        Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."
      • changedInput schema / properties / items / items / properties / voice / description
        Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."
    • Changededit_video2 fields changed
      • changedInput schema / properties / style_id / description
        Previous value: -"A style id from browse_styles, e.g. serif-editorial-launch, bold-navy-statement, warm, luxe, brand, intro, or a saved style of your own (my-...)."New value: +"A style id from browse_styles, e.g. serif-editorial-launch, bold-navy-statement, crimson-serif-explainer, warm, luxe, brand, or a saved style of your own (my-...)."
      • changedInput schema / properties / voice / description
        Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."
    • Changedget_project_context2 fields changed
      • addedInput schema / properties / element_offset
        Added value: +{
        +  "maximum": 100000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / output_id
        Added value: +{
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedimport_asset5 fields changed
      • addedInput schema / properties / file / description
        Added value: +"A file attached in ChatGPT. Hosts that cannot attach files send url instead."
      • addedInput schema / properties / file_name
        Added value: +{
        +  "description": "A name for the file.",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / logo
        Added value: +{
        +  "description": "true when the image is the brand's logo: the video uses it as the brand's mark.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "A public https link to the image (PNG, JPEG, WebP, GIF) or song (MP3, WAV, M4A), up to 32 MiB. Use it from Claude or any host that cannot attach a file: the direct link to the file itself, not a page that shows it.",
        +  "format": "uri",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "operation_id",
        -  "file"
        -]New value: +[
        +  "operation_id"
        +]
    • Changedplan_content1 field changed
      • changedInput schema / properties / voice / description
        Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."
    • Changedrevise_video1 field changed
      • changedInput schema / properties / voice / description
        Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources