remotion
@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 |
More from zhangga/aihub
yahoo-data-fetcher
Fetch real-time stock quotes from Yahoo Finance.
20xai-stock-sentiment
Real-time stock sentiment analysis using Twitter/X data via Grok. Use when analyzing stock ticker sentiment, tracking retail investor mood, or gauging market reaction to events.
17skill-hub-builder
Scaffold and maintain a personal skill hub repository for collecting, syncing, and distributing commonly used agent skills. Use when setting up a reusable skill hub, adding external or local skills, updating bundles, or preparing one-click install flows for a team.
12sensight
触发:查热搜/热榜(抖音/微博/小红书/推特/头条/百度);社交媒体语义搜索(微博/微信/小红书/推特,任意话题);查特定作者/账号近期发文动态;查 AI 行业资讯(论文/博客/模型发布/口碑/深度摘要)。不触发:通用知识问答、代码生成、静态事实类问题。
10long-run-harness
Use for long-running, multi-step work where the agent should keep driving toward the true final outcome across many cycles instead of stopping after one pass. Trigger when the user wants autonomous progress, durable state, session recovery, single-task execution, validation, and review gates in an existing git repository or a similarly structured workspace.
10agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
8