All Typography Developer proof Product UI Data Narrative Foundation Brand Sound
Typography Open title-reveal An independent React video framework.
A staggered, word-masked headline.
Open metric-callout A single counted number with a supporting label.
Open captions Frame-accurate caption cues for sound-off playback.
Open word-cascade Write.
Preview.
Ship.
One workflow, every launch.
Words enter in a paced vertical sequence.
Open character-rise M o m e n t u m
Motion with a purpose.
Characters rise with a crisp per-letter stagger.
Open soft-blur-in Built for focus.
Everything you need, nothing you do not.
A gentle blur and opacity reveal for premium openings.
Open staggered-lines One workflow.
Every launch.
From first scene to final render.
Two line hierarchy with independent entrance timing.
Open kinetic-center A centered statement assembled from timed word groups.
Open typewriter one command
pnpm odori dev
Deterministic typing with a frame-driven caret.
Open rolling-number 98.7%
frames delivered on time
Metrics roll without width changes or digit jitter.
Open value-swap Replace one label or value while preserving alignment.
Developer proof Open code-proof
videos/launch/video.tsx tsx 1 export const metadata = defineVideoMetadata({
2 id: "launch" ,
3 title: "Product launch" ,
4 duration: "12s" ,
5 });
Static metadata, ordinary JSX.
A framed source excerpt that reveals line by line.
Open terminal $ pnpm create odori@latest product-stories
Created videos/launch/video.tsx
A typed command session with deterministic output reveals.
Open code-walkthrough videos/launch/video.tsx
1 export const metadata = defineVideoMetadata({
2 id: "launch",
3 duration: "8s",
4 });
5
6 export default function LaunchVideo() {
7 return (
8 <Video>
9 <Scene duration="5s">
10 <TitleReveal title="Ship the story." />
11 </Scene>
12 </Video>
13 );
14 }
Scenes are ordered, not numbered.
Progressive code reveal with authored focal regions.
Open file-tree videos/
layout.tsx
components/
title-reveal/
launch/
video.tsx
schema.ts
Progressive repository navigation with active file state.
Open diff-proof videos/launch/video.tsx
<Video>
- <Scene duration="4s">
+ <Scene duration="5s">
<TitleReveal title={headline} />
</Scene>
</Video>
Before and after source changes with semantic emphasis.
Open log-stream odori export launch
INFO resolved manifest launch@2f9c
INFO sampling 12 representative frames
WARN scene proof runs 18f under its contract
INFO rendering 360 frames
INFO mixing audio to -14 LUFS
DONE wrote out/launch.mp4
Paced runtime logs with levels and bounded scrolling.
Open command-menu Keyboard-first action search and selection flow.
Open dependency-graph One graph, one render path.
videos/launch
videos/components
odori
public/audio
Packages and modules connected as a readable graph.
Data Open bar-chart Ranked bars with labels, values, and staged growth.
Open line-chart Videos shipped per week
The week the registry landed.
Time-series path draw with optional focal annotation.
Open area-chart Frames rendered
Cumulative, across every format.
Filled trend reveal for volume and cumulative change.
Open donut-chart Where render time goes
encode 72% paint 18% audio 10%
Part-to-whole display with a stable center metric.
Open progress-ring Circular completion display with restrained motion.
Open heatmap Grid intensity reveal for activity and distribution.
Open data-table Export jobs
Video Format Duration State
launch 1920x1080 12s queued
launch 1080x1920 12s rendering
announcement 1080x1080 8s done
Sortable rows with an authored selection story.
Narrative Open connection-story One definition, every render path.
A left-to-right pipeline of connected stages.
Open workflow-steps From file to finished cut
1 Author
2 Preview
3 Test
4 Export
Sequential process with one active focal point.
Open state-transition Before, processing, and resolved product states.
Open before-after Ordered scenes
Hand-numbered frames
Direct visual comparison with a controlled divider.
Open comparison Two ways to ship a launch video
Manual edit
Re-cut for every format
Copy changes by hand
Export to see the change
Odori this one
One layout per format
Typed inputs per variant
Preview needs no encode
Two options contrasted through matched structure.
Open timeline From idea to launch
Idea one sentence
Draft scenes in place
Review contract tests
Launch one export
Milestones revealed along a measured temporal axis.
Open logo-orbit
odori one ecosystem
Next.js
React
Studio
FFmpeg
CI
Slack
Product identity surrounded by connected integrations.
Open feature-stack What you get
Reliable
The approved cut is the rendered cut.
Benefits progress through one stable visual container.
Foundation Open absolute-stage Content sits here
1920 x 1080
Full-frame surface with stable clipping and positioning.
Open brand-provider Brand tokens
background#000000
surface#0a0a0a
foreground#ededed
muted#a1a1a1
accent#ffffff
border#1f1f1f
Sans, for statements Mono, for evidence
standard [0.16, 1, 0.3, 1] · stagger 4f
Typed color, type, spacing, radius, and motion tokens.
Open safe-area Everything readable sits inside
Format-aware title and action safety boundaries.
Open identity-reveal
An independent React video framework.
Product mark and name entrance with visual restraint.
Open split-layout Story on one side.
Proof on the other, in the same frame.
Responsive two-up composition for proof and explanation.
Open marks-starter Placeholder marks that draw themselves on, as editable SVG source.
Brand Open stage The shared backdrop: hairline grid, soft glow, and vignette.
Open end-card Author. Preview. Ship.
An independent React video framework.
$ npm i odori
The closing frame: title, supporting line, and a call to action.
Sound Open ui-key A typed key: filtered noise with a short tone under it.
Open ui-reveal A short upward sweep that settles, for an entrance.
Open brand-resolve
brand.resolve · 36 frames
The closing sting: a fifth, a root, and a sub under the landing.