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:
- YAML input
- Parsed Composition IR
- Rendered frame images
- FFmpeg command and logs
- Final encoded video
- 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:
| Artifact | Purpose |
|---|---|
input.yaml | Exact DSL input used by the test. |
composition.ir.json | Parsed and normalized Composition IR. |
render-options.json | Render options passed into the renderer. |
frames/ | Sampled frame HTML and PNG files. |
ffmpeg/args.json | Encoder command arguments. |
ffmpeg/stderr.log | Captured encoder stderr. |
trace-events.json | Renderer trace events from composition through encode. |
output/e2e-smoke.mp4 | Final rendered video. |
output/ffprobe.json | ffprobe metadata when ffprobe is available. |
manifest.json | Artifact index with dimensions, frame count, codec, size, and timings. |
summary.md | Human-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