Video

Video E2E visibility

Run local end-to-end video generation and inspect the inputs, IR, frames, FFmpeg logs, and output video.

Video E2E visibility

The Video E2E path should make the whole generation pipeline inspectable:

  1. YAML input
  2. Parsed Composition IR
  3. Rendered frame images
  4. FFmpeg command and logs
  5. Final encoded video
  6. Summary metadata

Run the deterministic E2E test

From the video repository:

cd ~/Code/cuitty/video
node --import tsx --test packages/render/src/e2e.test.ts

The test parses a YAML composition, checks the generated IR, renders frames when Playwright and FFmpeg are available, and verifies the output artifact.

Run the visible artifact workflow

Use the visible workflow when you want to keep artifacts after the run:

./run e2e:visible

The visible workflow should write a timestamped directory under the E2E artifacts root. Keep that directory when debugging local failures or uploading CI artifacts.

Expected files:

ArtifactPurpose
input.yamlExact DSL input used by the test.
composition.ir.jsonParsed and normalized Composition IR.
render-options.jsonRender options passed into the renderer.
frames/Sampled frame HTML and PNG files.
ffmpeg/args.jsonEncoder command arguments.
ffmpeg/stderr.logCaptured encoder stderr.
trace-events.jsonRenderer trace events from composition through encode.
output/e2e-smoke.mp4Final rendered video.
output/ffprobe.jsonffprobe metadata when ffprobe is available.
manifest.jsonArtifact index with dimensions, frame count, codec, size, and timings.
summary.mdHuman-readable CI summary.

CI expectations

CI should upload the visible artifact directory for every E2E run, including failures. That makes a failed render debuggable without reproducing the exact runner state locally.

Troubleshooting

If rendering is skipped, check for missing local prerequisites:

ffmpeg -version
node --import tsx --test packages/render/src/e2e.test.ts

Use CLI --dry-run to separate DSL or IR failures from browser and encoder failures:

cuitty-video render composition.yaml --dry-run