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
Propose a motion graphic over the cut. It appears at once on the timeline as a dashed, unconfirmed layer that previews live, and it is not in the video until the editor accepts it. Choose from: title_card: A full-frame headline over a dimmed wash, with an optional line under it. For an opening or a chapter break. lower_third: A name and a role on a panel at the lower left. For introducing a person, a place or a tool. caption_pop: Words appearing one at a time along the bottom, in time with speech. Pass word timings from the transcript and each word lands on the frame it is said. bullet_list: A titled list whose rows arrive one at a time. For anything you say as 'three things' or 'first, second, third'. comparison_cards: Two or three bordered cards side by side, each with a heading and a line. For 'before and after', 'this versus that', or a set of options. process_flow: Numbered steps joined by a line, revealed one at a time. For a process, a pipeline, or anything you narrate as a sequence. stat_badge: A number that counts up from zero, with a label under it. For a figure you say out loud and want to land. callout_arrow: A label with an arrow pointing at a spot in the frame. For a screen recording, or anything you need someone to look at. progress_bar: A bar filling across the bottom over its own duration, with an optional label. For a walkthrough with steps, or a chapter you want a sense of the length of. code_card: Monospaced lines on a dark panel, arriving one at a time. For a command, a snippet, a file tree, or a stack you are listing out. quote_card: An oversized quote mark, the line, and who said it. For something worth attributing, or your own sentence worth repeating on screen. text: Free text you control completely: typeface, size, colour, alignment, tracking, a plate behind it, an outline, and how it enters and leaves. Use this when none of the preset graphics fit, or when the styling is the point. shape: A rectangle, ellipse, pill, triangle, line, arrow,…
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
component |
string | yes | — |
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 | yes | Seconds from the start of the finished cut. From get_timeline or get_transcript. |
duration_seconds |
number | no | Seconds on screen. Leave it out for the component's own sensible default. |
position |
string | no | A named anchor. For `text` and `shape` you can send `point` instead and place it anywhere. |
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 | One sentence, shown to the editor on the card. Why this, here. |
Raw JSON schema
{
"type": "object",
"properties": {
"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"
]
},
"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,
"description": "Seconds from the start of the finished cut. From get_timeline or get_transcript."
},
"duration_seconds": {
"type": "number",
"minimum": 0.2,
"maximum": 30,
"description": "Seconds on screen. Leave it out for the component's own sensible default."
},
"position": {
"type": "string",
"enum": [
"lower_left",
"lower_right",
"upper_left",
"upper_right",
"center",
"bottom_bar",
"top_bar"
],
"description": "A named anchor. For `text` and `shape` you can send `point` instead and place it anywhere."
},
"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,
"description": "One sentence, shown to the editor on the card. Why this, here."
}
},
"required": [
"component",
"at_seconds"
],
"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