madoo.video-typography/v1
Madoo video typography — Exact font, size, colour, safe-area layout, outline, shadow, background box and motion of video text.
| Reference | madoo.video-typography/v1 |
| Schema id | urn:madoo:schema:video-typography:v1 |
| Version | 1.0.0 |
| Served at | GET /api/v1/json-schemas/madoo.video-typography/v1 · MCP get_json_schema |
Where it appears
Section titled “Where it appears”- Saved in the parameter:
video/text_overlay→typography
Fields
Section titled “Fields”| Field | Type | Required | Rules | Description |
|---|---|---|---|---|
schema |
"madoo.video-typography/v1" |
yes | ||
preset |
string | |||
font |
object or null | A font reference as returned by list_fonts, with camelCase keys (madoo.font-reference/v1). | ||
font.schema |
"madoo.font-reference/v1" |
yes | ||
font.familyGuid |
string | yes | format “uuid” | |
font.versionGuid |
string | yes | format “uuid” | |
font.family |
string | yes | ||
font.variant |
string | yes | ||
font.weight |
integer | yes | ≥ 100; ≤ 900 | |
font.style |
one of "normal", "italic" |
yes | ||
font.fingerprint |
string | yes | ||
size |
object | |||
size.mode |
one of "fixed", "relative", "auto" |
fixed: pixels; relative: percent of the frame height. | ||
size.value |
number | |||
size.min |
integer or null | |||
size.max |
integer or null | |||
text |
object | |||
text.color |
string | |||
text.opacity |
number | ≥ 0; ≤ 1 | ||
text.transform |
one of "none", "uppercase", "lowercase" |
|||
text.letterSpacing |
number | |||
text.lineSpacing |
number | |||
layout |
object | |||
layout.anchor |
one of "top-left", "top-center", "top-right", "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right" |
|||
layout.alignment |
one of "left", "center", "right" |
|||
layout.maxWidthPercent |
number | |||
layout.maxLines |
integer | ≥ 1 | ||
layout.offsetXPercent |
number | |||
layout.offsetYPercent |
number | |||
layout.overflow |
one of "fit", "fail" |
fit shrinks the text down to size.min; fail stops the step. | ||
layout.safeArea |
object | |||
layout.safeArea.preset |
string | |||
layout.safeArea.topPercent |
number | |||
layout.safeArea.rightPercent |
number | |||
layout.safeArea.bottomPercent |
number | |||
layout.safeArea.leftPercent |
number | |||
outline |
object | |||
outline.enabled |
boolean | |||
outline.color |
string | |||
outline.width |
integer | ≥ 0 | ||
shadow |
object | |||
shadow.enabled |
boolean | |||
shadow.color |
string | |||
shadow.opacity |
number | ≥ 0; ≤ 1 | ||
shadow.offsetX |
integer | |||
shadow.offsetY |
integer | |||
shadow.blur |
number | ≥ 0 | ||
background |
object | A box behind the text: the reliable way to keep text readable on any picture. | ||
background.enabled |
boolean | |||
background.color |
string | |||
background.opacity |
number | ≥ 0; ≤ 1 | ||
background.paddingX |
integer | ≥ 0 | ||
background.paddingY |
integer | ≥ 0 | ||
motion |
object | |||
motion.entrance |
string | |||
motion.exit |
string | |||
motion.durationMs |
integer | ≥ 0 |
The complete schema
Section titled “The complete schema”madoo.video-typography/v1 (JSON Schema)
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:madoo:schema:video-typography:v1", "title": "Madoo video typography", "description": "Renderer-neutral style of video text: exact font, size, colour, layout inside a safe area, outline, shadow, background box and entrance/exit motion. Every group is optional; a missing value takes the default shown.", "type": "object", "required": [ "schema" ], "properties": { "schema": { "const": "madoo.video-typography/v1" }, "preset": { "type": "string", "default": "custom" }, "font": { "type": [ "object", "null" ], "description": "A font reference as returned by list_fonts, with camelCase keys (madoo.font-reference/v1).", "required": [ "schema", "familyGuid", "versionGuid", "family", "variant", "weight", "style", "fingerprint" ], "properties": { "schema": { "const": "madoo.font-reference/v1" }, "familyGuid": { "type": "string", "format": "uuid" }, "versionGuid": { "type": "string", "format": "uuid" }, "family": { "type": "string" }, "variant": { "type": "string" }, "weight": { "type": "integer", "minimum": 100, "maximum": 900 }, "style": { "enum": [ "normal", "italic" ] }, "fingerprint": { "type": "string" } } }, "size": { "type": "object", "properties": { "mode": { "enum": [ "fixed", "relative", "auto" ], "default": "relative", "description": "fixed: pixels; relative: percent of the frame height." }, "value": { "type": "number", "default": 4.3 }, "min": { "type": [ "integer", "null" ], "default": 28 }, "max": { "type": [ "integer", "null" ], "default": 112 } } }, "text": { "type": "object", "properties": { "color": { "type": "string", "default": "#FFFFFF" }, "opacity": { "type": "number", "minimum": 0, "maximum": 1, "default": 1 }, "transform": { "enum": [ "none", "uppercase", "lowercase" ], "default": "none" }, "letterSpacing": { "type": "number", "default": 0 }, "lineSpacing": { "type": "number", "default": 1.08 } } }, "layout": { "type": "object", "properties": { "anchor": { "enum": [ "top-left", "top-center", "top-right", "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right" ], "default": "bottom-center" }, "alignment": { "enum": [ "left", "center", "right" ], "default": "center" }, "maxWidthPercent": { "type": "number", "default": 82 }, "maxLines": { "type": "integer", "minimum": 1, "default": 2 }, "offsetXPercent": { "type": "number", "default": 0 }, "offsetYPercent": { "type": "number", "default": 0 }, "overflow": { "enum": [ "fit", "fail" ], "default": "fit", "description": "fit shrinks the text down to size.min; fail stops the step." }, "safeArea": { "type": "object", "properties": { "preset": { "type": "string", "default": "title-safe" }, "topPercent": { "type": "number", "default": 8 }, "rightPercent": { "type": "number", "default": 8 }, "bottomPercent": { "type": "number", "default": 8 }, "leftPercent": { "type": "number", "default": 8 } } } } }, "outline": { "type": "object", "properties": { "enabled": { "type": "boolean", "default": true }, "color": { "type": "string", "default": "#000000" }, "width": { "type": "integer", "minimum": 0, "default": 2 } } }, "shadow": { "type": "object", "properties": { "enabled": { "type": "boolean", "default": false }, "color": { "type": "string", "default": "#000000" }, "opacity": { "type": "number", "minimum": 0, "maximum": 1, "default": 0.55 }, "offsetX": { "type": "integer", "default": 2 }, "offsetY": { "type": "integer", "default": 2 }, "blur": { "type": "number", "minimum": 0, "default": 0 } } }, "background": { "type": "object", "description": "A box behind the text: the reliable way to keep text readable on any picture.", "properties": { "enabled": { "type": "boolean", "default": false }, "color": { "type": "string", "default": "#000000" }, "opacity": { "type": "number", "minimum": 0, "maximum": 1, "default": 0.65 }, "paddingX": { "type": "integer", "minimum": 0, "default": 18 }, "paddingY": { "type": "integer", "minimum": 0, "default": 10 } } }, "motion": { "type": "object", "properties": { "entrance": { "type": "string", "default": "none" }, "exit": { "type": "string", "default": "none" }, "durationMs": { "type": "integer", "minimum": 0, "default": 180 } } } }}