Files
video/schemas/artifacts/asset_manifest.schema.json
calesthio 355fd2b7d6 Implementation spec: governance, decision intelligence, theme system, and E2E bug fixes
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)
2026-04-03 09:35:09 -07:00

46 lines
2.2 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "openmontage/artifacts/asset_manifest",
"title": "Asset Manifest",
"description": "Inventory of generated/sourced assets produced by the Asset Generator.",
"type": "object",
"required": ["version", "assets"],
"properties": {
"version": { "type": "string", "const": "1.0" },
"assets": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "type", "path", "source_tool", "scene_id"],
"properties": {
"id": { "type": "string" },
"type": {
"type": "string",
"enum": ["image", "video", "audio", "narration", "music", "sfx", "diagram", "animation", "code_snippet", "subtitle", "font", "lut"]
},
"path": { "type": "string", "description": "Relative path within the pipeline project directory" },
"source_tool": { "type": "string" },
"scene_id": { "type": "string" },
"prompt": { "type": "string", "description": "Generation prompt if AI-generated" },
"seed": { "type": "integer", "description": "Seed if applicable" },
"model": { "type": "string", "description": "Model used for generation" },
"cost_usd": { "type": "number", "minimum": 0 },
"duration_seconds": { "type": "number", "minimum": 0 },
"resolution": { "type": "string" },
"format": { "type": "string" },
"quality_score": { "type": "number", "minimum": 0, "maximum": 1 },
"subtype": { "type": "string", "description": "Sub-classification (e.g. 'background', 'stock', 'generated')" },
"generation_summary": { "type": "string", "description": "Brief summary of how the asset was generated or sourced" },
"provider": { "type": "string", "description": "Provider name (e.g. pixabay, google_imagen)" },
"license": { "type": "string", "description": "License type (e.g. Pixabay License, CC0)" },
"original_url": { "type": "string", "description": "Source URL if downloaded from a stock service" }
},
"additionalProperties": false
}
},
"total_cost_usd": { "type": "number", "minimum": 0 },
"metadata": { "type": "object" }
},
"additionalProperties": false
}