Skip to main content
Glama

edit_captions

Destructive

The default path for caption/subtitle tweaks: read_captions, then edit wording/spelling, grouping, emphasis, presets, style, layout or translation here. Use set_card_text for what viewers read; source transcription and audible speech stay unchanged. Caption polish needs no source-transcript repair or raw transcript-file edits. For a new look, discover published ordinary/animated presets with template and use their returned previewOptions/applyActions.

Shared appearance, templates and position belong on the caption track: use style/template/layout with trackId (renderer uses sourceId). A selected Card identifies its track; it does not imply a one-Card change. Reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions. Never copy resolved track appearance into every item's appearanceOverride: those values override later track edits. Preserve unrelated authored exceptions.

All caption tooling requires topology v2: real caption tracks/items, never legacy Program/Cue operations. On v1, ONLY action="refresh" is allowed. It converts saved captions to v2 without regenerating them; then read_captions and continue. Reads and other actions never implicitly migrate, reconcile or edit v1.

Start with read_captions (or track_items {"operation":"read"}). It returns caption track ids, compact projections, a revision, and availableSources with separate media track ids/labels. Caption C1/C2 and media V1/A1 are different identities. Never invent ids, captionConfig fields, or a languageCode at the top of a stored track.

Style example: action="style", json {"trackId":"","fontFamily":"Montserrat","captionStyle":{"version":1,"container":{"fontSize":"54px","fontWeight":800,"lineHeight":1.1,"letterSpacing":"-0.02em","textTransform":"uppercase"},"token":{"color":"#FCFCF6"},"activeToken":{"color":"#F8F622"}}}. Font weights accept numbers or strings; lineHeight accepts a positive ratio (number or numeric string) or px/em. CSS lengths, including signed letterSpacing, preserve their units. Flat captionStyle typography/paint aliases normalize into slots; do not specify the same property twice. Desktop uses its own native style model, not this CSS sheet.

Successful writes return a compact receipt with status, revision and bounded changed/created/deleted IDs, not a caption page. Use its revision for the next edit and read_captions with limit/cardId/frame filters for content. A host output-size error after a write is not proof the edit failed: read the current state before retrying.

Native actions:

  • template: discover published templates (optional offset/query/languageCode). Recommend only available publishedTemplates, including motion-graphic entries for animated or distinctive captions. Use returned previewOptions.presetId for embedded widget cards or previewOptions.captionPreview for external visual cards; preserve the returned language and revision. Apply with {catalogTemplateId,languageCode,trackId}. This copies appearance only, preserving destination caption text and timing. Legacy templatePreset remains accepted for existing selections. Pass the actual caption language: all non-CJK languages share the general preset family; CJK uses its own family with preferred authored typography. Never substitute between the two families or claim an unavailable preview works.

  • enable / disable: change global CC only; never erase or regenerate captions.

  • source_list: read caption tracks and available media sources, including hidden tracks.

  • translate: {"languageCode":"zh","mode":"bilingual"}, then {"languageCode":"ja","mode":"bilingual"} adds both requested languages as separate sourced caption tracks, preserving the original and existing translations. Translation uses saved original caption text, not manage_transcript. Omit force to reuse existing translations. Optional trackId selects an ORIGINAL caption track (or its media source); do not select a translated track as the original. mode:"translation" hides only the selected original. primary:"translation" places the new language above its original; otherwise it is placed below. Read back and inspect actual frames.

  • refresh: update sourced unlocked tracks, retaining authored pages and cached translations when transcript translations are absent.

  • style / template / layout: edit native caption track appearance and geometry. Optional json trackId (or sourceId) selects a caption track; omit to affect all visible unlocked tracks. style uses captionStyle CSS slots with fontFamily/fontFallbacks, presentation and pagination; familiar color/sizePx aliases normalize to the same native appearance. template with no selector discovers published templates; use its returned applyActions for the chosen template. layout accepts left/top/width/height or preset bottom/top/center (and title-safe top-left etc.). These never change source selection.

  • set_card_text / set_card_style / set_card_layout / set_card_tokens / set_card_span_style / split_card / merge_cards: native item edits, using cardId and current revision from read_captions. Keep revision inside json. Span style uses exact text, optional occurrence/languageCode, and sibling style/activeStyle. Token edits use tokenId with optional text/fromFrame/endFrame. Split beforeWordKey or beforeWordKeys uses real token ids; merge cardIds must be adjacent items on one track. New item ids and revision are returned; reread after structural edits.

  • set_card_emphasis: semantic selection only, with {cardId,revision,spans:[{text,emphasis:true|false|"auto",occurrence?,languageCode?}]}. Exact-text matching follows set_card_span_style. true selects explicitly; false suppresses without selecting a replacement; "auto" removes that exact semantic override. Any explicit semantic annotation switches the Card to manual selection. Text, timing, token ids and CSS remain unchanged. set_card_span_style also accepts emphasis with optional style; style:null clears CSS while preserving emphasis. read_captions with words:true returns projected words and resolvedEmphasis.

  • renderer: read/set native track or item code using inline code and optional properties. sourceId selects a caption track; cardId plus revision selects an item. Omit code to read, code:null to clear. The shared Web caption-renderer validator still applies. Caption code reads useSpecialEffects().caption_v1; do not create MG assets.

  • batch: top-level revision plus 1–100 synchronous edits {action,...json fields}. Applies atomically to native rows; any failure writes nothing. Allowed edits: set_card_text, set_card_style, set_card_layout, set_card_span_style, set_card_emphasis, set_card_tokens, split_card, merge_cards. Translation/generation/render requests are not batch edits.

  • track_items: JSON operations below. Omitted trackId on generate means all sourced unlocked caption tracks, not a media track. To generate a new original track, create it first and use the returned caption track id.

If an original track already has one requested language (e.g. Chinese speech), keep it and translate only missing languages; do not duplicate Chinese as a translation of Chinese. Word edits fromFrame/endFrame are absolute timeline frames; saved token.from is relative to its Card and may be negative.

track_items examples (json is a JSON string in the tool arguments): {"operation":"create-track","name":"Original","source":{"trackId":""}} {"operation":"create-track","name":"Notes","source":null} {"operation":"generate","trackId":""} {"operation":"update-track","trackId":"","hidden":false,"appearance":{"captionStyle":{"version":1,"token":{"color":"#ffffff"}}}} {"operation":"create-item","trackId":"","from":30,"durationInFrames":60,"text":"Manual subtitle"} {"operation":"update-item","itemId":"","text":"Corrected display wording"} {"operation":"update-item","itemId":"","appearance":{"top":700,"width":1200}} {"operation":"move","itemIds":[""],"trackId":""} {"operation":"delete-items","itemIds":[""]} {"operation":"delete-track","trackId":""} {"operation":"settings","enabled":true} {"operation":"settings"} reads settings without changing them.

Chinese script is a reversible content-display setting, independent of language/translation. Use {"operation":"update-track","trackId":"...","appearance":{"presentationOverride":{"chineseScript":"simplified"}}} or the same appearance patch in update-item. Values are original (no conversion), simplified and traditional. OpenCC converts display text in preview/export and read_captions; authored text, source transcript, IDs and timings are preserved. Visual preset/template changes preserve this setting. Do not rewrite every item's text to convert Chinese.

create-track supplies UUID, timelineId, trackType, order, visibility, locking, appearance and suppressedBindings defaults. update-track/update-item patch only supplied fields. Appearance uses captionStyle CSS slots, captionTemplateKey, fontFamily/fontFallbacks, presentationOverride, paginationOverride and geometry left/top/width/height; use canonical native field names, not legacy style aliases. read_captions omits renderer source and reconciliation internals: its compact projections are not complete upsert-track/upsert-item rows. Use incremental operations instead. New manual items use binding:null. A move preserves identity and appearance, suppresses old automatic generation and detaches incompatible source bindings atomically. New text/timing edits are marked authored. Optional revision on any operation rejects stale reads; every write is additionally input-revision fenced. Send edits sequentially.

No legacy fallback exists. source_add/source_update/set_sources/source_layout/positions/layout_policy/cue_* and legacy preset/reset actions are not part of this contract. Use native track creation/patches, item edits and explicit generation instead. Track-wide appearance changes preserve content/timing. Shared source-transcript repair is a separate explicitly requested task, not a first step for caption edits.

Tool call template

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

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

Input Schema

