remotion
vercel-labs/json-render
Convert JSON timeline specs into videos using Remotion compositions.
What is remotion?
A Remotion renderer for json-render that transforms JSON-defined video timelines into playable video compositions. Use this when you need to generate videos programmatically from structured data, build dynamic video catalogs, or render AI-generated video specifications.
- Render JSON timeline specs as Remotion video compositions
- Use pre-built standard components (TitleCard, TypingText, ImageSlide, SplitScreen, QuoteCard, StatCard, TextOverlay, LowerThird)
- Define custom video components with Zod schemas and catalog registration
- Apply transitions and effects to clips via timeline specifications
- Configure composition properties (fps, resolution, duration) in JSON
- Embed video player with controls in React applications
How to install remotion
npx skills add https://github.com/vercel-labs/json-render --skill remotion- @remotion/player installed
- @json-render/core and @json-render/remotion packages
- React application context
- Zod for schema validation (if adding custom components)
How to use remotion
- 1.Import Renderer and TimelineSpec from @json-render/remotion
- 2.Define or load a TimelineSpec JSON object with composition, tracks, and clips
- 3.Wrap the Renderer component in Remotion's Player component with spec and composition settings
- 4.Optionally register standard components or custom components via catalog definitions
- 5.Pass custom components to Renderer's inputProps if extending beyond standard library
Use cases
- Generate marketing or tutorial videos from JSON-structured content
- Build automated video catalogs where each entry is defined as a timeline spec
- Render AI-generated video timelines by converting model output to JSON specs
- Create dynamic video compositions with programmatically-defined clips and effects
- Develop video editing tools that persist compositions as JSON for reproducibility
- Video automation engineers
- Full-stack developers building video generation platforms
- AI/ML engineers integrating video output into agent workflows
- Content creators using programmatic video generation
remotion FAQ
A TimelineSpec is a JSON structure defining video composition metadata (fps, resolution, duration), tracks, clips with component types and props, and audio configuration. It serves as the declarative blueprint for the entire video.
Yes. Define custom components with Zod schemas, add them to the catalog via defineCatalog, and pass them to the Renderer's inputProps.components object.
TitleCard, TypingText, ImageSlide, SplitScreen, QuoteCard, StatCard, TextOverlay, and LowerThird. Each has a specific type (scene, image, or overlay) and default duration.
Use the standardTransitionDefinitions and standardEffectDefinitions from the catalog, and reference them in your timeline spec clips.
Yes, you can generate and render videos on-demand from JSON specs, making it suitable for dynamic video generation workflows and AI agent outputs.
Full instructions (SKILL.md)
Source of truth, from vercel-labs/json-render.
name: remotion description: Remotion renderer for json-render that turns JSON timeline specs into videos. Use when working with @json-render/remotion, building video compositions from JSON, creating video catalogs, or rendering AI-generated video timelines.
@json-render/remotion
Remotion renderer that converts JSON timeline specs into video compositions.
Quick Start
import { Player } from "@remotion/player";
import { Renderer, type TimelineSpec } from "@json-render/remotion";
function VideoPlayer({ spec }: { spec: TimelineSpec }) {
return (
<Player
component={Renderer}
inputProps={{ spec }}
durationInFrames={spec.composition.durationInFrames}
fps={spec.composition.fps}
compositionWidth={spec.composition.width}
compositionHeight={spec.composition.height}
controls
/>
);
}
Using Standard Components
import { defineCatalog } from "@json-render/core";
import {
schema,
standardComponentDefinitions,
standardTransitionDefinitions,
standardEffectDefinitions,
} from "@json-render/remotion";
export const videoCatalog = defineCatalog(schema, {
components: standardComponentDefinitions,
transitions: standardTransitionDefinitions,
effects: standardEffectDefinitions,
});
Adding Custom Components
import { z } from "zod";
const catalog = defineCatalog(schema, {
components: {
...standardComponentDefinitions,
MyCustomClip: {
props: z.object({ text: z.string() }),
type: "scene",
defaultDuration: 90,
description: "My custom video clip",
},
},
});
// Pass custom component to Renderer
<Player
component={Renderer}
inputProps={{
spec,
components: { MyCustomClip: MyCustomComponent },
}}
/>
Timeline Spec Structure
{
"composition": { "id": "video", "fps": 30, "width": 1920, "height": 1080, "durationInFrames": 300 },
"tracks": [{ "id": "main", "name": "Main", "type": "video", "enabled": true }],
"clips": [
{ "id": "clip-1", "trackId": "main", "component": "TitleCard", "props": { "title": "Hello" }, "from": 0, "durationInFrames": 90 }
],
"audio": { "tracks": [] }
}
Standard Components
| Component | Type | Description |
|---|---|---|
TitleCard | scene | Full-screen title with subtitle |
TypingText | scene | Terminal-style typing animation |
ImageSlide | image | Full-screen image display |
SplitScreen | scene | Two-panel comparison |
QuoteCard | scene | Quote with attribution |
StatCard | scene | Animated statistic display |
TextOverlay | overlay | Text overlay |
LowerThird | overlay | Name/title overlay |
Key Exports
| Export | Purpose |
|---|---|
Renderer | Render spec to Remotion composition |
schema | Timeline schema |
standardComponents | Pre-built component registry |
standardComponentDefinitions | Catalog definitions |
useTransition | Transition animation hook |
ClipWrapper | Wrap clips with transitions |
Related skills
More from vercel-labs/json-render and the wider catalog.

remotion-best-practices
Domain-specific best practices and patterns for building videos with Remotion and React.

shadcn
36 pre-built shadcn/ui components for json-render with Radix UI + Tailwind CSS.

shadcn-svelte
Pre-built shadcn-svelte components for json-render Svelte apps. Use when working with @json-render/shadcn-svelte, adding standard UI components to a Svelte catalog, or building Svelte web UIs with shadcn-svelte + Tailwind CSS components.

solid
SolidJS renderer for json-render. Use when building @json-render/solid catalogs/registries, wiring Renderer providers, implementing bindings/actions, or troubleshooting Solid-specific reactivity patterns.

svelte
Svelte 5 renderer for json-render that turns JSON specs into Svelte component trees. Use when working with @json-render/svelte, building Svelte UIs from JSON, creating component catalogs, or rendering AI-generated specs.

vue
Vue 3 renderer for building UIs from JSON specs with data binding and actions.