Skip to content
Esc
navigateopen⌘Jpreview
On this page

Alternative structures

Other project and authoring models Odori could support, and why videos plus JSX is the default.

Filesystem alternatives

Structure Strength Cost Decision
videos/ at repository root Clear first-class convention; works with or without Next.js Adds another root source folder Default
src/videos/ Familiar to libraries using src/ Weakens the visible convention Configurable
app/videos/ Colocates with Next.js routes Confuses URLs with compositions Not recommended
packages/videos/ Strong monorepo isolation Heavy for small projects Supported as a configured root
One package per video Independent deployments and ownership Excessive setup and poor sharing Large-studio option

Authoring alternatives

video.tsx exports static metadata and a React timeline. This is Odori’s default because components compose naturally and React remains visible.

A video.ts scene array is easier for machines to inspect but creates a parallel configuration language and makes composition less natural.

Direct Odori frame hooks and ordinary React provide total freedom. Authors can bypass structured <Scene> boundaries without leaving the Odori runtime.

A JSON timeline is portable and editor-friendly, but it limits React expressiveness and makes source ownership less direct.

Registration alternatives

Runtime filesystem globbing is concise but bundler-specific. Manual registration is portable but repetitive and easy to drift. Odori generates a static import manifest, retaining portability and code splitting while keeping registration out of user source.

Rendering alternatives

  • Local Chromium and FFmpeg are ideal for development and CI.
  • Dedicated workers provide predictable hosted rendering and isolation.
  • Serverless rendering scales well for bursty workloads but needs chunking, artifact assembly, and provider-specific operations.
  • Client-side encoding can help with lightweight cuts but is not the default for consistent production codecs, fonts, and large assets.

The authoring contract remains deployment-independent. Preview and export share the same frozen manifest regardless of renderer.

Was this page helpful?