Skip to main content
Glama

Set picture card

set_picture_card
Idempotent

PROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. Compose FOOTAGE ONLY as a rounded picture card during start/end program seconds. Captions, designed type and branding stay independent and sharp. Calling it again with an existing id changes that card: every argument you leave out keeps the card's current value (box, fit, entrance/exit, canvas, framing), so id/start/end alone re-times it; source='auto' frames the speaker again. box=[left,top,right,bottom] on the output canvas; radius 0-.25 of card short side; border 0-.015 of canvas short side. entrance/exit none, fade, lift (restrained settle), or reveal (picture opens/closes inside its rounded window): an animated end DISSOLVES the whole card with the full-frame shot under it — never a frame of bare canvas; a source card that opens or closes on a cut cuts in with its panels populated ('none' says so outright). duration_s .12-1.2. Windows must not overlap. Inspect entry, settle, exit and the speaker framing. Rounded cards are one purposeful format, not a quota. FOOTAGE — source: the card takes its picture straight from the full SOURCE frame (enlarged once, at most 2x — up to 3x only so a small archival face reads at ~15% of the frame, with lanczos, light sharpening and the card's grain over it), never from the already-cropped 9:16 program. Default 'auto' frames the speaker as a medium close-up (>=8% headroom above the head) from a face track measured on the window's kept footage (4 fps) and FOLLOWS a speaker who moves inside a shot: the card holds STILL while they sway and glides (eased, speed-limited, never a whip) only when a still framing would cut the head; a re-aim that can land on a jump cut happens on the cut; every camera shot gets its own framing and nothing moves across a cut (the result says how many shots follow). follow=false keeps one still framing per shot. Without a measurable track it frames every measured position of the head (index boxes) and re-aims on the cut. On a source below 720p 'auto' shows the WHOLE frame (contain: the box shrinks to the footage's aspect, edge blanking trimmed; never a 3.7x crop) — except ONE 4:3 archival speaker (no two-shot) in a 9:16 frame, face measured, no box: a full-width near-square window (y .27-.70, ~43% of the frame: the most that keeps the headline band above and a whole caption band below) framed on the speaker; fit='crop' frames the speaker as a medium close-up in any box and follows them, fit='pad' always shows the whole frame. A thin band of a pillar or frame edge along an 'auto' card's or speaker panel's edge (a straight high-contrast source edge within 8% of it) is slid off once per held framing (never a glide), else named (EDGE SLIVER). 'full' = the whole source frame; [left,top,right,bottom] = that rect of the SOURCE frame (look_at gives the fractions); 'inset' = the burned-in screen / picture-in-picture box measured in the window's footage (four straight edges, the same place across frames), shown WHOLE and fitted (a screenshot the host reads from is legible this way, never sliced by a 9:16 crop; auto_reframe names the box and this call when it finds one). Alone it shows no face: over more than a second of speech the result says NO FACE ON SCREEN — stack the speaker over it with panels instead (below); 'program' = the composed program picture (frame.picture region) as before. fit: 'crop' keeps the box and trims the source rect to it; 'pad' keeps the whole rect and shrinks the box around it (the default for 'full' and explicit rects). The result reports the rect, box, enlargement and headroom. One rect frames ONE shot: an 'auto' window across a camera cut the reframe re-aims on (focus_track) frames each shot itself; across any other cut to a differently framed shot it keeps the program picture (it follows the reframe) and says so — give each shot its own card for source framing. Spliced inserts inside a source card play full-frame and the card returns after them. SPEAKER + EVIDENCE — panels: 2-3 {box, source[, fit]} shown at once over the window, each box its own rounded window on one canvas, each source its own region of the SAME source frame: e.g. [{box:[.04,.13,.96,.475], source:'auto'} (the speaker), {box:[.04,.54,.96,.93], source:'inset'} (the screen/study/inset they show — or its rect)]. Use it when the source shows a speaker beside a picture-in-picture screen, document or browser that a 9:16 crop would either drop or slice; never crop to the evidence and lose the speaker for seconds. A SPEAKER panel ('auto', or a crop rect holding most of the measured face) is solved from the face track (measured into its shot, so a profile turn is carried): the whole head with chin and hair margins, lead room where they look, every face box >= 8% of the panel inside each edge first, burned-in screen boxes kept out wherever such a framing can (where the box touches the face the face wins: the head keeps its composition, the corner that shows is never a thin strip and is softened only away from the face, and the result measures a speaker card alone and the speaker full-bleed against the stack and names the cleanest: BETTER LAYOUT / LAYOUT (measured)), following a speaker who moves; a given rect that cuts the face is moved and grown only as far as it must. Stacked panels keep a caption band of >= .065 of the frame height between them (a narrower gap is opened, and said). Panel boxes must not overlap; zooms do not play inside a stack. CANVAS — omitted, it is a dark canvas sampled from the footage (its hue, near-black at the edges, vignette; film grain on sources below 720p). Name one to override: background_style 'radial_gradient' glows from background behind the card out to background_color2, 'vertical_gradient' runs background (top) to background_color2 (bottom); a bare background is a flat colour; 'blur' fills the frame with the card's own footage blurred and darkened (background_dim 0-.9, default .45) — HD footage only: on a low-resolution source it reads as a muddy smear. vignette 0-1 darkens the edges (.4). grain 0-1 adds animated film grain: .25 is the references' texture. Grain is a FINAL-export finish with a cliff — the encoder smooths it out of previews and out of any value below ~.2 entirely, and where it survives it costs ~3-4x the file size and ~+0.5s of export per 8s of card at 1080x1920. Both only on the backdrop (grain also over footage enlarged past 2x). background_color2 alone implies vertical_gradient; a knob the chosen style cannot draw (color2 on blur/solid, background_dim off blur) is rejected.

