feat: define video workflow contracts and templates

This commit is contained in:
NINI
2026-10-08 00:43:06 +09:00
parent 3f63cc9f76
commit 5be510704a
19 changed files with 2777 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+501
View File
@@ -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
}
}
}