502 lines
10 KiB
JSON
502 lines
10 KiB
JSON
{
|
|
"type": "object",
|
|
"properties": {
|
|
"schema_version": {
|
|
"const": "1.0"
|
|
},
|
|
"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",
|
|
"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
|
|
},
|
|
"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
|
|
}
|
|
}
|
|
}
|