Input Schema

NameRequiredDescriptionDefault
idYes
boxNo
endYes
fitNo
exitNo
grainNo
startYes
borderNo
followNo
panelsNo
radiusNo
shadowNo
sourceNo
entranceNo
vignetteNo
backgroundNo
duration_sNo
project_idYesRequired immutable scope for this call. Copy the id from list_projects/open_project/project_state; the active-project pointer is never used to guess.
border_colorNo
motion_motifNo
background_dimNo
background_styleNo
background_color2No

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / panels / items / properties / source / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "auto",
      -      "full"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "maxItems": 4,
      -    "minItems": 4,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "auto",
      +      "full",
      +      "inset"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "number"
      +    },
      +    "maxItems": 4,
      +    "minItems": 4,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / source / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "auto",
      -      "full",
      -      "program"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "maxItems": 4,
      -    "minItems": 4,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "auto",
      +      "full",
      +      "program",
      +      "inset"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "number"
      +    },
      +    "maxItems": 4,
      +    "minItems": 4,
      +    "type": "array"
      +  }
      +]
  2. Changed3 schema fields changed
    • addedInput schema / properties / follow
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / panels
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "box": {
      +        "items": {
      +          "type": "number"
      +        },
      +        "maxItems": 4,
      +        "minItems": 4,
      +        "type": "array"
      +      },
      +      "fit": {
      +        "enum": [
      +          "crop",
      +          "pad"
      +        ],
      +        "type": "string"
      +      },
      +      "source": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "auto",
      +              "full"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "items": {
      +              "type": "number"
      +            },
      +            "maxItems": 4,
      +            "minItems": 4,
      +            "type": "array"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "box",
      +      "source"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 3,
      +  "minItems": 2,
      +  "type": "array"
      +}
    • addedInput schema / properties / source
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "auto",
      +        "full",
      +        "program"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "number"
      +      },
      +      "maxItems": 4,
      +      "minItems": 4,
      +      "type": "array"
      +    }
      +  ]
      +}
  3. Changed5 schema fields changed
    • addedInput schema / properties / background_color2
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / background_dim
      Added value: +{
      +  "type": "number"
      +}
    • addedInput schema / properties / background_style
      Added value: +{
      +  "enum": [
      +    "solid",
      +    "vertical_gradient",
      +    "radial_gradient",
      +    "blur"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / grain
      Added value: +{
      +  "type": "number"
      +}
    • addedInput schema / properties / vignette
      Added value: +{
      +  "type": "number"
      +}
  4. Added

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, it discloses re-call merge semantics (omitted arguments keep current values), non-overlap constraints, how animated exits dissolve the whole card, auto-follow and reframe behavior, and result diagnostics such as NO FACE ON SCREEN, EDGE SLIVER, and BETTER LAYOUT. It also explains grain export cost and defaults, providing rich behavioral context without contradicting the annotations.

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

Conciseness2/5

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

The description is an extremely long prose block with dense parentheticals and uppercase caveats, making it hard to scan despite useful section-like cues. Much detail is justified by the poor schema coverage, but the volume and run-on structure substantially exceed what is appropriately concise.

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

Completeness4/5

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

For a 23-parameter mutation with no output schema and almost no schema descriptions, it supplies defaults, edge cases, failure diagnostics, framing behavior, and canvas behavior, which is far beyond the structured fields. Completeness is still weakened by undocumented parameters such as shadow and motion_motif.

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

Parameters4/5

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

Schema description coverage is only 4%, so the description carries most of the burden: it defines box format, radius and border relative units, entrance/exit choices, duration_s range, source modes including rect and inset, fit semantics, panels structure, background styles, and background_color2 implication. However, several parameters are never explained, notably shadow, border_color, and motion_motif, leaving meaningful gaps among the 23 parameters.

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

Purpose5/5

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

The opening states a specific verb and resource: 'Compose FOOTAGE ONLY as a rounded picture card during start/end program seconds.' It also distinguishes this footage-only operation from captions, designed type, branding, and the composed 'program' picture, so an agent can identify the tool without opening the schema.

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

Usage Guidelines4/5

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

It gives explicit conditional guidance: use panels when the source shows a speaker beside a PiP screen/document/browser, never crop to evidence and lose the speaker, and give each shot its own card across unrelated cuts. It also names auto_reframe as a caller, but it does not directly distinguish itself from sibling tools such as compose_panels or add_title_card.

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.