Skip to main content
View as Markdown

project.yaml

The top of the project. It holds project-level meta, the ordered scenes: list (which is the play order), and an optional thumbnail.

# yaml-language-server: $schema=../../schemas/project.schema.json
meta:
title: My Video
resolution: [1920, 1080]
fps: 30
target: { platform: youtube, max_duration: 120, encode: youtube-1080p }
budget: { max_usd: 5.0, require_approval_above: 0.5 }
scenes: [intro, demo, outro] # order = play order; each id names a scenes/<id>.yaml
thumbnail: { source: hero_img, title_text: My Video }

meta

Project-wide settings that every scene inherits.

FieldMeaning
titleThe video title (used in metadata, thumbnail, chapters).
resolution[width, height] of the output canvas, e.g. [1920, 1080].
fpsFrames per second.
targetDelivery target — platform, max_duration (seconds), and an encode profile.
budgetCost guardrail — max_usd caps the run; require_approval_above gates paid work above a threshold.

meta also carries optional brand, avatar, voice, music, captions, and defaults (e.g. defaults.video_speed) — a per-scene value always overrides the project default.

scenes

The ordered list of scene ids. The list is the play order, and each id must name a file in scenes/ (introscenes/intro.yaml):

scenes: [intro, demo, outro]

Reorder the video by reordering this list. Deleting an id removes that scene from the cut (the scene file can stay on disk).

thumbnail

Optional. Points at an image source and overlays title text:

thumbnail: { source: hero_img, title_text: My Video }

Validate before you render

decodx plan my-video

decodx plan validates the whole file set, expands defaults, and prints the estimate table — no cost, no render. Errors name the exact authored file and field.

Next: sources.yaml — the recipe map your scenes reference.