Files
ShortVideoGenerator/contracts/artifact.schema.json
T

1768 lines
41 KiB
JSON

{
"type": "object",
"properties": {
"schema_version": {
"const": "1.0"
},
"project_id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"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
},
"inputs": {
"type": "array",
"items": {
"$ref": "#/$defs/stage_ref"
},
"uniqueItems": true
},
"payload": {
"type": "object"
}
},
"required": [
"schema_version",
"project_id",
"stage_id",
"revision",
"inputs",
"payload"
],
"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
},
"media": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"kind": {
"enum": [
"audio",
"image",
"video"
]
},
"verified": {
"type": "boolean"
},
"duration_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"width": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"height": {
"type": [
"integer",
"null"
],
"minimum": 1
}
},
"required": [
"path",
"kind",
"verified",
"duration_ms",
"width",
"height"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"kind": {
"const": "audio"
}
}
},
"then": {
"properties": {
"width": {
"type": "null"
},
"height": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "image"
}
}
},
"then": {
"properties": {
"duration_ms": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"verified": {
"const": true
}
}
},
"then": {
"properties": {
"path": {
"type": "string",
"minLength": 1
}
},
"allOf": [
{
"if": {
"properties": {
"kind": {
"enum": [
"audio",
"video"
]
}
}
},
"then": {
"properties": {
"duration_ms": {
"type": "integer",
"minimum": 1
}
}
}
},
{
"if": {
"properties": {
"kind": {
"enum": [
"image",
"video"
]
}
}
},
"then": {
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
}
}
}
]
}
}
]
},
"unit": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"block_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"display_text": {
"type": "string"
},
"spoken_text": {
"type": "string"
},
"pronunciation_notes": {
"type": "string"
}
},
"required": [
"id",
"block_ids",
"display_text",
"spoken_text",
"pronunciation_notes"
],
"additionalProperties": false
},
"caption": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"start_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"end_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"text": {
"type": "string"
}
},
"required": [
"id",
"start_ms",
"end_ms",
"text"
],
"additionalProperties": false
},
"01-topic": {
"type": "object",
"properties": {
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"angle": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"id",
"angle",
"summary"
],
"additionalProperties": false
}
},
"selected_id": {
"anyOf": [
{
"type": "null"
},
{
"type": "string"
}
]
},
"selection_reason": {
"type": "string"
}
},
"required": [
"candidates",
"selected_id",
"selection_reason"
],
"additionalProperties": false
},
"02-research": {
"type": "object",
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"publisher": {
"type": "string"
},
"accessed_at": {
"type": "string",
"format": "date"
}
},
"required": [
"id",
"title",
"url",
"publisher",
"accessed_at"
],
"additionalProperties": false
}
},
"claims": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"source_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"assessment": {
"enum": [
"verified",
"uncertain"
]
}
},
"required": [
"id",
"text",
"source_ids",
"assessment"
],
"additionalProperties": false
}
},
"open_questions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"sources",
"claims",
"open_questions"
],
"additionalProperties": false
},
"03-script": {
"type": "object",
"properties": {
"blocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"claim_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"text",
"claim_ids"
],
"additionalProperties": false
}
},
"full_text": {
"type": "string"
},
"estimated_duration_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"required": [
"blocks",
"full_text",
"estimated_duration_ms"
],
"additionalProperties": false
},
"04-title": {
"type": "object",
"properties": {
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"rationale": {
"type": "string"
}
},
"required": [
"id",
"text",
"rationale"
],
"additionalProperties": false
}
},
"selected_id": {
"anyOf": [
{
"type": "null"
},
{
"type": "string"
}
]
}
},
"required": [
"candidates",
"selected_id"
],
"additionalProperties": false
},
"05-tts-split": {
"type": "object",
"properties": {
"units": {
"type": "array",
"items": {
"$ref": "#/$defs/unit"
}
}
},
"required": [
"units"
],
"additionalProperties": false
},
"06-tts": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"engine": {
"const": "Qwen3-TTS"
},
"conda_env": {
"const": "qwen3-tts"
},
"language": {
"type": "string"
},
"units": {
"type": "array",
"items": {
"$ref": "#/$defs/unit"
}
}
},
"required": [
"engine",
"conda_env",
"language",
"units"
],
"additionalProperties": false
},
"result": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"engine": {
"const": "Qwen3-TTS"
},
"model": {
"type": "string"
},
"voice": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"unit_id": {
"type": "string"
},
"media": {
"allOf": [
{
"$ref": "#/$defs/media"
},
{
"properties": {
"kind": {
"const": "audio"
}
}
}
]
}
},
"required": [
"unit_id",
"media"
],
"additionalProperties": false
}
},
"narration": {
"allOf": [
{
"$ref": "#/$defs/media"
},
{
"properties": {
"kind": {
"const": "audio"
}
}
}
]
},
"unit_ranges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"unit_id": {
"type": "string"
},
"start_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"end_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"required": [
"unit_id",
"start_ms",
"end_ms"
],
"additionalProperties": false
}
}
},
"required": [
"engine",
"model",
"voice",
"files",
"narration",
"unit_ranges"
],
"additionalProperties": false
}
]
}
},
"required": [
"request",
"result"
],
"additionalProperties": false
},
"07-cuts": {
"type": "object",
"properties": {
"narration_duration_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"timing_evidence": {
"type": "string"
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"start_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"end_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"unit_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"narration_text": {
"type": "string"
}
},
"required": [
"id",
"start_ms",
"end_ms",
"unit_ids",
"narration_text"
],
"additionalProperties": false
}
},
"captions": {
"type": "array",
"items": {
"$ref": "#/$defs/caption"
}
}
},
"required": [
"narration_duration_ms",
"timing_evidence",
"cuts",
"captions"
],
"additionalProperties": false
},
"08-scenes": {
"type": "object",
"properties": {
"scenes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cut_id": {
"type": "string"
},
"description": {
"type": "string"
},
"start_state": {
"type": "string"
},
"end_state": {
"type": "string"
},
"camera": {
"type": "string"
}
},
"required": [
"cut_id",
"description",
"start_state",
"end_state",
"camera"
],
"additionalProperties": false
}
},
"connections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"from_cut_id": {
"type": "string"
},
"to_cut_id": {
"type": "string"
},
"mode": {
"enum": [
"continuous",
"cut"
]
},
"reason": {
"type": "string"
}
},
"required": [
"from_cut_id",
"to_cut_id",
"mode",
"reason"
],
"additionalProperties": false
}
}
},
"required": [
"scenes",
"connections"
],
"additionalProperties": false
},
"09-entities": {
"type": "object",
"properties": {
"characters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"description": {
"type": "string"
},
"fixed_features": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"description",
"fixed_features"
],
"additionalProperties": false
}
},
"backgrounds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"description": {
"type": "string"
},
"fixed_features": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"description",
"fixed_features"
],
"additionalProperties": false
}
},
"appearances": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cut_id": {
"type": "string"
},
"character_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"background_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"cut_id",
"character_ids",
"background_ids"
],
"additionalProperties": false
}
}
},
"required": [
"characters",
"backgrounds",
"appearances"
],
"additionalProperties": false
},
"10-references": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"model": {
"const": "gpt-image-2.5-sunburst"
},
"style_reference": {
"const": "references/1.png"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"kind": {
"enum": [
"style",
"character",
"background"
]
},
"entity_id": {
"anyOf": [
{
"type": "null"
},
{
"type": "string"
}
]
},
"prompt": {
"type": "string"
}
},
"required": [
"id",
"kind",
"entity_id",
"prompt"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"kind": {
"const": "style"
}
}
},
"then": {
"properties": {
"entity_id": {
"type": "null"
}
}
},
"else": {
"properties": {
"entity_id": {
"type": "string"
}
}
}
}
]
}
}
},
"required": [
"model",
"style_reference",
"items"
],
"additionalProperties": false
},
"result": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"reference_id": {
"type": "string"
},
"media": {
"allOf": [
{
"$ref": "#/$defs/media"
},
{
"properties": {
"kind": {
"const": "image"
}
}
}
]
}
},
"required": [
"reference_id",
"media"
],
"additionalProperties": false
}
}
},
"required": [
"items"
],
"additionalProperties": false
}
]
}
},
"required": [
"request",
"result"
],
"additionalProperties": false
},
"11-images": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"model": {
"const": "gpt-image-2.5-sunburst"
},
"frames": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"cut_id": {
"type": "string"
},
"position": {
"enum": [
"start",
"end"
]
},
"prompt": {
"type": "string"
},
"reference_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"cut_id",
"position",
"prompt",
"reference_ids"
],
"additionalProperties": false
}
}
},
"required": [
"model",
"frames"
],
"additionalProperties": false
},
"result": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"frames": {
"type": "array",
"items": {
"type": "object",
"properties": {
"frame_id": {
"type": "string"
},
"media": {
"allOf": [
{
"$ref": "#/$defs/media"
},
{
"properties": {
"kind": {
"const": "image"
}
}
}
]
}
},
"required": [
"frame_id",
"media"
],
"additionalProperties": false
}
}
},
"required": [
"frames"
],
"additionalProperties": false
}
]
}
},
"required": [
"request",
"result"
],
"additionalProperties": false
},
"12-motion": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"clips": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cut_id": {
"type": "string"
},
"start_frame_id": {
"type": "string"
},
"end_frame_id": {
"type": "string"
},
"duration_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"motion_prompt": {
"type": "string"
}
},
"required": [
"cut_id",
"start_frame_id",
"end_frame_id",
"duration_ms",
"motion_prompt"
],
"additionalProperties": false
}
}
},
"required": [
"clips"
],
"additionalProperties": false
},
"result": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"clips": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cut_id": {
"type": "string"
},
"media": {
"allOf": [
{
"$ref": "#/$defs/media"
},
{
"properties": {
"kind": {
"const": "video"
}
}
}
]
}
},
"required": [
"cut_id",
"media"
],
"additionalProperties": false
}
}
},
"required": [
"clips"
],
"additionalProperties": false
}
]
}
},
"required": [
"request",
"result"
],
"additionalProperties": false
},
"13-compose": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"timeline": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cut_id": {
"type": "string"
},
"video_path": {
"type": "string"
},
"start_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"end_ms": {
"type": [
"integer",
"null"
],
"minimum": 0
}
},
"required": [
"cut_id",
"video_path",
"start_ms",
"end_ms"
],
"additionalProperties": false
}
},
"narration_path": {
"type": "string"
},
"captions": {
"type": "array",
"items": {
"$ref": "#/$defs/caption"
}
},
"title": {
"type": "string"
}
},
"required": [
"timeline",
"narration_path",
"captions",
"title"
],
"additionalProperties": false
},
"result": {
"anyOf": [
{
"type": "null"
},
{
"type": "object",
"properties": {
"video": {
"allOf": [
{
"$ref": "#/$defs/media"
},
{
"properties": {
"kind": {
"const": "video"
}
}
}
]
},
"captions_path": {
"type": "string"
}
},
"required": [
"video",
"captions_path"
],
"additionalProperties": false
}
]
}
},
"required": [
"request",
"result"
],
"additionalProperties": false
},
"14-review": {
"type": "object",
"properties": {
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"area": {
"enum": [
"story",
"visual",
"audio",
"captions",
"timing",
"consistency"
]
},
"verdict": {
"enum": [
"pass",
"fail",
"not_checked"
]
},
"evidence": {
"type": "string"
}
},
"required": [
"area",
"verdict",
"evidence"
],
"additionalProperties": false
}
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"enum": [
"blocking",
"minor"
]
},
"description": {
"type": "string"
},
"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"
]
},
"cut_id": {
"anyOf": [
{
"type": "null"
},
{
"type": "string"
}
]
}
},
"required": [
"severity",
"description",
"stage_id",
"cut_id"
],
"additionalProperties": false
}
},
"recommendation": {
"enum": [
"pass",
"revise",
"incomplete"
]
}
},
"required": [
"checks",
"findings",
"recommendation"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"recommendation": {
"const": "pass"
}
}
},
"then": {
"properties": {
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"area": {
"enum": [
"story",
"visual",
"audio",
"captions",
"timing",
"consistency"
]
},
"verdict": {
"const": "pass"
},
"evidence": {
"type": "string",
"minLength": 1
}
},
"required": [
"area",
"verdict",
"evidence"
],
"additionalProperties": false
},
"minItems": 6,
"maxItems": 6,
"allOf": [
{
"contains": {
"properties": {
"area": {
"const": "story"
}
},
"required": [
"area"
]
},
"minContains": 1,
"maxContains": 1
},
{
"contains": {
"properties": {
"area": {
"const": "visual"
}
},
"required": [
"area"
]
},
"minContains": 1,
"maxContains": 1
},
{
"contains": {
"properties": {
"area": {
"const": "audio"
}
},
"required": [
"area"
]
},
"minContains": 1,
"maxContains": 1
},
{
"contains": {
"properties": {
"area": {
"const": "captions"
}
},
"required": [
"area"
]
},
"minContains": 1,
"maxContains": 1
},
{
"contains": {
"properties": {
"area": {
"const": "timing"
}
},
"required": [
"area"
]
},
"minContains": 1,
"maxContains": 1
},
{
"contains": {
"properties": {
"area": {
"const": "consistency"
}
},
"required": [
"area"
]
},
"minContains": 1,
"maxContains": 1
}
]
},
"findings": {
"not": {
"contains": {
"properties": {
"severity": {
"const": "blocking"
}
},
"required": [
"severity"
]
}
}
}
}
}
}
]
}
},
"oneOf": [
{
"properties": {
"stage_id": {
"const": "01-topic"
},
"payload": {
"$ref": "#/$defs/01-topic"
}
}
},
{
"properties": {
"stage_id": {
"const": "02-research"
},
"payload": {
"$ref": "#/$defs/02-research"
}
}
},
{
"properties": {
"stage_id": {
"const": "03-script"
},
"payload": {
"$ref": "#/$defs/03-script"
}
}
},
{
"properties": {
"stage_id": {
"const": "04-title"
},
"payload": {
"$ref": "#/$defs/04-title"
}
}
},
{
"properties": {
"stage_id": {
"const": "05-tts-split"
},
"payload": {
"$ref": "#/$defs/05-tts-split"
}
}
},
{
"properties": {
"stage_id": {
"const": "06-tts"
},
"payload": {
"$ref": "#/$defs/06-tts"
}
}
},
{
"properties": {
"stage_id": {
"const": "07-cuts"
},
"payload": {
"$ref": "#/$defs/07-cuts"
}
}
},
{
"properties": {
"stage_id": {
"const": "08-scenes"
},
"payload": {
"$ref": "#/$defs/08-scenes"
}
}
},
{
"properties": {
"stage_id": {
"const": "09-entities"
},
"payload": {
"$ref": "#/$defs/09-entities"
}
}
},
{
"properties": {
"stage_id": {
"const": "10-references"
},
"payload": {
"$ref": "#/$defs/10-references"
}
}
},
{
"properties": {
"stage_id": {
"const": "11-images"
},
"payload": {
"$ref": "#/$defs/11-images"
}
}
},
{
"properties": {
"stage_id": {
"const": "12-motion"
},
"payload": {
"$ref": "#/$defs/12-motion"
}
}
},
{
"properties": {
"stage_id": {
"const": "13-compose"
},
"payload": {
"$ref": "#/$defs/13-compose"
}
}
},
{
"properties": {
"stage_id": {
"const": "14-review"
},
"payload": {
"$ref": "#/$defs/14-review"
}
}
}
]
}