Skip to main content
View as Markdown

sources.yaml

The recipe map: how each raw asset is made, keyed by id. Scenes reference these ids; the ids point at files under inputs/. Paths are relative to the project directory.

# yaml-language-server: $schema=../../schemas/sources.schema.json
install_demo: { kind: cli, tape: inputs/recordings/install.tape } # terminal recording (vhs)
dashboard_demo: { kind: web, spec: inputs/recordings/dashboard.scenes.yaml } # browser recording (Playwright)
hero_img: { kind: image, file: inputs/media/hero.png } # a provided image

Each entry is id: { kind: …, <recipe fields> }. A scene then refers to the asset by its id, e.g. background: { kind: web, source: dashboard_demo }.

Source kinds

kindWhat it producesKey field
cliA terminal recording rendered from a vhs .tape scripttape:
webA browser capture driven by a Playwright .scenes.yaml recipespec:
imageA provided still image used directlyfile:
videoA pre-recorded clip you already have (screencast, captured demo)file:
avatarA talking-head clip generated from narration

sources.yaml is optional

A project whose scenes are all slide or avatar needs no sources.yaml at all — those scenes generate their own visuals from templates and narration.

Where files live

Point recipe fields into inputs/:

inputs/
├── media/ # image files for `image` / `video` sources (file:)
│ └── hero.png
└── recordings/ # recipe sources: .tape (vhs), .scenes.yaml (Playwright), frozen .har
├── install.tape
└── dashboard.scenes.yaml

At decodx plan, a file:-backed source whose pixel dimensions differ from meta.resolution prints an advisory (below the canvas → upscaled and soft; far above → downscaling can blur fine screen text).

Next: scenes/<id>.yaml — where you assemble backgrounds, avatars, and narration.