
Json Render Remotion
Turn AI- or app-generated JSON timeline specs into Remotion video compositions with Player preview and catalog-defined clips.
Install
npx skills add https://github.com/vercel-labs/json-render --skill json-render-remotionWhat is this skill?
- Maps TimelineSpec JSON to Remotion via `@json-render/remotion` Renderer and `@remotion/player`.
- Standard catalogs: schema, standardComponentDefinitions, standardTransitionDefinitions, standardEffectDefinitions.
- Custom clips extend the catalog with Zod-typed component definitions alongside standard sets.
- Composition props driven by spec: durationInFrames, fps, width, height from `spec.composition`.
- Designed for AI-generated timelines and programmatic video catalogs, not hand-keyframed-only edits.
Adoption & trust: 157 installs on skills.sh; 15k GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
Video-from-JSON is implemented in the product layer—composition setup, catalogs, and Remotion Player integration—before you ship marketing or in-app video features. Remotion Renderer + TimelineSpec mapping is front-of-stack React/Remotion work tied to json-render’s schema and standard component definitions.
Common Questions / FAQ
Is Json Render Remotion safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Json Render Remotion
# @json-render/remotion Remotion renderer that converts JSON timeline specs into video compositions. ## Quick Start ```typescript 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 ```typescript 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 ```typescript 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 ```json { "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 |