# Remotion API checks

Checked against official Remotion documentation on September 5, 2026. The
project pins Remotion packages to **4.0.520** and checks the actual installed
types. Documentation is a reference for API behavior, not evidence of how an
OpenAI film was authored. No claim is made that OpenAI used Remotion.

| API / official reference | Contract used in this project |
| --- | --- |
| [registerRoot](https://www.remotion.dev/docs/register-root) | `src/index.ts` registers one root containing the compositions. |
| [Composition](https://www.remotion.dev/docs/composition) | Each study has a stable id, component, width, height, fps, duration and default props. |
| [calculateMetadata](https://www.remotion.dev/docs/calculate-metadata) | Validated input props determine the actual duration; changing a hold cannot leave stale composition metadata. |
| [Sequence](https://www.remotion.dev/docs/sequence) | `from` places a shot on the outer timeline; the child frame clock is local to that shot. `durationInFrames` bounds its visibility. |
| [interpolate](https://www.remotion.dev/docs/interpolate) | Explicit left/right clamping prevents motion extrapolating outside a phase. |
| [Easing](https://www.remotion.dev/docs/easing) | The chosen cubic Bézier transforms normalized progress; its control points are not recovered film settings. |
| [staticFile](https://www.remotion.dev/docs/staticfile) | Bundled font paths resolve inside the public asset directory; they do not fetch fonts from a remote CDN. |
| [delayRender / continueRender](https://www.remotion.dev/docs/delay-render) | Rendering waits for bundled font loading, then releases the handle. Failure cancels rather than exporting fallback typography. |
| [getCompositions](https://www.remotion.dev/docs/renderer/get-compositions) | The batch script retrieves the registered, resolved video configs from its bundle. |
| [renderMedia](https://www.remotion.dev/docs/renderer/render-media) | The batch script sets codec, pixel format, image format, color space, mute, output and concurrency explicitly. |
| [Configuration](https://www.remotion.dev/docs/config) | CLI defaults live in `remotion.config.ts`. The programmatic renderer does **not** inherit that file, so batch settings are repeated explicitly. |
| [Render CLI](https://www.remotion.dev/docs/cli/render) | Commands specify entry point through npm, composition id, output file and optional JSON input props. |
| [Browser ensure](https://www.remotion.dev/docs/cli/browser) | The documented browser-download command is `npx remotion browser ensure`; an existing compatible executable is optional. |
| [System requirements](https://www.remotion.dev/docs#system-requirements) | A clean Linux environment may need browser system packages before rendering. They are not npm dependencies. |

`npm ci` installs the included lockfile without resolving a new dependency
graph. `npm run typecheck` checks TypeScript; `npm test` checks phase ordering,
sequence isolation and recording alignment. Rendering and decoded-video checks
are separate acceptance steps. A type check alone does not establish that a
frame fits, an asset loads, a hold reads well, or a source mechanic is faithful.

## Keep render settings in agreement

CLI renders use `remotion.config.ts`; `scripts/render-all.mjs` uses the Node
renderer API. Both choose PNG intermediate frames, BT.709, H.264, yuv420p and
mute. The PNG intermediate avoids an implicit intermediate JPEG YUV conversion.
These are reproducible research settings, not recovered source production
settings or approved Google Slides delivery settings.

When adapting the batch renderer to custom input props, pass the same input
props into metadata selection and rendering. Otherwise the video duration and
the rendered content can disagree. Keep every Remotion package on the same
pinned version when upgrading, then rerun all checks and compare rendered
boundary frames. Consult Remotion's own license before downstream use; this
guide does not grant rights to dependencies or source films.
