mirror of
https://github.com/hanzoai/video.git
synced 2026-10-30 18:18:27 +00:00
Implements the 2026-04-02 transformation spec (Phases 1-8) and fixes all critical bugs found during 5-pipeline E2E testing. Governance & Decision Intelligence: - Pipeline-specific stage order in checkpoint (replaces global STAGES list) - Provider scoring engine (lib/scoring.py) with 7-dimension weighted ranking - Decision log artifact enforced at proposal/idea stage across all 10 pipelines - Delivery promise classifier prevents silent motion-to-still downgrades - Structured shot language in scene_plan schema (camera, lens, lighting, DOF) - Variation checker and slideshow risk scorer block samey output before render - Creative intake, capability extension, and creative-intake meta skills - Final self-review artifact with 5 mandatory checks before presenting output - Source media review contract for user-supplied footage Render & Theme System: - Remotion AnimatedBackground now derives colors from playbook (no more hardcoded dark blue fintech gradient on every video) - video_compose builds custom ThemeConfig from playbook YAML colors/fonts — custom playbooks flow through to Remotion automatically - Explainer component wires theme to all child components (charts, cards, etc.) - resolveAsset() handles absolute paths on Windows/Unix via file:// URIs - RENDERER_FAMILY_MAP synced with actual Remotion compositions Critical Bug Fixes: - Windows npx subprocess: run_command() resolves .cmd wrappers via shutil.which() - Silent renderer downgrade: Remotion failure now returns explicit error with options instead of silently falling back to FFmpeg - .env inline comment parsing strips trailing # comments from API keys - concat_path UnboundLocalError in video_compose finally block - audio_mixer and showcase_card capture=True kwarg bug - Selector estimate_cost() calls fixed (_select_tool -> _select_best_tool) - asset_manifest schema expanded with provider, license, subtype fields - screen-demo subtitle_gen moved from required to optional tools - Duration drift detection in post-render final review (>25% warns)
83 lines
3.3 KiB
JSON
83 lines
3.3 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "openmontage/artifacts/source_media_review",
|
|
"title": "Source Media Review",
|
|
"description": "Structured review of user-supplied media files. Created before the first planning stage when user media exists. Ensures the agent inspects actual media content instead of planning around assumptions.",
|
|
"type": "object",
|
|
"required": ["version", "files", "summary", "planning_implications"],
|
|
"properties": {
|
|
"version": { "type": "string", "const": "1.0" },
|
|
"files": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["path", "media_type", "reviewed"],
|
|
"properties": {
|
|
"path": { "type": "string" },
|
|
"media_type": {
|
|
"type": "string",
|
|
"enum": ["video", "audio", "image"]
|
|
},
|
|
"reviewed": {
|
|
"type": "boolean",
|
|
"const": true,
|
|
"description": "Must be true — the file was actually inspected, not assumed"
|
|
},
|
|
"technical_probe": {
|
|
"type": "object",
|
|
"description": "Raw ffprobe or metadata output for this file",
|
|
"properties": {
|
|
"duration_seconds": { "type": "number" },
|
|
"resolution": { "type": "string" },
|
|
"fps": { "type": "number" },
|
|
"codec": { "type": "string" },
|
|
"audio_codec": { "type": "string" },
|
|
"sample_rate": { "type": "integer" },
|
|
"channels": { "type": "integer" },
|
|
"file_size_bytes": { "type": "integer" },
|
|
"bitrate_kbps": { "type": "number" }
|
|
}
|
|
},
|
|
"content_summary": {
|
|
"type": "string",
|
|
"description": "What the file actually contains — described from observation, not assumption"
|
|
},
|
|
"transcript_summary": {
|
|
"type": "string",
|
|
"description": "Summary of spoken content, if audio/video with speech"
|
|
},
|
|
"representative_frames": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Paths to sampled frames (video/image only)"
|
|
},
|
|
"quality_risks": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Quality issues that affect planning (low resolution, poor audio, shaky footage, etc.)"
|
|
},
|
|
"usable_for": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "What this file can be used for in the production (hero footage, b-roll, background audio, etc.)"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"minItems": 1
|
|
},
|
|
"summary": {
|
|
"type": "string",
|
|
"description": "What the supplied media actually contains and what it does not. Be specific — 'contains 45s of interview footage, no b-roll, mono audio at 44.1kHz' not 'user provided footage'"
|
|
},
|
|
"planning_implications": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Concrete constraints or opportunities that must affect proposal/script/scene planning. Each item should be actionable.",
|
|
"minItems": 1
|
|
},
|
|
"metadata": { "type": "object" }
|
|
},
|
|
"additionalProperties": false
|
|
}
|