feat: define video workflow contracts and templates
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,501 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user