← Files AgentBrokoARCHIVED FILE
src/video_forge/schema/spec.schema.json
4.54 KB · Sep 30, 2026 · 23:15 UTC
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Ad video spec",
"type": "object",
"required": ["scenes"],
"additionalProperties": false,
"properties": {
"brand": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": { "type": "string" },
"wordmark": { "type": ["string", "null"] },
"url": { "type": ["string", "null"] },
"accent": { "type": "string", "description": "hex colour, e.g. #5B4BFF" },
"font": { "type": ["string", "null"], "description": "optional .ttf path override" }
}
},
"video": {
"type": "object",
"additionalProperties": false,
"properties": {
"width": { "type": "integer" },
"height": { "type": "integer" },
"fps": { "type": "integer" },
"target_seconds": { "type": "number" },
"supersample": { "type": "number", "minimum": 1.0, "maximum": 2.0 },
"crossfade": { "type": "number" },
"fade_in": { "type": "number" },
"fade_out": { "type": "number" }
}
},
"voice": {
"type": "object",
"additionalProperties": false,
"properties": {
"backend": { "type": "string", "enum": ["windows", "elevenlabs", "openai"] },
"voice": { "type": ["string", "null"] },
"rate": { "type": "integer", "minimum": -10, "maximum": 10 }
}
},
"music": {
"type": "object",
"additionalProperties": false,
"properties": {
"file": { "type": ["string", "null"] },
"gain_db": { "type": "number" },
"duck_db": { "type": "number" }
}
},
"scenes": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["type"],
"properties": {
"type": {
"type": "string",
"enum": ["cold_open", "statement", "pill_list", "message",
"node_stack", "orbit", "waveform", "feature_grid", "stat",
"split_compare", "cta", "logo_reveal", "screenshot"]
},
"act": { "type": "string", "enum": ["light", "dark"] },
"vo": { "type": "string", "description": "narration for this scene" },
"duration": { "type": "number", "description": "override VO-driven timing" },
"glyph": { "type": "string", "description": "cold_open: pause|play|dot|<text>" },
"label": { "type": "string" },
"kicker": { "type": "string", "description": "statement: small label above" },
"weight": { "type": "string" },
"lines": {
"type": "array",
"description": "statement/cta: 1-3 lines (string or {text,color})",
"items": {
"oneOf": [
{ "type": "string" },
{
"type": "object",
"properties": {
"text": { "type": "string" },
"color": { "type": "string", "enum": ["ink", "accent", "muted", "faint"] }
},
"required": ["text"]
}
]
}
},
"text": { "type": "string", "description": "waveform: single centred line" },
"items": {
"type": "array",
"description": "pill_list/orbit/feature_grid list content"
},
"columns": {
"description": "node_stack: [{title,rows}]; feature_grid: int column count"
},
"center": { "type": "string", "enum": ["sphere", "dot"] },
"value": { "type": "string", "description": "stat: e.g. 99.99% or $175" },
"caption": { "type": "string" },
"sub": { "type": "string" },
"left": { "type": "object", "description": "split_compare {label,value,color}" },
"right": { "type": "object", "description": "split_compare {label,value,color}" },
"arrow": { "type": "boolean" },
"message": { "type": "string", "description": "message: bubble text" },
"toggle": { "type": "boolean" },
"call": { "type": "boolean" },
"button": { "type": "string", "description": "cta: button label" },
"url": { "type": "string" },
"wordmark": { "type": "string" },
"mark": { "type": ["string", "null"], "description": "logo_reveal: pause|null" },
"image": { "type": "string", "description": "screenshot: image path" },
"fit": { "type": "string", "enum": ["cover", "contain"] },
"zoom": { "type": "number" },
"color": { "type": "string" }
}
}
}
}
}
SHA-256: 24a11a7796bf6194313faa60699ae8aec8842ec885f89c50078bff20599256ee