PluginBench
Skill
Official
Pass
Audit score 90

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
Prerequisites
  • @remotion/player installed
  • @json-render/core and @json-render/remotion packages
  • React application context
  • Zod for schema validation (if adding custom components)
Claude Code
Cursor
Windsurf
Cline

How to use remotion

  1. 1.Import Renderer and TimelineSpec from @json-render/remotion
  2. 2.Define or load a TimelineSpec JSON object with composition, tracks, and clips
  3. 3.Wrap the Renderer component in Remotion's Player component with spec and composition settings
  4. 4.Optionally register standard components or custom components via catalog definitions
  5. 5.Pass custom components to Renderer's inputProps if extending beyond standard library

Use cases

Good for
  • 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
Who it's for
  • 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

What is a TimelineSpec?

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.

Can I use custom video components?

Yes. Define custom components with Zod schemas, add them to the catalog via defineCatalog, and pass them to the Renderer's inputProps.components object.

What standard components are available?

TitleCard, TypingText, ImageSlide, SplitScreen, QuoteCard, StatCard, TextOverlay, and LowerThird. Each has a specific type (scene, image, or overlay) and default duration.

How do I apply transitions and effects?

Use the standardTransitionDefinitions and standardEffectDefinitions from the catalog, and reference them in your timeline spec clips.

Is this suitable for real-time video generation?

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

ComponentTypeDescription
TitleCardsceneFull-screen title with subtitle
TypingTextsceneTerminal-style typing animation
ImageSlideimageFull-screen image display
SplitScreensceneTwo-panel comparison
QuoteCardsceneQuote with attribution
StatCardsceneAnimated statistic display
TextOverlayoverlayText overlay
LowerThirdoverlayName/title overlay

Key Exports

ExportPurpose
RendererRender spec to Remotion composition
schemaTimeline schema
standardComponentsPre-built component registry
standardComponentDefinitionsCatalog definitions
useTransitionTransition animation hook
ClipWrapperWrap clips with transitions