NameRequiredDescriptionDefault
codeNoFor renderer: inline caption JSX using implicit caption_v1. Omit to read; null clears code. Not a file or MG asset. If this host has the active MG Skill's caption_v1 and Web renderer safety references, read them in full before renderer source changes.
jsonNoThe default path for caption/subtitle tweaks: read_captions, then edit wording/spelling, grouping, emphasis, presets, style, layout or translation here. Use set_card_text for what viewers read; source transcription and audible speech stay unchanged. Caption polish needs no source-transcript repair or raw transcript-file edits. For a new look, discover published ordinary/animated presets with template and use their returned previewOptions/applyActions. Shared appearance, templates and position belong on the caption track: use style/template/layout with trackId (renderer uses sourceId). A selected Card identifies its track; it does not imply a one-Card change. Reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions. Never copy resolved track appearance into every item's appearanceOverride: those values override later track edits. Preserve unrelated authored exceptions. All caption tooling requires topology v2: real caption tracks/items, never legacy Program/Cue operations. On v1, ONLY action="refresh" is allowed. It converts saved captions to v2 without regenerating them; then read_captions and continue. Reads and other actions never implicitly migrate, reconcile or edit v1. Start with read_captions (or track_items {"operation":"read"}). It returns caption track ids, compact projections, a revision, and availableSources with separate media track ids/labels. Caption C1/C2 and media V1/A1 are different identities. Never invent ids, captionConfig fields, or a languageCode at the top of a stored track. Style example: action="style", json {"trackId":"<caption track id>","fontFamily":"Montserrat","captionStyle":{"version":1,"container":{"fontSize":"54px","fontWeight":800,"lineHeight":1.1,"letterSpacing":"-0.02em","textTransform":"uppercase"},"token":{"color":"#FCFCF6"},"activeToken":{"color":"#F8F622"}}}. Font weights accept numbers or strings; lineHeight accepts a positive ratio (number or numeric string) or px/em. CSS lengths, including signed letterSpacing, preserve their units. Flat captionStyle typography/paint aliases normalize into slots; do not specify the same property twice. Desktop uses its own native style model, not this CSS sheet. Successful writes return a compact receipt with status, revision and bounded changed/created/deleted IDs, not a caption page. Use its revision for the next edit and read_captions with limit/cardId/frame filters for content. A host output-size error after a write is not proof the edit failed: read the current state before retrying. Native actions: - template: discover published templates (optional offset/query/languageCode). Recommend only available publishedTemplates, including motion-graphic entries for animated or distinctive captions. Use returned previewOptions.presetId for embedded widget cards or previewOptions.captionPreview for external visual cards; preserve the returned language and revision. Apply with {catalogTemplateId,languageCode,trackId}. This copies appearance only, preserving destination caption text and timing. Legacy templatePreset remains accepted for existing selections. Pass the actual caption language: all non-CJK languages share the general preset family; CJK uses its own family with preferred authored typography. Never substitute between the two families or claim an unavailable preview works. - enable / disable: change global CC only; never erase or regenerate captions. - source_list: read caption tracks and available media sources, including hidden tracks. - translate: {"languageCode":"zh","mode":"bilingual"}, then {"languageCode":"ja","mode":"bilingual"} adds both requested languages as separate sourced caption tracks, preserving the original and existing translations. Translation uses saved original caption text, not manage_transcript. Omit force to reuse existing translations. Optional trackId selects an ORIGINAL caption track (or its media source); do not select a translated track as the original. mode:"translation" hides only the selected original. primary:"translation" places the new language above its original; otherwise it is placed below. Read back and inspect actual frames. - refresh: update sourced unlocked tracks, retaining authored pages and cached translations when transcript translations are absent. - style / template / layout: edit native caption track appearance and geometry. Optional json trackId (or sourceId) selects a caption track; omit to affect all visible unlocked tracks. style uses captionStyle CSS slots with fontFamily/fontFallbacks, presentation and pagination; familiar color/sizePx aliases normalize to the same native appearance. template with no selector discovers published templates; use its returned applyActions for the chosen template. layout accepts left/top/width/height or preset bottom/top/center (and title-safe top-left etc.). These never change source selection. - set_card_text / set_card_style / set_card_layout / set_card_tokens / set_card_span_style / split_card / merge_cards: native item edits, using cardId and current revision from read_captions. Keep revision inside json. Span style uses exact text, optional occurrence/languageCode, and sibling style/activeStyle. Token edits use tokenId with optional text/fromFrame/endFrame. Split beforeWordKey or beforeWordKeys uses real token ids; merge cardIds must be adjacent items on one track. New item ids and revision are returned; reread after structural edits. - set_card_emphasis: semantic selection only, with {cardId,revision,spans:[{text,emphasis:true|false|"auto",occurrence?,languageCode?}]}. Exact-text matching follows set_card_span_style. true selects explicitly; false suppresses without selecting a replacement; "auto" removes that exact semantic override. Any explicit semantic annotation switches the Card to manual selection. Text, timing, token ids and CSS remain unchanged. set_card_span_style also accepts emphasis with optional style; style:null clears CSS while preserving emphasis. read_captions with words:true returns projected words and resolvedEmphasis. - renderer: read/set native track or item code using inline code and optional properties. sourceId selects a caption track; cardId plus revision selects an item. Omit code to read, code:null to clear. The shared Web caption-renderer validator still applies. Caption code reads useSpecialEffects().caption_v1; do not create MG assets. - batch: top-level revision plus 1–100 synchronous edits {action,...json fields}. Applies atomically to native rows; any failure writes nothing. Allowed edits: set_card_text, set_card_style, set_card_layout, set_card_span_style, set_card_emphasis, set_card_tokens, split_card, merge_cards. Translation/generation/render requests are not batch edits. - track_items: JSON operations below. Omitted trackId on generate means all sourced unlocked caption tracks, not a media track. To generate a new original track, create it first and use the returned caption track id. If an original track already has one requested language (e.g. Chinese speech), keep it and translate only missing languages; do not duplicate Chinese as a translation of Chinese. Word edits fromFrame/endFrame are absolute timeline frames; saved token.from is relative to its Card and may be negative. track_items examples (json is a JSON string in the tool arguments): {"operation":"create-track","name":"Original","source":{"trackId":"<media track id from availableSources>"}} {"operation":"create-track","name":"Notes","source":null} {"operation":"generate","trackId":"<returned caption track id>"} {"operation":"update-track","trackId":"<caption track id>","hidden":false,"appearance":{"captionStyle":{"version":1,"token":{"color":"#ffffff"}}}} {"operation":"create-item","trackId":"<caption track id>","from":30,"durationInFrames":60,"text":"Manual subtitle"} {"operation":"update-item","itemId":"<caption item id>","text":"Corrected display wording"} {"operation":"update-item","itemId":"<caption item id>","appearance":{"top":700,"width":1200}} {"operation":"move","itemIds":["<caption item id>"],"trackId":"<destination caption track id>"} {"operation":"delete-items","itemIds":["<caption item id>"]} {"operation":"delete-track","trackId":"<caption track id>"} {"operation":"settings","enabled":true} {"operation":"settings"} reads settings without changing them. Chinese script is a reversible content-display setting, independent of language/translation. Use {"operation":"update-track","trackId":"...","appearance":{"presentationOverride":{"chineseScript":"simplified"}}} or the same appearance patch in update-item. Values are original (no conversion), simplified and traditional. OpenCC converts display text in preview/export and read_captions; authored text, source transcript, IDs and timings are preserved. Visual preset/template changes preserve this setting. Do not rewrite every item's text to convert Chinese. create-track supplies UUID, timelineId, trackType, order, visibility, locking, appearance and suppressedBindings defaults. update-track/update-item patch only supplied fields. Appearance uses captionStyle CSS slots, captionTemplateKey, fontFamily/fontFallbacks, presentationOverride, paginationOverride and geometry left/top/width/height; use canonical native field names, not legacy style aliases. read_captions omits renderer source and reconciliation internals: its compact projections are not complete upsert-track/upsert-item rows. Use incremental operations instead. New manual items use binding:null. A move preserves identity and appearance, suppresses old automatic generation and detaches incompatible source bindings atomically. New text/timing edits are marked authored. Optional revision on any operation rejects stale reads; every write is additionally input-revision fenced. Send edits sequentially. No legacy fallback exists. source_add/source_update/set_sources/source_layout/positions/layout_policy/cue_* and legacy preset/reset actions are not part of this contract. Use native track creation/patches, item edits and explicit generation instead. Track-wide appearance changes preserve content/timing. Shared source-transcript repair is a separate explicitly requested task, not a first step for caption edits.
listNoFor action="track", list:true is a read-only alias of source_list.
editsNoNative synchronous Card edits applied atomically; a failure writes nothing. Top-level revision required, no json.
actionYesNative caption operation. V1 permits ONLY refresh to convert saved captions to v2; all other reads/edits require v2.
cardIdNoNative caption item id for renderer; other Card actions keep cardId inside json.
presetNoBuilt-in preset alias for templatePreset with action=template.
trackIdNoNative caption track id; alternatively put trackId in json for style/layout. Media V1/A1 labels are availableSources, not caption tracks.
revisionNoCurrent read_captions revision for batch and renderer item writes. Other item actions keep revision inside json.
sourceIdNoNative caption track id, not a media source id. Used by renderer/style/layout.
projectIdNoProject for this call (full ID or unambiguous prefix). Explicit-timeline calls never change the target of later calls; legacy project selection applies otherwise.
propertiesNoFor renderer: editable property definitions. Omit to retain existing definitions; null clears.
timelineIdNoOptional target timeline UUID; must match this invocation's working timeline.
templatePresetNoBuilt-in preset id from action=template. Omit to list the catalog. Applying preserves timing, geometry and pagination.
chatcutSpecialEffectUsedNoFor renderer with code: request Web tracking/raw-transcription protocols in addition to implicit caption_v1. Requests follow the caption source and are stored with the scoped renderer. Omit to retain scoped requests unless code includes its own header; null or [] clears. Optional Web-only media-analysis declarations. Omit for ordinary Motion Graphics, effects and caption edits; preserve existing declarations on unrelated revisions. Transitions and Desktop do not support these readers. caption_v1 is supplied only to caption-owned code.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / code / description
      Previous value: -"For renderer: inline caption JSX using implicit caption_v1. Omit to read; null clears code. Not a file or MG asset."New value: +"For renderer: inline caption JSX using implicit caption_v1. Omit to read; null clears code. Not a file or MG asset. If this host has the active MG Skill's caption_v1 and Web renderer safety references, read them in full before renderer source changes."
    • changedInput schema / properties / json / description
      Previous value: -"Before renderer source changes, read the active MG Skill's caption_v1 and Web renderer safety references in full.\n\nThe default path for caption/subtitle tweaks: read_captions, then edit wording/spelling, grouping, emphasis, presets, style, layout or translation here. Use set_card_text for what viewers read; source transcription and audible speech stay unchanged. Caption polish needs no source-transcript repair or raw transcript-file edits. For a new look, discover published ordinary/animated presets with template and use their returned previewOptions/applyActions.\n\nShared appearance, templates and position belong on the caption track: use style/template/layout with trackId (renderer uses sourceId). A selected Card identifies its track; it does not imply a one-Card change. Reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions. Never copy resolved track appearance into every item's appearanceOverride: those values override later track edits. Preserve unrelated authored exceptions.\n\nAll caption tooling requires topology v2: real caption tracks/items, never legacy Program/Cue operations. On v1, ONLY action=\"refresh\" is allowed. It converts saved captions to v2 without regenerating them; then read_captions and continue. Reads and other actions never implicitly migrate, reconcile or edit v1.\n\nStart with read_captions (or track_items {\"operation\":\"read\"}). It returns caption track ids, compact projections, a revision, and availableSources with separate media track ids/labels. Caption C1/C2 and media V1/A1 are different identities. Never invent ids, captionConfig fields, or a languageCode at the top of a stored track.\n\nStyle example: action=\"style\", json {\"trackId\":\"<caption track id>\",\"fontFamily\":\"Montserrat\",\"captionStyle\":{\"version\":1,\"container\":{\"fontSize\":\"54px\",\"fontWeight\":800,\"lineHeight\":1.1,\"letterSpacing\":\"-0.02em\",\"textTransform\":\"uppercase\"},\"token\":{\"color\":\"#FCFCF6\"},\"activeToken\":{\"color\":\"#F8F622\"}}}. Font weights accept numbers or strings; lineHeight accepts a positive ratio (number or numeric string) or px/em. CSS lengths, including signed letterSpacing, preserve their units. Flat captionStyle typography/paint aliases normalize into slots; do not specify the same property twice. Desktop uses its own native style model, not this CSS sheet.\n\nSuccessful writes return a compact receipt with status, revision and bounded changed/created/deleted IDs, not a caption page. Use its revision for the next edit and read_captions with limit/cardId/frame filters for content. A host output-size error after a write is not proof the edit failed: read the current state before retrying.\n\nNative actions:\n- template: discover published templates (optional offset/query/languageCode). Recommend only available publishedTemplates, including motion-graphic entries for animated or distinctive captions. Use returned previewOptions.presetId for embedded widget cards or previewOptions.captionPreview for external visual cards; preserve the returned language and revision. Apply with {catalogTemplateId,languageCode,trackId}. This copies appearance only, preserving destination caption text and timing. Legacy templatePreset remains accepted for existing selections. Pass the actual caption language: all non-CJK languages share the general preset family; CJK uses its own family with preferred authored typography. Never substitute between the two families or claim an unavailable preview works.\n- enable / disable: change global CC only; never erase or regenerate captions.\n- source_list: read caption tracks and available media sources, including hidden tracks.\n- translate: {\"languageCode\":\"zh\",\"mode\":\"bilingual\"}, then {\"languageCode\":\"ja\",\"mode\":\"bilingual\"} adds both requested languages as separate sourced caption tracks, preserving the original and existing translations. Translation uses saved original caption text, not manage_transcript. Omit force to reuse existing translations. Optional trackId selects an ORIGINAL caption track (or its media source); do not select a translated track as the original. mode:\"translation\" hides only the selected original. primary:\"translation\" places the new language above its original; otherwise it is placed below. Read back and inspect actual frames.\n- refresh: update sourced unlocked tracks, retaining authored pages and cached translations when transcript translations are absent.\n- style / template / layout: edit native caption track appearance and geometry. Optional json trackId (or sourceId) selects a caption track; omit to affect all visible unlocked tracks. style uses captionStyle CSS slots with fontFamily/fontFallbacks, presentation and pagination; familiar color/sizePx aliases normalize to the same native appearance. template with no selector discovers published templates; use its returned applyActions for the chosen template. layout accepts left/top/width/height or preset bottom/top/center (and title-safe top-left etc.). These never change source selection.\n- set_card_text / set_card_style / set_card_layout / set_card_tokens / set_card_span_style / split_card / merge_cards: native item edits, using cardId and current revision from read_captions. Keep revision inside json. Span style uses exact text, optional occurrence/languageCode, and sibling style/activeStyle. Token edits use tokenId with optional text/fromFrame/endFrame. Split beforeWordKey or beforeWordKeys uses real token ids; merge cardIds must be adjacent items on one track. New item ids and revision are returned; reread after structural edits.\n- set_card_emphasis: semantic selection only, with {cardId,revision,spans:[{text,emphasis:true|false|\"auto\",occurrence?,languageCode?}]}. Exact-text matching follows set_card_span_style. true selects explicitly; false suppresses without selecting a replacement; \"auto\" removes that exact semantic override. Any explicit semantic annotation switches the Card to manual selection. Text, timing, token ids and CSS remain unchanged. set_card_span_style also accepts emphasis with optional style; style:null clears CSS while preserving emphasis. read_captions with words:true returns projected words and resolvedEmphasis.\n- renderer: read/set native track or item code using inline code and optional properties. sourceId selects a caption track; cardId plus revision selects an item. Omit code to read, code:null to clear. The shared Web caption-renderer validator still applies. Caption code reads useSpecialEffects().caption_v1; do not create MG assets.\n- batch: top-level revision plus 1–100 synchronous edits {action,...json fields}. Applies atomically to native rows; any failure writes nothing. Allowed edits: set_card_text, set_card_style, set_card_layout, set_card_span_style, set_card_emphasis, set_card_tokens, split_card, merge_cards. Translation/generation/render requests are not batch edits.\n- track_items: JSON operations below. Omitted trackId on generate means all sourced unlocked caption tracks, not a media track. To generate a new original track, create it first and use the returned caption track id.\n\nIf an original track already has one requested language (e.g. Chinese speech), keep it and translate only missing languages; do not duplicate Chinese as a translation of Chinese. Word edits fromFrame/endFrame are absolute timeline frames; saved token.from is relative to its Card and may be negative.\n\ntrack_items examples (json is a JSON string in the tool arguments):\n{\"operation\":\"create-track\",\"name\":\"Original\",\"source\":{\"trackId\":\"<media track id from availableSources>\"}}\n{\"operation\":\"create-track\",\"name\":\"Notes\",\"source\":null}\n{\"operation\":\"generate\",\"trackId\":\"<returned caption track id>\"}\n{\"operation\":\"update-track\",\"trackId\":\"<caption track id>\",\"hidden\":false,\"appearance\":{\"captionStyle\":{\"version\":1,\"token\":{\"color\":\"#ffffff\"}}}}\n{\"operation\":\"create-item\",\"trackId\":\"<caption track id>\",\"from\":30,\"durationInFrames\":60,\"text\":\"Manual subtitle\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"text\":\"Corrected display wording\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"appearance\":{\"top\":700,\"width\":1200}}\n{\"operation\":\"move\",\"itemIds\":[\"<caption item id>\"],\"trackId\":\"<destination caption track id>\"}\n{\"operation\":\"delete-items\",\"itemIds\":[\"<caption item id>\"]}\n{\"operation\":\"delete-track\",\"trackId\":\"<caption track id>\"}\n{\"operation\":\"settings\",\"enabled\":true}\n{\"operation\":\"settings\"} reads settings without changing them.\n\nChinese script is a reversible content-display setting, independent of language/translation. Use {\"operation\":\"update-track\",\"trackId\":\"...\",\"appearance\":{\"presentationOverride\":{\"chineseScript\":\"simplified\"}}} or the same appearance patch in update-item. Values are original (no conversion), simplified and traditional. OpenCC converts display text in preview/export and read_captions; authored text, source transcript, IDs and timings are preserved. Visual preset/template changes preserve this setting. Do not rewrite every item's text to convert Chinese.\n\ncreate-track supplies UUID, timelineId, trackType, order, visibility, locking, appearance and suppressedBindings defaults. update-track/update-item patch only supplied fields. Appearance uses captionStyle CSS slots, captionTemplateKey, fontFamily/fontFallbacks, presentationOverride, paginationOverride and geometry left/top/width/height; use canonical native field names, not legacy style aliases. read_captions omits renderer source and reconciliation internals: its compact projections are not complete upsert-track/upsert-item rows. Use incremental operations instead. New manual items use binding:null. A move preserves identity and appearance, suppresses old automatic generation and detaches incompatible source bindings atomically. New text/timing edits are marked authored. Optional revision on any operation rejects stale reads; every write is additionally input-revision fenced. Send edits sequentially.\n\nNo legacy fallback exists. source_add/source_update/set_sources/source_layout/positions/layout_policy/cue_* and legacy preset/reset actions are not part of this contract. Use native track creation/patches, item edits and explicit generation instead. Track-wide appearance changes preserve content/timing. Shared source-transcript repair is a separate explicitly requested task, not a first step for caption edits."New value: +"The default path for caption/subtitle tweaks: read_captions, then edit wording/spelling, grouping, emphasis, presets, style, layout or translation here. Use set_card_text for what viewers read; source transcription and audible speech stay unchanged. Caption polish needs no source-transcript repair or raw transcript-file edits. For a new look, discover published ordinary/animated presets with template and use their returned previewOptions/applyActions.\n\nShared appearance, templates and position belong on the caption track: use style/template/layout with trackId (renderer uses sourceId). A selected Card identifies its track; it does not imply a one-Card change. Reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions. Never copy resolved track appearance into every item's appearanceOverride: those values override later track edits. Preserve unrelated authored exceptions.\n\nAll caption tooling requires topology v2: real caption tracks/items, never legacy Program/Cue operations. On v1, ONLY action=\"refresh\" is allowed. It converts saved captions to v2 without regenerating them; then read_captions and continue. Reads and other actions never implicitly migrate, reconcile or edit v1.\n\nStart with read_captions (or track_items {\"operation\":\"read\"}). It returns caption track ids, compact projections, a revision, and availableSources with separate media track ids/labels. Caption C1/C2 and media V1/A1 are different identities. Never invent ids, captionConfig fields, or a languageCode at the top of a stored track.\n\nStyle example: action=\"style\", json {\"trackId\":\"<caption track id>\",\"fontFamily\":\"Montserrat\",\"captionStyle\":{\"version\":1,\"container\":{\"fontSize\":\"54px\",\"fontWeight\":800,\"lineHeight\":1.1,\"letterSpacing\":\"-0.02em\",\"textTransform\":\"uppercase\"},\"token\":{\"color\":\"#FCFCF6\"},\"activeToken\":{\"color\":\"#F8F622\"}}}. Font weights accept numbers or strings; lineHeight accepts a positive ratio (number or numeric string) or px/em. CSS lengths, including signed letterSpacing, preserve their units. Flat captionStyle typography/paint aliases normalize into slots; do not specify the same property twice. Desktop uses its own native style model, not this CSS sheet.\n\nSuccessful writes return a compact receipt with status, revision and bounded changed/created/deleted IDs, not a caption page. Use its revision for the next edit and read_captions with limit/cardId/frame filters for content. A host output-size error after a write is not proof the edit failed: read the current state before retrying.\n\nNative actions:\n- template: discover published templates (optional offset/query/languageCode). Recommend only available publishedTemplates, including motion-graphic entries for animated or distinctive captions. Use returned previewOptions.presetId for embedded widget cards or previewOptions.captionPreview for external visual cards; preserve the returned language and revision. Apply with {catalogTemplateId,languageCode,trackId}. This copies appearance only, preserving destination caption text and timing. Legacy templatePreset remains accepted for existing selections. Pass the actual caption language: all non-CJK languages share the general preset family; CJK uses its own family with preferred authored typography. Never substitute between the two families or claim an unavailable preview works.\n- enable / disable: change global CC only; never erase or regenerate captions.\n- source_list: read caption tracks and available media sources, including hidden tracks.\n- translate: {\"languageCode\":\"zh\",\"mode\":\"bilingual\"}, then {\"languageCode\":\"ja\",\"mode\":\"bilingual\"} adds both requested languages as separate sourced caption tracks, preserving the original and existing translations. Translation uses saved original caption text, not manage_transcript. Omit force to reuse existing translations. Optional trackId selects an ORIGINAL caption track (or its media source); do not select a translated track as the original. mode:\"translation\" hides only the selected original. primary:\"translation\" places the new language above its original; otherwise it is placed below. Read back and inspect actual frames.\n- refresh: update sourced unlocked tracks, retaining authored pages and cached translations when transcript translations are absent.\n- style / template / layout: edit native caption track appearance and geometry. Optional json trackId (or sourceId) selects a caption track; omit to affect all visible unlocked tracks. style uses captionStyle CSS slots with fontFamily/fontFallbacks, presentation and pagination; familiar color/sizePx aliases normalize to the same native appearance. template with no selector discovers published templates; use its returned applyActions for the chosen template. layout accepts left/top/width/height or preset bottom/top/center (and title-safe top-left etc.). These never change source selection.\n- set_card_text / set_card_style / set_card_layout / set_card_tokens / set_card_span_style / split_card / merge_cards: native item edits, using cardId and current revision from read_captions. Keep revision inside json. Span style uses exact text, optional occurrence/languageCode, and sibling style/activeStyle. Token edits use tokenId with optional text/fromFrame/endFrame. Split beforeWordKey or beforeWordKeys uses real token ids; merge cardIds must be adjacent items on one track. New item ids and revision are returned; reread after structural edits.\n- set_card_emphasis: semantic selection only, with {cardId,revision,spans:[{text,emphasis:true|false|\"auto\",occurrence?,languageCode?}]}. Exact-text matching follows set_card_span_style. true selects explicitly; false suppresses without selecting a replacement; \"auto\" removes that exact semantic override. Any explicit semantic annotation switches the Card to manual selection. Text, timing, token ids and CSS remain unchanged. set_card_span_style also accepts emphasis with optional style; style:null clears CSS while preserving emphasis. read_captions with words:true returns projected words and resolvedEmphasis.\n- renderer: read/set native track or item code using inline code and optional properties. sourceId selects a caption track; cardId plus revision selects an item. Omit code to read, code:null to clear. The shared Web caption-renderer validator still applies. Caption code reads useSpecialEffects().caption_v1; do not create MG assets.\n- batch: top-level revision plus 1–100 synchronous edits {action,...json fields}. Applies atomically to native rows; any failure writes nothing. Allowed edits: set_card_text, set_card_style, set_card_layout, set_card_span_style, set_card_emphasis, set_card_tokens, split_card, merge_cards. Translation/generation/render requests are not batch edits.\n- track_items: JSON operations below. Omitted trackId on generate means all sourced unlocked caption tracks, not a media track. To generate a new original track, create it first and use the returned caption track id.\n\nIf an original track already has one requested language (e.g. Chinese speech), keep it and translate only missing languages; do not duplicate Chinese as a translation of Chinese. Word edits fromFrame/endFrame are absolute timeline frames; saved token.from is relative to its Card and may be negative.\n\ntrack_items examples (json is a JSON string in the tool arguments):\n{\"operation\":\"create-track\",\"name\":\"Original\",\"source\":{\"trackId\":\"<media track id from availableSources>\"}}\n{\"operation\":\"create-track\",\"name\":\"Notes\",\"source\":null}\n{\"operation\":\"generate\",\"trackId\":\"<returned caption track id>\"}\n{\"operation\":\"update-track\",\"trackId\":\"<caption track id>\",\"hidden\":false,\"appearance\":{\"captionStyle\":{\"version\":1,\"token\":{\"color\":\"#ffffff\"}}}}\n{\"operation\":\"create-item\",\"trackId\":\"<caption track id>\",\"from\":30,\"durationInFrames\":60,\"text\":\"Manual subtitle\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"text\":\"Corrected display wording\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"appearance\":{\"top\":700,\"width\":1200}}\n{\"operation\":\"move\",\"itemIds\":[\"<caption item id>\"],\"trackId\":\"<destination caption track id>\"}\n{\"operation\":\"delete-items\",\"itemIds\":[\"<caption item id>\"]}\n{\"operation\":\"delete-track\",\"trackId\":\"<caption track id>\"}\n{\"operation\":\"settings\",\"enabled\":true}\n{\"operation\":\"settings\"} reads settings without changing them.\n\nChinese script is a reversible content-display setting, independent of language/translation. Use {\"operation\":\"update-track\",\"trackId\":\"...\",\"appearance\":{\"presentationOverride\":{\"chineseScript\":\"simplified\"}}} or the same appearance patch in update-item. Values are original (no conversion), simplified and traditional. OpenCC converts display text in preview/export and read_captions; authored text, source transcript, IDs and timings are preserved. Visual preset/template changes preserve this setting. Do not rewrite every item's text to convert Chinese.\n\ncreate-track supplies UUID, timelineId, trackType, order, visibility, locking, appearance and suppressedBindings defaults. update-track/update-item patch only supplied fields. Appearance uses captionStyle CSS slots, captionTemplateKey, fontFamily/fontFallbacks, presentationOverride, paginationOverride and geometry left/top/width/height; use canonical native field names, not legacy style aliases. read_captions omits renderer source and reconciliation internals: its compact projections are not complete upsert-track/upsert-item rows. Use incremental operations instead. New manual items use binding:null. A move preserves identity and appearance, suppresses old automatic generation and detaches incompatible source bindings atomically. New text/timing edits are marked authored. Optional revision on any operation rejects stale reads; every write is additionally input-revision fenced. Send edits sequentially.\n\nNo legacy fallback exists. source_add/source_update/set_sources/source_layout/positions/layout_policy/cue_* and legacy preset/reset actions are not part of this contract. Use native track creation/patches, item edits and explicit generation instead. Track-wide appearance changes preserve content/timing. Shared source-transcript repair is a separate explicitly requested task, not a first step for caption edits."
  2. Changed1 schema field changed
    • changedInput schema / properties / json / description
      Previous value: -"The default path for caption/subtitle tweaks: read_captions, then edit wording/spelling, grouping, emphasis, presets, style, layout or translation here. Use set_card_text for what viewers read; source transcription and audible speech stay unchanged. Caption polish needs no source-transcript repair or raw transcript-file edits. For a new look, discover published ordinary/animated presets with template and use their returned previewOptions/applyActions.\n\nShared appearance, templates and position belong on the caption track: use style/template/layout with trackId (renderer uses sourceId). A selected Card identifies its track; it does not imply a one-Card change. Reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions. Never copy resolved track appearance into every item's appearanceOverride: those values override later track edits. Preserve unrelated authored exceptions.\n\nAll caption tooling requires topology v2: real caption tracks/items, never legacy Program/Cue operations. On v1, ONLY action=\"refresh\" is allowed. It converts saved captions to v2 without regenerating them; then read_captions and continue. Reads and other actions never implicitly migrate, reconcile or edit v1.\n\nStart with read_captions (or track_items {\"operation\":\"read\"}). It returns caption track ids, compact projections, a revision, and availableSources with separate media track ids/labels. Caption C1/C2 and media V1/A1 are different identities. Never invent ids, captionConfig fields, or a languageCode at the top of a stored track.\n\nStyle example: action=\"style\", json {\"trackId\":\"<caption track id>\",\"fontFamily\":\"Montserrat\",\"captionStyle\":{\"version\":1,\"container\":{\"fontSize\":\"54px\",\"fontWeight\":800,\"lineHeight\":1.1,\"letterSpacing\":\"-0.02em\",\"textTransform\":\"uppercase\"},\"token\":{\"color\":\"#FCFCF6\"},\"activeToken\":{\"color\":\"#F8F622\"}}}. Font weights accept numbers or strings; lineHeight accepts a positive ratio (number or numeric string) or px/em. CSS lengths, including signed letterSpacing, preserve their units. Flat captionStyle typography/paint aliases normalize into slots; do not specify the same property twice. Desktop uses its own native style model, not this CSS sheet.\n\nSuccessful writes return a compact receipt with status, revision and bounded changed/created/deleted IDs, not a caption page. Use its revision for the next edit and read_captions with limit/cardId/frame filters for content. A host output-size error after a write is not proof the edit failed: read the current state before retrying.\n\nNative actions:\n- template: discover published templates (optional offset/query/languageCode). Recommend only available publishedTemplates, including motion-graphic entries for animated or distinctive captions. Use returned previewOptions.presetId for embedded widget cards or previewOptions.captionPreview for external visual cards; preserve the returned language and revision. Apply with {catalogTemplateId,languageCode,trackId}. This copies appearance only, preserving destination caption text and timing. Legacy templatePreset remains accepted for existing selections. Pass the actual caption language: all non-CJK languages share the general preset family; CJK uses its own family with preferred authored typography. Never substitute between the two families or claim an unavailable preview works.\n- enable / disable: change global CC only; never erase or regenerate captions.\n- source_list: read caption tracks and available media sources, including hidden tracks.\n- translate: {\"languageCode\":\"zh\",\"mode\":\"bilingual\"}, then {\"languageCode\":\"ja\",\"mode\":\"bilingual\"} adds both requested languages as separate sourced caption tracks, preserving the original and existing translations. Translation uses saved original caption text, not manage_transcript. Omit force to reuse existing translations. Optional trackId selects an ORIGINAL caption track (or its media source); do not select a translated track as the original. mode:\"translation\" hides only the selected original. primary:\"translation\" places the new language above its original; otherwise it is placed below. Read back and inspect actual frames.\n- refresh: update sourced unlocked tracks, retaining authored pages and cached translations when transcript translations are absent.\n- style / template / layout: edit native caption track appearance and geometry. Optional json trackId (or sourceId) selects a caption track; omit to affect all visible unlocked tracks. style uses captionStyle CSS slots with fontFamily/fontFallbacks, presentation and pagination; familiar color/sizePx aliases normalize to the same native appearance. template with no selector discovers published templates; use its returned applyActions for the chosen template. layout accepts left/top/width/height or preset bottom/top/center (and title-safe top-left etc.). These never change source selection.\n- set_card_text / set_card_style / set_card_layout / set_card_tokens / set_card_span_style / split_card / merge_cards: native item edits, using cardId and current revision from read_captions. Keep revision inside json. Span style uses exact text, optional occurrence/languageCode, and sibling style/activeStyle. Token edits use tokenId with optional text/fromFrame/endFrame. Split beforeWordKey or beforeWordKeys uses real token ids; merge cardIds must be adjacent items on one track. New item ids and revision are returned; reread after structural edits.\n- set_card_emphasis: semantic selection only, with {cardId,revision,spans:[{text,emphasis:true|false|\"auto\",occurrence?,languageCode?}]}. Exact-text matching follows set_card_span_style. true selects explicitly; false suppresses without selecting a replacement; \"auto\" removes that exact semantic override. Any explicit semantic annotation switches the Card to manual selection. Text, timing, token ids and CSS remain unchanged. set_card_span_style also accepts emphasis with optional style; style:null clears CSS while preserving emphasis. read_captions with words:true returns projected words and resolvedEmphasis.\n- renderer: read/set native track or item code using inline code and optional properties. sourceId selects a caption track; cardId plus revision selects an item. Omit code to read, code:null to clear. The shared Web caption-renderer validator still applies. Caption code reads useSpecialEffects().caption_v1; do not create MG assets.\n- batch: top-level revision plus 1–100 synchronous edits {action,...json fields}. Applies atomically to native rows; any failure writes nothing. Allowed edits: set_card_text, set_card_style, set_card_layout, set_card_span_style, set_card_emphasis, set_card_tokens, split_card, merge_cards. Translation/generation/render requests are not batch edits.\n- track_items: JSON operations below. Omitted trackId on generate means all sourced unlocked caption tracks, not a media track. To generate a new original track, create it first and use the returned caption track id.\n\nIf an original track already has one requested language (e.g. Chinese speech), keep it and translate only missing languages; do not duplicate Chinese as a translation of Chinese. Word edits fromFrame/endFrame are absolute timeline frames; saved token.from is relative to its Card and may be negative.\n\ntrack_items examples (json is a JSON string in the tool arguments):\n{\"operation\":\"create-track\",\"name\":\"Original\",\"source\":{\"trackId\":\"<media track id from availableSources>\"}}\n{\"operation\":\"create-track\",\"name\":\"Notes\",\"source\":null}\n{\"operation\":\"generate\",\"trackId\":\"<returned caption track id>\"}\n{\"operation\":\"update-track\",\"trackId\":\"<caption track id>\",\"hidden\":false,\"appearance\":{\"captionStyle\":{\"version\":1,\"token\":{\"color\":\"#ffffff\"}}}}\n{\"operation\":\"create-item\",\"trackId\":\"<caption track id>\",\"from\":30,\"durationInFrames\":60,\"text\":\"Manual subtitle\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"text\":\"Corrected display wording\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"appearance\":{\"top\":700,\"width\":1200}}\n{\"operation\":\"move\",\"itemIds\":[\"<caption item id>\"],\"trackId\":\"<destination caption track id>\"}\n{\"operation\":\"delete-items\",\"itemIds\":[\"<caption item id>\"]}\n{\"operation\":\"delete-track\",\"trackId\":\"<caption track id>\"}\n{\"operation\":\"settings\",\"enabled\":true}\n{\"operation\":\"settings\"} reads settings without changing them.\n\nChinese script is a reversible content-display setting, independent of language/translation. Use {\"operation\":\"update-track\",\"trackId\":\"...\",\"appearance\":{\"presentationOverride\":{\"chineseScript\":\"simplified\"}}} or the same appearance patch in update-item. Values are original (no conversion), simplified and traditional. OpenCC converts display text in preview/export and read_captions; authored text, source transcript, IDs and timings are preserved. Visual preset/template changes preserve this setting. Do not rewrite every item's text to convert Chinese.\n\ncreate-track supplies UUID, timelineId, trackType, order, visibility, locking, appearance and suppressedBindings defaults. update-track/update-item patch only supplied fields. Appearance uses captionStyle CSS slots, captionTemplateKey, fontFamily/fontFallbacks, presentationOverride, paginationOverride and geometry left/top/width/height; use canonical native field names, not legacy style aliases. read_captions omits renderer source and reconciliation internals: its compact projections are not complete upsert-track/upsert-item rows. Use incremental operations instead. New manual items use binding:null. A move preserves identity and appearance, suppresses old automatic generation and detaches incompatible source bindings atomically. New text/timing edits are marked authored. Optional revision on any operation rejects stale reads; every write is additionally input-revision fenced. Send edits sequentially.\n\nNo legacy fallback exists. source_add/source_update/set_sources/source_layout/positions/layout_policy/cue_* and legacy preset/reset actions are not part of this contract. Use native track creation/patches, item edits and explicit generation instead. Track-wide appearance changes preserve content/timing. Shared source-transcript repair is a separate explicitly requested task, not a first step for caption edits."New value: +"Before renderer source changes, read the active MG Skill's caption_v1 and Web renderer safety references in full.\n\nThe default path for caption/subtitle tweaks: read_captions, then edit wording/spelling, grouping, emphasis, presets, style, layout or translation here. Use set_card_text for what viewers read; source transcription and audible speech stay unchanged. Caption polish needs no source-transcript repair or raw transcript-file edits. For a new look, discover published ordinary/animated presets with template and use their returned previewOptions/applyActions.\n\nShared appearance, templates and position belong on the caption track: use style/template/layout with trackId (renderer uses sourceId). A selected Card identifies its track; it does not imply a one-Card change. Reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions. Never copy resolved track appearance into every item's appearanceOverride: those values override later track edits. Preserve unrelated authored exceptions.\n\nAll caption tooling requires topology v2: real caption tracks/items, never legacy Program/Cue operations. On v1, ONLY action=\"refresh\" is allowed. It converts saved captions to v2 without regenerating them; then read_captions and continue. Reads and other actions never implicitly migrate, reconcile or edit v1.\n\nStart with read_captions (or track_items {\"operation\":\"read\"}). It returns caption track ids, compact projections, a revision, and availableSources with separate media track ids/labels. Caption C1/C2 and media V1/A1 are different identities. Never invent ids, captionConfig fields, or a languageCode at the top of a stored track.\n\nStyle example: action=\"style\", json {\"trackId\":\"<caption track id>\",\"fontFamily\":\"Montserrat\",\"captionStyle\":{\"version\":1,\"container\":{\"fontSize\":\"54px\",\"fontWeight\":800,\"lineHeight\":1.1,\"letterSpacing\":\"-0.02em\",\"textTransform\":\"uppercase\"},\"token\":{\"color\":\"#FCFCF6\"},\"activeToken\":{\"color\":\"#F8F622\"}}}. Font weights accept numbers or strings; lineHeight accepts a positive ratio (number or numeric string) or px/em. CSS lengths, including signed letterSpacing, preserve their units. Flat captionStyle typography/paint aliases normalize into slots; do not specify the same property twice. Desktop uses its own native style model, not this CSS sheet.\n\nSuccessful writes return a compact receipt with status, revision and bounded changed/created/deleted IDs, not a caption page. Use its revision for the next edit and read_captions with limit/cardId/frame filters for content. A host output-size error after a write is not proof the edit failed: read the current state before retrying.\n\nNative actions:\n- template: discover published templates (optional offset/query/languageCode). Recommend only available publishedTemplates, including motion-graphic entries for animated or distinctive captions. Use returned previewOptions.presetId for embedded widget cards or previewOptions.captionPreview for external visual cards; preserve the returned language and revision. Apply with {catalogTemplateId,languageCode,trackId}. This copies appearance only, preserving destination caption text and timing. Legacy templatePreset remains accepted for existing selections. Pass the actual caption language: all non-CJK languages share the general preset family; CJK uses its own family with preferred authored typography. Never substitute between the two families or claim an unavailable preview works.\n- enable / disable: change global CC only; never erase or regenerate captions.\n- source_list: read caption tracks and available media sources, including hidden tracks.\n- translate: {\"languageCode\":\"zh\",\"mode\":\"bilingual\"}, then {\"languageCode\":\"ja\",\"mode\":\"bilingual\"} adds both requested languages as separate sourced caption tracks, preserving the original and existing translations. Translation uses saved original caption text, not manage_transcript. Omit force to reuse existing translations. Optional trackId selects an ORIGINAL caption track (or its media source); do not select a translated track as the original. mode:\"translation\" hides only the selected original. primary:\"translation\" places the new language above its original; otherwise it is placed below. Read back and inspect actual frames.\n- refresh: update sourced unlocked tracks, retaining authored pages and cached translations when transcript translations are absent.\n- style / template / layout: edit native caption track appearance and geometry. Optional json trackId (or sourceId) selects a caption track; omit to affect all visible unlocked tracks. style uses captionStyle CSS slots with fontFamily/fontFallbacks, presentation and pagination; familiar color/sizePx aliases normalize to the same native appearance. template with no selector discovers published templates; use its returned applyActions for the chosen template. layout accepts left/top/width/height or preset bottom/top/center (and title-safe top-left etc.). These never change source selection.\n- set_card_text / set_card_style / set_card_layout / set_card_tokens / set_card_span_style / split_card / merge_cards: native item edits, using cardId and current revision from read_captions. Keep revision inside json. Span style uses exact text, optional occurrence/languageCode, and sibling style/activeStyle. Token edits use tokenId with optional text/fromFrame/endFrame. Split beforeWordKey or beforeWordKeys uses real token ids; merge cardIds must be adjacent items on one track. New item ids and revision are returned; reread after structural edits.\n- set_card_emphasis: semantic selection only, with {cardId,revision,spans:[{text,emphasis:true|false|\"auto\",occurrence?,languageCode?}]}. Exact-text matching follows set_card_span_style. true selects explicitly; false suppresses without selecting a replacement; \"auto\" removes that exact semantic override. Any explicit semantic annotation switches the Card to manual selection. Text, timing, token ids and CSS remain unchanged. set_card_span_style also accepts emphasis with optional style; style:null clears CSS while preserving emphasis. read_captions with words:true returns projected words and resolvedEmphasis.\n- renderer: read/set native track or item code using inline code and optional properties. sourceId selects a caption track; cardId plus revision selects an item. Omit code to read, code:null to clear. The shared Web caption-renderer validator still applies. Caption code reads useSpecialEffects().caption_v1; do not create MG assets.\n- batch: top-level revision plus 1–100 synchronous edits {action,...json fields}. Applies atomically to native rows; any failure writes nothing. Allowed edits: set_card_text, set_card_style, set_card_layout, set_card_span_style, set_card_emphasis, set_card_tokens, split_card, merge_cards. Translation/generation/render requests are not batch edits.\n- track_items: JSON operations below. Omitted trackId on generate means all sourced unlocked caption tracks, not a media track. To generate a new original track, create it first and use the returned caption track id.\n\nIf an original track already has one requested language (e.g. Chinese speech), keep it and translate only missing languages; do not duplicate Chinese as a translation of Chinese. Word edits fromFrame/endFrame are absolute timeline frames; saved token.from is relative to its Card and may be negative.\n\ntrack_items examples (json is a JSON string in the tool arguments):\n{\"operation\":\"create-track\",\"name\":\"Original\",\"source\":{\"trackId\":\"<media track id from availableSources>\"}}\n{\"operation\":\"create-track\",\"name\":\"Notes\",\"source\":null}\n{\"operation\":\"generate\",\"trackId\":\"<returned caption track id>\"}\n{\"operation\":\"update-track\",\"trackId\":\"<caption track id>\",\"hidden\":false,\"appearance\":{\"captionStyle\":{\"version\":1,\"token\":{\"color\":\"#ffffff\"}}}}\n{\"operation\":\"create-item\",\"trackId\":\"<caption track id>\",\"from\":30,\"durationInFrames\":60,\"text\":\"Manual subtitle\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"text\":\"Corrected display wording\"}\n{\"operation\":\"update-item\",\"itemId\":\"<caption item id>\",\"appearance\":{\"top\":700,\"width\":1200}}\n{\"operation\":\"move\",\"itemIds\":[\"<caption item id>\"],\"trackId\":\"<destination caption track id>\"}\n{\"operation\":\"delete-items\",\"itemIds\":[\"<caption item id>\"]}\n{\"operation\":\"delete-track\",\"trackId\":\"<caption track id>\"}\n{\"operation\":\"settings\",\"enabled\":true}\n{\"operation\":\"settings\"} reads settings without changing them.\n\nChinese script is a reversible content-display setting, independent of language/translation. Use {\"operation\":\"update-track\",\"trackId\":\"...\",\"appearance\":{\"presentationOverride\":{\"chineseScript\":\"simplified\"}}} or the same appearance patch in update-item. Values are original (no conversion), simplified and traditional. OpenCC converts display text in preview/export and read_captions; authored text, source transcript, IDs and timings are preserved. Visual preset/template changes preserve this setting. Do not rewrite every item's text to convert Chinese.\n\ncreate-track supplies UUID, timelineId, trackType, order, visibility, locking, appearance and suppressedBindings defaults. update-track/update-item patch only supplied fields. Appearance uses captionStyle CSS slots, captionTemplateKey, fontFamily/fontFallbacks, presentationOverride, paginationOverride and geometry left/top/width/height; use canonical native field names, not legacy style aliases. read_captions omits renderer source and reconciliation internals: its compact projections are not complete upsert-track/upsert-item rows. Use incremental operations instead. New manual items use binding:null. A move preserves identity and appearance, suppresses old automatic generation and detaches incompatible source bindings atomically. New text/timing edits are marked authored. Optional revision on any operation rejects stale reads; every write is additionally input-revision fenced. Send edits sequentially.\n\nNo legacy fallback exists. source_add/source_update/set_sources/source_layout/positions/layout_policy/cue_* and legacy preset/reset actions are not part of this contract. Use native track creation/patches, item edits and explicit generation instead. Track-wide appearance changes preserve content/timing. Shared source-transcript repair is a separate explicitly requested task, not a first step for caption edits."
  3. Changed3 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / chatcutSpecialEffectUsed / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "anyOf": [
      -        {
      -          "enum": [
      -            "face_tracking_v1",
      -            "body_tracking_v1",
      -            "body_outline_v1",
      -            "face_detection_v1",
      -            "hand_tracking_v1",
      -            "gesture_tracking_v1",
      -            "holistic_tracking_v1",
      -            "object_tracking_v1",
      -            "segmentation_v1",
      -            "interactive_segmentation_v1",
      -            "image_classification_v1",
      -            "image_embedding_v1",
      -            "planar_tracking_v1",
      -            "transcription_v1"
      -          ],
      -          "type": "string"
      -        },
      -        {
      -          "additionalProperties": false,
      -          "properties": {
      -            "effect": {
      -              "enum": [
      -                "face_tracking_v1",
      -                "body_tracking_v1",
      -                "body_outline_v1",
      -                "face_detection_v1",
      -                "hand_tracking_v1",
      -                "gesture_tracking_v1",
      -                "holistic_tracking_v1",
      -                "object_tracking_v1",
      -                "segmentation_v1",
      -                "interactive_segmentation_v1",
      -                "image_classification_v1",
      -                "image_embedding_v1",
      -                "planar_tracking_v1"
      -              ],
      -              "type": "string"
      -            },
      -            "inputTrackId": {
      -              "description": "Source track ID or unambiguous ID prefix from the active timeline. Prefer an explicit track; omitted or unavailable tracks use the nearest compatible neighbour.",
      -              "maxLength": 128,
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "preset": {
      -              "default": "quality",
      -              "enum": [
      -                "fast",
      -                "balanced",
      -                "quality"
      -              ],
      -              "type": "string"
      -            },
      -            "processing": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "blendshapes": {
      -                  "type": "boolean"
      -                },
      -                "categories": {
      -                  "items": {
      -                    "maxLength": 100,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "maxItems": 32,
      -                  "type": "array"
      -                },
      -                "contourResolution": {
      -                  "anyOf": [
      -                    {
      -                      "const": 64,
      -                      "type": "number"
      -                    },
      -                    {
      -                      "const": 128,
      -                      "type": "number"
      -                    },
      -                    {
      -                      "const": 256,
      -                      "type": "number"
      -                    },
      -                    {
      -                      "const": 512,
      -                      "type": "number"
      -                    }
      -                  ]
      -                },
      -                "delegate": {
      -                  "enum": [
      -                    "auto",
      -                    "GPU",
      -                    "CPU"
      -                  ],
      -                  "type": "string"
      -                },
      -                "detectionConfidence": {
      -                  "maximum": 1,
      -                  "minimum": 0,
      -                  "type": "number"
      -                },
      -                "inputMax": {
      -                  "maximum": 1920,
      -                  "minimum": 128,
      -                  "type": "integer"
      -                },
      -                "maskThreshold": {
      -                  "maximum": 0.99,
      -                  "minimum": 0.01,
      -                  "type": "number"
      -                },
      -                "maxSubjects": {
      -                  "maximum": 8,
      -                  "minimum": 1,
      -                  "type": "integer"
      -                },
      -                "model": {
      -                  "maxLength": 64,
      -                  "minLength": 1,
      -                  "type": "string"
      -                },
      -                "presenceConfidence": {
      -                  "maximum": 1,
      -                  "minimum": 0,
      -                  "type": "number"
      -                },
      -                "sampleRate": {
      -                  "anyOf": [
      -                    {
      -                      "const": "native",
      -                      "type": "string"
      -                    },
      -                    {
      -                      "exclusiveMinimum": 0,
      -                      "maximum": 120,
      -                      "type": "number"
      -                    }
      -                  ]
      -                },
      -                "scoreThreshold": {
      -                  "maximum": 1,
      -                  "minimum": 0,
      -                  "type": "number"
      -                },
      -                "stabilization": {
      -                  "additionalProperties": false,
      -                  "properties": {
      -                    "enabled": {
      -                      "type": "boolean"
      -                    },
      -                    "motionCompensation": {
      -                      "type": "boolean"
      -                    },
      -                    "region": {
      -                      "enum": [
      -                        "head",
      -                        "subject"
      -                      ],
      -                      "type": "string"
      -                    },
      -                    "spatialSmoothing": {
      -                      "maximum": 3,
      -                      "minimum": 0,
      -                      "type": "number"
      -                    },
      -                    "strength": {
      -                      "maximum": 1,
      -                      "minimum": 0,
      -                      "type": "number"
      -                    },
      -                    "window": {
      -                      "maximum": 21,
      -                      "minimum": 1,
      -                      "type": "integer"
      -                    }
      -                  },
      -                  "type": "object"
      -                },
      -                "trackingConfidence": {
      -                  "maximum": 1,
      -                  "minimum": 0,
      -                  "type": "number"
      -                },
      -                "transformationMatrices": {
      -                  "type": "boolean"
      -                },
      -                "worldLandmarks": {
      -                  "type": "boolean"
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "target": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "category": {
      -                  "maxLength": 100,
      -                  "minLength": 1,
      -                  "type": "string"
      -                },
      -                "lostAfterSeconds": {
      -                  "default": 0.25,
      -                  "maximum": 2,
      -                  "minimum": 0,
      -                  "type": "number"
      -                },
      -                "seed": {
      -                  "additionalProperties": false,
      -                  "properties": {
      -                    "box": {
      -                      "additionalProperties": false,
      -                      "properties": {
      -                        "height": {
      -                          "exclusiveMinimum": 0,
      -                          "maximum": 1,
      -                          "type": "number"
      -                        },
      -                        "width": {
      -                          "exclusiveMinimum": 0,
      -                          "maximum": 1,
      -                          "type": "number"
      -                        },
      -                        "x": {
      -                          "maximum": 1,
      -                          "minimum": 0,
      -                          "type": "number"
      -                        },
      -                        "y": {
      -                          "maximum": 1,
      -                          "minimum": 0,
      -                          "type": "number"
      -                        }
      -                      },
      -                      "required": [
      -                        "x",
      -                        "y",
      -                        "width",
      -                        "height"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "point": {
      -                      "additionalProperties": false,
      -                      "properties": {
      -                        "x": {
      -                          "maximum": 1,
      -                          "minimum": 0,
      -                          "type": "number"
      -                        },
      -                        "y": {
      -                          "maximum": 1,
      -                          "minimum": 0,
      -                          "type": "number"
      -                        }
      -                      },
      -                      "required": [
      -                        "x",
      -                        "y"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "quad": {
      -                      "additionalItems": false,
      -                      "items": [
      -                        {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "x": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "y": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            }
      -                          },
      -                          "required": [
      -                            "x",
      -                            "y"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "x": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "y": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            }
      -                          },
      -                          "required": [
      -                            "x",
      -                            "y"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "x": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "y": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            }
      -                          },
      -                          "required": [
      -                            "x",
      -                            "y"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "x": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "y": {
      -                              "maximum": 1,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            }
      -                          },
      -                          "required": [
      -                            "x",
      -                            "y"
      -                          ],
      -                          "type": "object"
      -                        }
      -                      ],
      -                      "maxItems": 4,
      -                      "minItems": 4,
      -                      "type": "array"
      -                    },
      -                    "sourceTimeSeconds": {
      -                      "maximum": 86400,
      -                      "minimum": 0,
      -                      "type": "number"
      -                    }
      -                  },
      -                  "required": [
      -                    "sourceTimeSeconds"
      -                  ],
      -                  "type": "object"
      -                }
      -              },
      -              "required": [
      -                "seed"
      -              ],
      -              "type": "object"
      -            }
      -          },
      -          "required": [
      -            "effect"
      -          ],
      -          "type": "object"
      -        },
      -        {
      -          "additionalProperties": false,
      -          "properties": {
      -            "effect": {
      -              "const": "transcription_v1",
      -              "type": "string"
      -            },
      -            "inputTrackId": {
      -              "description": "Source track ID or unambiguous ID prefix from the active timeline. Prefer an explicit track; omitted or unavailable tracks use the nearest compatible neighbour.",
      -              "maxLength": 128,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "effect"
      -          ],
      -          "type": "object"
      -        }
      -      ]
      -    },
      -    "maxItems": 14,
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "face_tracking_v1",
      +            "body_tracking_v1",
      +            "body_outline_v1",
      +            "face_detection_v1",
      +            "hand_tracking_v1",
      +            "gesture_tracking_v1",
      +            "holistic_tracking_v1",
      +            "object_tracking_v1",
      +            "segmentation_v1",
      +            "interactive_segmentation_v1",
      +            "image_classification_v1",
      +            "image_embedding_v1",
      +            "planar_tracking_v1",
      +            "transcription_v1"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "effect": {
      +              "enum": [
      +                "face_tracking_v1",
      +                "body_tracking_v1",
      +                "body_outline_v1",
      +                "face_detection_v1",
      +                "hand_tracking_v1",
      +                "gesture_tracking_v1",
      +                "holistic_tracking_v1",
      +                "object_tracking_v1",
      +                "segmentation_v1",
      +                "interactive_segmentation_v1",
      +                "image_classification_v1",
      +                "image_embedding_v1",
      +                "planar_tracking_v1"
      +              ],
      +              "type": "string"
      +            },
      +            "inputTrackId": {
      +              "description": "Source track ID or unambiguous ID prefix from the active timeline. Prefer an explicit track; omitted or unavailable tracks use the nearest compatible neighbour.",
      +              "maxLength": 128,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "preset": {
      +              "default": "quality",
      +              "enum": [
      +                "fast",
      +                "balanced",
      +                "quality"
      +              ],
      +              "type": "string"
      +            },
      +            "processing": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "blendshapes": {
      +                  "type": "boolean"
      +                },
      +                "categories": {
      +                  "items": {
      +                    "maxLength": 100,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "maxItems": 32,
      +                  "type": "array"
      +                },
      +                "contourResolution": {
      +                  "anyOf": [
      +                    {
      +                      "const": 64,
      +                      "type": "number"
      +                    },
      +                    {
      +                      "const": 128,
      +                      "type": "number"
      +                    },
      +                    {
      +                      "const": 256,
      +                      "type": "number"
      +                    },
      +                    {
      +                      "const": 512,
      +                      "type": "number"
      +                    }
      +                  ]
      +                },
      +                "delegate": {
      +                  "enum": [
      +                    "auto",
      +                    "GPU",
      +                    "CPU"
      +                  ],
      +                  "type": "string"
      +                },
      +                "detectionConfidence": {
      +                  "maximum": 1,
      +                  "minimum": 0,
      +                  "type": "number"
      +                },
      +                "inputMax": {
      +                  "maximum": 1920,
      +                  "minimum": 128,
      +                  "type": "integer"
      +                },
      +                "maskThreshold": {
      +                  "maximum": 0.99,
      +                  "minimum": 0.01,
      +                  "type": "number"
      +                },
      +                "maxSubjects": {
      +                  "maximum": 8,
      +                  "minimum": 1,
      +                  "type": "integer"
      +                },
      +                "model": {
      +                  "maxLength": 64,
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "presenceConfidence": {
      +                  "maximum": 1,
      +                  "minimum": 0,
      +                  "type": "number"
      +                },
      +                "sampleRate": {
      +                  "anyOf": [
      +                    {
      +                      "const": "native",
      +                      "type": "string"
      +                    },
      +                    {
      +                      "exclusiveMinimum": 0,
      +                      "maximum": 120,
      +                      "type": "number"
      +                    }
      +                  ]
      +                },
      +                "scoreThreshold": {
      +                  "maximum": 1,
      +                  "minimum": 0,
      +                  "type": "number"
      +                },
      +                "stabilization": {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "enabled": {
      +                      "type": "boolean"
      +                    },
      +                    "motionCompensation": {
      +                      "type": "boolean"
      +                    },
      +                    "region": {
      +                      "enum": [
      +                        "head",
      +                        "subject"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "spatialSmoothing": {
      +                      "maximum": 3,
      +                      "minimum": 0,
      +                      "type": "number"
      +                    },
      +                    "strength": {
      +                      "maximum": 1,
      +                      "minimum": 0,
      +                      "type": "number"
      +                    },
      +                    "window": {
      +                      "maximum": 21,
      +                      "minimum": 1,
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "trackingConfidence": {
      +                  "maximum": 1,
      +                  "minimum": 0,
      +                  "type": "number"
      +                },
      +                "transformationMatrices": {
      +                  "type": "boolean"
      +                },
      +                "worldLandmarks": {
      +                  "type": "boolean"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "target": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "category": {
      +                  "maxLength": 100,
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "lostAfterSeconds": {
      +                  "default": 0.25,
      +                  "maximum": 2,
      +                  "minimum": 0,
      +                  "type": "number"
      +                },
      +                "seed": {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "box": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "height": {
      +                          "exclusiveMinimum": 0,
      +                          "maximum": 1,
      +                          "type": "number"
      +                        },
      +                        "width": {
      +                          "exclusiveMinimum": 0,
      +                          "maximum": 1,
      +                          "type": "number"
      +                        },
      +                        "x": {
      +                          "maximum": 1,
      +                          "minimum": 0,
      +                          "type": "number"
      +                        },
      +                        "y": {
      +                          "maximum": 1,
      +                          "minimum": 0,
      +                          "type": "number"
      +                        }
      +                      },
      +                      "required": [
      +                        "x",
      +                        "y",
      +                        "width",
      +                        "height"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "point": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "x": {
      +                          "maximum": 1,
      +                          "minimum": 0,
      +                          "type": "number"
      +                        },
      +                        "y": {
      +                          "maximum": 1,
      +                          "minimum": 0,
      +                          "type": "number"
      +                        }
      +                      },
      +                      "required": [
      +                        "x",
      +                        "y"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "quad": {
      +                      "items": false,
      +                      "maxItems": 4,
      +                      "minItems": 4,
      +                      "prefixItems": [
      +                        {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "x": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "y": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            }
      +                          },
      +                          "required": [
      +                            "x",
      +                            "y"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "x": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "y": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            }
      +                          },
      +                          "required": [
      +                            "x",
      +                            "y"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "x": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "y": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            }
      +                          },
      +                          "required": [
      +                            "x",
      +                            "y"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "x": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "y": {
      +                              "maximum": 1,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            }
      +                          },
      +                          "required": [
      +                            "x",
      +                            "y"
      +                          ],
      +                          "type": "object"
      +                        }
      +                      ],
      +                      "type": "array"
      +                    },
      +                    "sourceTimeSeconds": {
      +                      "maximum": 86400,
      +                      "minimum": 0,
      +                      "type": "number"
      +                    }
      +                  },
      +                  "required": [
      +                    "sourceTimeSeconds"
      +                  ],
      +                  "type": "object"
      +                }
      +              },
      +              "required": [
      +                "seed"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "effect"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "effect": {
      +              "const": "transcription_v1",
      +              "type": "string"
      +            },
      +            "inputTrackId": {
      +              "description": "Source track ID or unambiguous ID prefix from the active timeline. Prefer an explicit track; omitted or unavailable tracks use the nearest compatible neighbour.",
      +              "maxLength": 128,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "effect"
      +          ],
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "maxItems": 14,
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / properties / anyOf
      Previous value: -[
      -  {
      -    "description": "Editable Motion Graphic properties: objects with key, label, type, defaultValue.",
      -    "items": {
      -      "properties": {
      -        "defaultValue": {
      -          "description": "Initial value for this editable property.",
      -          "type": [
      -            "string",
      -            "number",
      -            "boolean"
      -          ]
      -        },
      -        "key": {
      -          "description": "Property key read from item.props in the Motion Graphic code.",
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "label": {
      -          "description": "Display label shown in the editor UI.",
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "max": {
      -          "description": "Maximum value for number properties.",
      -          "type": "number"
      -        },
      -        "maxLength": {
      -          "description": "Maximum character count for text properties.",
      -          "exclusiveMinimum": 0,
      -          "maximum": 9007199254740991,
      -          "type": "integer"
      -        },
      -        "min": {
      -          "description": "Minimum value for number properties.",
      -          "type": "number"
      -        },
      -        "options": {
      -          "description": "Choices for select properties.",
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "minLength": 1,
      -                "type": "string"
      -              },
      -              "value": {
      -                "minLength": 1,
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "label",
      -              "value"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "step": {
      -          "description": "Step size for number properties.",
      -          "exclusiveMinimum": 0,
      -          "type": "number"
      -        },
      -        "type": {
      -          "description": "Editor control type for this property.",
      -          "enum": [
      -            "boolean",
      -            "color",
      -            "font",
      -            "image",
      -            "number",
      -            "select",
      -            "text",
      -            "video"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "defaultValue",
      -        "key",
      -        "label",
      -        "type"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Editable Motion Graphic properties: objects with key, label, type, defaultValue. Use a provided or approved image of a subject (character, product, logo or photo) as an image property whose defaultValue is that asset instead of redrawing it; if it cannot be used as is, tell the user first.",
      +    "items": {
      +      "properties": {
      +        "defaultValue": {
      +          "description": "Initial value for this editable property.",
      +          "type": [
      +            "string",
      +            "number",
      +            "boolean"
      +          ]
      +        },
      +        "key": {
      +          "description": "Property key read from item.props in the Motion Graphic code.",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "label": {
      +          "description": "Display label shown in the editor UI.",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "max": {
      +          "description": "Maximum value for number properties.",
      +          "type": "number"
      +        },
      +        "maxLength": {
      +          "description": "Maximum character count for text properties.",
      +          "exclusiveMinimum": 0,
      +          "maximum": 9007199254740991,
      +          "type": "integer"
      +        },
      +        "min": {
      +          "description": "Minimum value for number properties.",
      +          "type": "number"
      +        },
      +        "options": {
      +          "description": "Choices for select properties.",
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "value": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "label",
      +              "value"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "step": {
      +          "description": "Step size for number properties.",
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        },
      +        "type": {
      +          "description": "Editor control type for this property.",
      +          "enum": [
      +            "boolean",
      +            "color",
      +            "font",
      +            "image",
      +            "number",
      +            "select",
      +            "text",
      +            "video"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "defaultValue",
      +        "key",
      +        "label",
      +        "type"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. First observed

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 and readOnlyHint=false, but the description adds substantial non-obvious behavior: writes return a compact receipt with revision and bounded changed IDs rather than a caption page, batch applies atomically with all-or-nothing failure, revision fencing rejects stale reads, moves suppress old automatic generation and detach bindings, and a host output-size error after a write is not proof of failure. It does not cover authorization/permission requirements, which is the main remaining gap for a destructive dispatcher.

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 routing and topology rules are front-loaded, and the per-action bullet list gives usable structure. However the text is extremely long and re-narrates material already present in the json schema description nearly verbatim, with repeated restatements of the same constraints (track-vs-item appearance, no legacy fallback, sequential edits), so density works against scanning.

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 20-action dispatcher with 15 parameters and no output schema, the definition covers migration path, required read-first workflow, id provenance, revision discipline, error-recovery guidance, and the Chinese-script display setting with its preservation guarantees. Nothing an agent would need to avoid a wrong first call appears to be 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?

Schema coverage is 100%, but the payload parameters are an untyped free-form 'json' string, so the description carries the real semantic burden: it documents the track_items operation vocabulary (create-track, generate, move, delete-items, settings), the distinction between caption track ids and media V1/A1 ids, where revision must live for each action, and absolute-frame vs Card-relative token offsets. It also gives a concrete style payload example and normalization rules (lineHeight ratios, letterSpacing unit preservation, no duplicate property specification).

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

Purpose5/5

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

The opening sentence names a specific verb and resource ('caption/subtitle tweaks') and enumerates the exact editable dimensions: wording/spelling, grouping, emphasis, presets, style, layout, translation. It actively distinguishes itself from siblings by name, routing viewer-facing text to set_card_text and source-transcript repair away from this tool, and it frames read_captions as the prerequisite read.

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-use ('default path for caption/subtitle tweaks'), when-not ('source transcription and audible speech stay unchanged'; 'shared source-transcript repair is a separate explicitly requested task'), and alternatives ('reserve set_card_style/set_card_layout and cardId renderer writes for intentional local exceptions'). It also gives a hard precondition with a fallback: on topology v1 ONLY action="refresh" is permitted, then read_captions and continue.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.