The agent-first
video framework.

Create videos with React and the filesystem.
Components, audio, and templates built in.

Set up Odori in this folder and make a launch video from it. The guide is at odori.dev/start.md.
Odori
VideosComponentsBrandsAssets
0.0s40.0s
continuous timeline
 
00:00.00 / 00:39.29frame 0 of 1199 
Odori launch
Type
Quality
id
odori-film
format
1920x1080 at 30fps
duration
1200f · 40.00s
brand
odori
source
videos/odori-film/video.tsx

This is Studio, the workspace odori dev opens.

Start with a template

Install a template and customize its text, scenes, and audio.

All templates →

Folder in, film out

Define scenes in video.tsx. Share brand settings and formats through layout.tsx.

TSvideos/launch/video.tsx
import {Audio, Scene, Video, defineVideoMetadata} from "odori";
import {CodeProof} from "../components/code-proof/code-proof";
import {EndCard} from "../components/end-card/end-card";
import {Stage} from "../components/stage/stage";
import {TitleReveal} from "../components/title-reveal/title-reveal";
import {productLayout} from "../layout";
import {launchInput} from "./schema";

export const metadata = defineVideoMetadata({
  id: "launch",
  title: "Odori launch",
  description: "A concise introduction to the odori authoring model.",
  duration: "12s",
  layout: productLayout,
  schema: launchInput,
  tags: ["launch", "framework"],
  thumbnailFrame: 45,
});

export default function LaunchVideo({
  headline,
  callToAction,
}: {
  headline: string;
  callToAction: string;
}) {
  return (
    <Video>
      {/* One bed under the whole cut, ducked so scene sounds stay audible. */}
      <Audio src="bed.main" gain={0.6} fadeIn="1s" fadeOut="1.5s" duckUnder="foreground" />

      <Scene id="opening" duration="4s" name="Opening">
        <Stage>
          <TitleReveal title={headline} detail="An independent React video framework." />
        </Stage>
      </Scene>
      <Scene id="proof" duration="5s" name="Proof">
        <Stage grid={false}>
          <CodeProof
            code={SOURCE}
            language="tsx"
            title="videos/launch/video.tsx"
            caption="Static metadata for discovery. Ordinary JSX for the timeline."
          />
        </Stage>
      </Scene>
      <Scene id="resolution" duration="3s" name="Resolution">
        <Audio group="foreground" src="ui.confirm" from="0.2s" duration="1s" gain={0.7} />
        <Stage>
          <EndCard
            title={"One definition.\nEvery render path."}
            detail="Preview needs no encode. Export freezes the approved cut."
            callToAction={callToAction}
          />
        </Stage>
      </Scene>
    </Video>
  );
}

/** The example entry the proof scene displays on screen. */
const SOURCE = `export const metadata = defineVideoMetadata({
  id: "launch",
  title: "Product launch",
  duration: "12s",
});

export default function LaunchVideo() {
  return (
    <Video>
      <Scene id="opening" duration="4s">
        <TitleReveal title="Author the story." />
      </Scene>
    </Video>
  );
}`;

Designed for agents

Give your agent the docs, source files, and commands to create and test videos.

Edit every component

Add charts, interfaces, and motion effects with odori add. Edit their source in your project.

All components →

Analyze. Code. Export.

reading your repo · writing videos/layout.tsx
SansSerifMono
10 colours · 3 faces · 1920 × 1080 · 30 fps
01

Sync the design system

Use your project's colors, fonts, and UI to set the video brand.

npx skills add allenzhou101/odori --skill initialize-design-system
02

Add components

Install components and customize their source.

odori add component title-reveal bar-chart
03

Create a video

Write scenes in video.tsx, or ask your agent to create them.

odori new launch
Launch
Horizons
Velocity
04

Add audio

Add music and sound effects, or generate narration with ElevenLabs.

odori audio generate "warm minimal ambient" --type music
$ odori export launch360 frames · 4 workers · 11.1sMP4out/launch.mp41920×1080 · 12s · 1.0 MB
05

Export the file

Render your scenes and audio to an MP4.

odori export launch

Add music and sound effects

Choose from the audio library, import a track, or generate music with ElevenLabs.

Confirmation

Two rising notes for a confirmation.

Notification

A soft bell for notifications.

Opening chord

A swell and chord for an opening title.

Launch

Building music for a product reveal.

Horizons

Steady, spacious background music.

Lift

A sustained chord with shimmering high notes.

All sounds →

Create your first video

Get started