{ "type": "object", "properties": { "schema_version": { "enum": [ "1.0", "1.1" ] }, "project_id": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" }, "brief": { "type": "object", "properties": { "topic": { "type": "string" }, "language": { "type": "string" } }, "required": [ "topic", "language" ], "additionalProperties": false }, "settings": { "type": "object" }, "stages": { "type": "array", "items": { "type": "object", "properties": { "stage_id": { "enum": [ "01-topic", "02-research", "03-script", "04-title", "05-tts-split", "06-tts", "07-cuts", "08-scenes", "09-entities", "10-references", "11-images", "12-motion", "13-compose", "14-review" ] }, "status": { "enum": [ "pending", "draft", "awaiting_input", "awaiting_review", "complete", "stale", "failed" ] }, "revision": { "anyOf": [ { "type": "null" }, { "type": "integer", "minimum": 1 } ] }, "artifact_path": { "anyOf": [ { "type": "null" }, { "type": "string" } ] }, "issues": { "type": "array", "items": { "$ref": "#/$defs/issue" } } }, "required": [ "stage_id", "status", "revision", "artifact_path", "issues" ], "additionalProperties": false }, "minItems": 14, "maxItems": 14, "allOf": [ { "contains": { "properties": { "stage_id": { "const": "01-topic" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "02-research" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "03-script" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "04-title" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "05-tts-split" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "06-tts" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "07-cuts" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "08-scenes" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "09-entities" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "10-references" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "11-images" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "12-motion" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "13-compose" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "stage_id": { "const": "14-review" } }, "required": [ "stage_id" ] }, "minContains": 1, "maxContains": 1 } ] }, "reviews": { "type": "array", "items": { "type": "object", "properties": { "review_id": { "enum": [ "topic", "story", "scenes", "final" ] }, "decision": { "enum": [ "pending", "approved", "changes_requested", "stale" ] }, "artifact_refs": { "type": "array", "items": { "$ref": "#/$defs/stage_ref" }, "uniqueItems": true }, "feedback": { "type": "string" } }, "required": [ "review_id", "decision", "artifact_refs", "feedback" ], "additionalProperties": false }, "minItems": 4, "maxItems": 4, "allOf": [ { "contains": { "properties": { "review_id": { "const": "topic" } }, "required": [ "review_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "review_id": { "const": "story" } }, "required": [ "review_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "review_id": { "const": "scenes" } }, "required": [ "review_id" ] }, "minContains": 1, "maxContains": 1 }, { "contains": { "properties": { "review_id": { "const": "final" } }, "required": [ "review_id" ] }, "minContains": 1, "maxContains": 1 } ] } }, "required": [ "schema_version", "project_id", "brief", "settings", "stages", "reviews" ], "additionalProperties": false, "$schema": "https://json-schema.org/draft/2020-12/schema", "$defs": { "stage_ref": { "type": "object", "properties": { "stage_id": { "enum": [ "01-topic", "02-research", "03-script", "04-title", "05-tts-split", "06-tts", "07-cuts", "08-scenes", "09-entities", "10-references", "11-images", "12-motion", "13-compose", "14-review" ] }, "revision": { "type": "integer", "minimum": 1 } }, "required": [ "stage_id", "revision" ], "additionalProperties": false }, "issue": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "blocking": { "type": "boolean" } }, "required": [ "code", "message", "blocking" ], "additionalProperties": false }, "settings-1.0": { "type": "object", "properties": { "aspect_ratio": { "const": "9:16" }, "max_duration_ms": { "const": 180000 }, "max_cut_duration_ms": { "const": 5000 }, "style_reference": { "const": "references/1.png" }, "tts_engine": { "const": "Qwen3-TTS" }, "conda_env": { "const": "qwen3-tts" }, "image_model": { "const": "gpt-image-2.5-sunburst" } }, "required": [ "aspect_ratio", "max_duration_ms", "max_cut_duration_ms", "style_reference", "tts_engine", "conda_env", "image_model" ], "additionalProperties": false }, "settings-1.1": { "type": "object", "properties": { "aspect_ratio": { "const": "9:16" }, "max_duration_ms": { "const": 180000 }, "max_cut_duration_ms": { "const": 5000 }, "style_reference": { "const": "references/1.png" }, "tts_engine": { "const": "Qwen3-TTS" }, "conda_env": { "const": "qwen3-tts" }, "visual_engine": { "const": "Blender" } }, "required": [ "aspect_ratio", "max_duration_ms", "max_cut_duration_ms", "style_reference", "tts_engine", "conda_env", "visual_engine" ], "additionalProperties": false } }, "allOf": [ { "if": { "properties": { "schema_version": { "const": "1.0" } } }, "then": { "properties": { "settings": { "$ref": "#/$defs/settings-1.0" } } } }, { "if": { "properties": { "schema_version": { "const": "1.1" } } }, "then": { "properties": { "settings": { "$ref": "#/$defs/settings-1.1" } } } } ] }