deskmate-cc.vercel.app
Deskmate
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 16 · Act 12 · Transact 0 · Score: Not yet scored
Tool inspector
propose_layer_change
Propose a change to a layer that is already on the cut: retime it, move it, reword it, recolour it. The original stays exactly as it is until the editor accepts the change, so rejecting costs them nothing. Send only the fields you are changing; everything else is kept.
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
layer_id |
string | yes | Id from get_composition. |
component |
string | no | Change what kind of graphic it is. The fields it takes change with it. |
text |
string | no | title_card, lower_third, caption_pop, bullet_list, comparison_cards, process_flow, stat_badge, callout_arrow, progress_bar, code_card, quote_card, text only. The figure, with its furniture: '40%', '$1.2M', '3×'. The number inside is what counts up. |
subtext |
string | no | title_card, lower_third, stat_badge, quote_card only. The role, the title, the one-line description. |
eyebrow |
string | no | title_card only. A small tracked label above it: a chapter number, a section name. |
font |
string | no | title_card, lower_third, caption_pop, bullet_list, stat_badge, quote_card, text only. The headline's typeface. One of: display, displayHeavy, body, bodyBold, mono. Defaults to displayHeavy; the eyebrow and subtext keep their own weight. |
timings |
array | no | caption_pop only. Optional. One frame number per word, from get_transcript, relative to this layer's start. Without it the words are spread evenly, which is close but never exact. |
items |
array | no | bullet_list, comparison_cards, process_flow, code_card only. One entry per card. Write each as 'Heading: the line under it'; a colon, en dash, or pipe splits them. |
point |
object | no | callout_arrow, text, shape only. Free placement as fractions of the frame: {x: 0.5, y: 0.5} is the middle. Leave it out to use `position` instead. |
size |
number | no | text only. Type size in points of a 1080-tall frame, 12 to 220. It scales with the format, so one number is right in every aspect ratio. |
align |
string | no | text only. left, center or right. Also decides which way the block grows from its anchor. |
tracking |
number | no | text only. Letter spacing as a fraction of the size, -0.05 to 0.4. Small caps labels want about 0.07. |
line_height |
number | no | text only. Multiple of the size, 0.8 to 2.4. Defaults to 1.18. |
backdrop |
string | no | text only. none, box, or scrim. A box is a plate behind the words; a scrim dims the whole frame so text over busy footage stays readable. |
outline |
number | no | text only. Outline thickness in points of a 1080 frame, 0 to 12. Reads on any background, which a plate does not. |
rotation |
number | no | text, shape only. Degrees, -180 to 180. |
opacity |
number | no | text, shape only. 0 to 1. Below 1 the words are see-through, for a watermark or a caption you do not want to fight the picture. |
animation |
string | no | text, shape, effect only. How it enters and leaves: fade, rise, drop, slide_left, slide_right, pop, grow, none. |
shape |
string | no | shape only. rect, ellipse, pill, triangle, line, arrow, ring or star. |
width |
number | no | shape only. As a fraction of the frame width, 0.01 to 1.5. |
height |
number | no | shape only. As a fraction of the frame height, 0.01 to 1.5. |
fill |
string | no | shape only. A hex like "#F54E00", a palette role, or "none" for an outline only. |
stroke |
string | no | shape only. Outline colour: a hex, a palette role, or "none". |
stroke_width |
number | no | shape only. Outline thickness in points of a 1080 frame, 0 to 40. |
radius |
number | no | shape only. Corner rounding for a rect, in points of a 1080 frame. |
effect |
string | no | effect only. dip, flash, vignette, grain, scanlines, glitch, letterbox or wash. `dip` fades to the colour and back out, which is the transition you put over a cut. |
strength |
number | no | effect only. 0 to 1. Half is usually plenty; grain above 0.4 is a stylistic choice rather than an accident. |
tag |
string | no | effect only. An internal label. The editor uses it to find the transition it put on a clip; leave it out. |
at_seconds |
number | no | — |
duration_seconds |
number | no | — |
position |
string | no | — |
palette_role |
string | no | A palette role, or a hex like "#F54E00". Roles resolve against the live theme, so one spec is legible in light and dark; send a hex when the exact colour is the point. Roles: accent, warm, cool, positive, plain, invert. |
easing |
string | no | — |
reason |
string | no | — |
Raw JSON schema
{
"type": "object",
"properties": {
"layer_id": {
"type": "string",
"description": "Id from get_composition."
},
"component": {
"type": "string",
"enum": [
"title_card",
"lower_third",
"caption_pop",
"bullet_list",
"comparison_cards",
"process_flow",
"stat_badge",
"callout_arrow",
"progress_bar",
"code_card",
"quote_card",
"text",
"shape",
"effect"
],
"description": "Change what kind of graphic it is. The fields it takes change with it."
},
"text": {
"type": "string",
"description": "title_card, lower_third, caption_pop, bullet_list, comparison_cards, process_flow, stat_badge, callout_arrow, progress_bar, code_card, quote_card, text only. The figure, with its furniture: '40%', '$1.2M', '3×'. The number inside is what counts up.",
"maxLength": 24
},
"subtext": {
"type": "string",
"description": "title_card, lower_third, stat_badge, quote_card only. The role, the title, the one-line description.",
"maxLength": 80
},
"eyebrow": {
"type": "string",
"description": "title_card only. A small tracked label above it: a chapter number, a section name.",
"maxLength": 32
},
"font": {
"type": "string",
"description": "title_card, lower_third, caption_pop, bullet_list, stat_badge, quote_card, text only. The headline's typeface. One of: display, displayHeavy, body, bodyBold, mono. Defaults to displayHeavy; the eyebrow and subtext keep their own weight."
},
"timings": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0
},
"maxItems": 40,
"description": "caption_pop only. Optional. One frame number per word, from get_transcript, relative to this layer's start. Without it the words are spread evenly, which is close but never exact."
},
"items": {
"type": "array",
"items": {
"type": "string",
"maxLength": 3
},
"maxItems": 6,
"description": "bullet_list, comparison_cards, process_flow, code_card only. One entry per card. Write each as 'Heading: the line under it'; a colon, en dash, or pipe splits them."
},
"point": {
"type": "object",
"description": "callout_arrow, text, shape only. Free placement as fractions of the frame: {x: 0.5, y: 0.5} is the middle. Leave it out to use `position` instead.",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"size": {
"type": "number",
"description": "text only. Type size in points of a 1080-tall frame, 12 to 220. It scales with the format, so one number is right in every aspect ratio."
},
"align": {
"type": "string",
"description": "text only. left, center or right. Also decides which way the block grows from its anchor."
},
"tracking": {
"type": "number",
"description": "text only. Letter spacing as a fraction of the size, -0.05 to 0.4. Small caps labels want about 0.07."
},
"line_height": {
"type": "number",
"description": "text only. Multiple of the size, 0.8 to 2.4. Defaults to 1.18."
},
"backdrop": {
"type": "string",
"description": "text only. none, box, or scrim. A box is a plate behind the words; a scrim dims the whole frame so text over busy footage stays readable."
},
"outline": {
"type": "number",
"description": "text only. Outline thickness in points of a 1080 frame, 0 to 12. Reads on any background, which a plate does not."
},
"rotation": {
"type": "number",
"description": "text, shape only. Degrees, -180 to 180."
},
"opacity": {
"type": "number",
"description": "text, shape only. 0 to 1. Below 1 the words are see-through, for a watermark or a caption you do not want to fight the picture."
},
"animation": {
"type": "string",
"description": "text, shape, effect only. How it enters and leaves: fade, rise, drop, slide_left, slide_right, pop, grow, none."
},
"shape": {
"type": "string",
"description": "shape only. rect, ellipse, pill, triangle, line, arrow, ring or star."
},
"width": {
"type": "number",
"description": "shape only. As a fraction of the frame width, 0.01 to 1.5."
},
"height": {
"type": "number",
"description": "shape only. As a fraction of the frame height, 0.01 to 1.5."
},
"fill": {
"type": "string",
"description": "shape only. A hex like \"#F54E00\", a palette role, or \"none\" for an outline only."
},
"stroke": {
"type": "string",
"description": "shape only. Outline colour: a hex, a palette role, or \"none\"."
},
"stroke_width": {
"type": "number",
"description": "shape only. Outline thickness in points of a 1080 frame, 0 to 40."
},
"radius": {
"type": "number",
"description": "shape only. Corner rounding for a rect, in points of a 1080 frame."
},
"effect": {
"type": "string",
"description": "effect only. dip, flash, vignette, grain, scanlines, glitch, letterbox or wash. `dip` fades to the colour and back out, which is the transition you put over a cut."
},
"strength": {
"type": "number",
"description": "effect only. 0 to 1. Half is usually plenty; grain above 0.4 is a stylistic choice rather than an accident."
},
"tag": {
"type": "string",
"description": "effect only. An internal label. The editor uses it to find the transition it put on a clip; leave it out.",
"maxLength": 60
},
"at_seconds": {
"type": "number",
"minimum": 0
},
"duration_seconds": {
"type": "number",
"minimum": 0.2,
"maximum": 30
},
"position": {
"type": "string",
"enum": [
"lower_left",
"lower_right",
"upper_left",
"upper_right",
"center",
"bottom_bar",
"top_bar"
]
},
"palette_role": {
"type": "string",
"description": "A palette role, or a hex like \"#F54E00\". Roles resolve against the live theme, so one spec is legible in light and dark; send a hex when the exact colour is the point. Roles: accent, warm, cool, positive, plain, invert."
},
"easing": {
"type": "string",
"enum": [
"linear",
"out",
"in_out",
"spring_out"
]
},
"reason": {
"type": "string",
"maxLength": 200
}
},
"required": [
"layer_id"
],
"additionalProperties": false
}
Similar websites
wfsim.app
A Warframe calculator that simulates the fight instead of estimating it — builder, simulator, optimizer. Every formula cites its source, and the golden tests ar…
commonplace-webmcp.vercel.app
Commonplace is an editable social reading space built for people and their browser agents.
pixelforge-studio.appcaster.chatgpt.site
A professional browser pixel-art editor for drawing, frame animation, palettes, sprite sheets, GIF export, and WebMCP automation.
pixelite.taskcraft.site
Pixelite