Test and review videos
Combine automated checks with visual review. A passing test can catch invalid timing or unreadable text, but it cannot judge whether a scene communicates the intended story.
Check the project structure
Run these commands from your project root:
pnpm odori doctor
pnpm odori graph --json
pnpm odori list --jsondoctor checks the environment and project structure. graph writes the compiled project graph and reports structural errors. list confirms which video IDs were discovered.
If a video is missing, check its entry filename and configured source directory before investigating the renderer.
Inspect the timeline
Inspect one composition to resolve its metadata, inputs, preparation, and compiled scene boundaries:
pnpm odori inspect launch --jsonCompare the declared duration with the scene total. Check scene IDs, ordering, audio offsets, and the resolved output format. Changing a scene duration shifts later scenes; review cues and overlays that use video-relative placement.
Run automated checks
Test one video while editing, then the project before publishing:
pnpm odori test launch
pnpm odori test --jsonChecks cover schema defaults, duration agreement, representative blank frames, entirely off-canvas content, and text below the configured size policy. The default text threshold is 20px at a 1080p reference, measured after scaling.
The off-canvas check is not a guarantee against all partial clipping. Inspect your actual output, especially long text and portrait formats.
Review meaningful frames
Capture entrances, settled content, exits, and scene boundaries. Use a distinct filename for each review frame:
pnpm odori frame launch --at 0.5s --output out/entrance.png
pnpm odori frame launch --at 2s --output out/settled.png
pnpm odori frame launch --at 119f --output out/before-cut.png
pnpm odori frame launch --at 120f --output out/after-cut.pngAdjust these times to the inspected timeline. Check hierarchy, spacing, contrast, image crops, and whether important content is inside the safe area. Play the sequence in Studio to assess pacing and listen to the mix.
Mark intentional exceptions
Decorative interface labels can be smaller than the main message. Scope an exception to that UI detail:
<div data-odori-chrome>
<small>Last synced 2 minutes ago</small>
</div>For intentional offscreen artwork, use data-odori-bleed on the relevant element. Do not wrap the whole video in either exception; that hides problems in content viewers need to read.
Review after changes
Rerun checks after editing timing, fonts, content, layouts, or component source. A longer headline or different font can break an otherwise unchanged scene. Finish with the encoded file from exporting, since compression and audio mixing happen after frame review.