Skip to content

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
  • Saved in the parameter: video/text_overlay → typography
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
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
}
}
}
}
}