remotion-render

작성자: halt-catch-fire

React/Remotion 컴포넌트 코드를 inference.sh를 통해 비디오로 렌더링합니다. TSX 코드를 전달하면 MP4를 받을 수 있습니다. useCurrentFrame, useVideoConfig, spring, interpolate, AbsoluteFill, Sequence 등 모든 Remotion API를 지원합니다. 해상도, FPS, 지속 시간, 코덱을 설정할 수 있습니다. 사용 용도: 프로그래매틱 비디오 생성, 애니메이션 그래픽, 모션 디자인, 데이터 기반 비디오, React 애니메이션을 비디오로 변환. 트리거: remotion, 코드에서 비디오 렌더링, tsx를 비디오로, react 비디오, 프로그래매틱 비디오, remotion 렌더, 코드를 비디오로, 애니메이션...

npx skills add https://github.com/halt-catch-fire/skills --skill remotion-render

Install the belt CLI skill: npx skills add belt-sh/cli

Remotion Render

Render videos from React/Remotion component code via inference.sh CLI.

Remotion Render

Quick Start

Requires inference.sh CLI (belt). Install instructions

belt login

# Render a simple animation
belt app run infsh/remotion-render --input '{
  "code": "import { useCurrentFrame, AbsoluteFill } from \"remotion\"; export default function Main() { const frame = useCurrentFrame(); return <AbsoluteFill style={{backgroundColor: \"#000\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\"}}><h1 style={{color: \"white\", fontSize: 100, opacity: frame / 30}}>Hello World</h1></AbsoluteFill>; }",
  "duration_seconds": 3,
  "fps": 30,
  "width": 1920,
  "height": 1080
}'

Input Schema

ParameterTypeRequiredDescription
codestringYesReact component TSX code. Must export default a component.
composition_idstringNoComposition ID to render
propsobjectNoProps passed to the component
widthnumberNoVideo width in pixels
heightnumberNoVideo height in pixels
fpsnumberNoFrames per second
duration_secondsnumberNoVideo duration in seconds
codecstringNoOutput codec

Available Imports

Your TSX code can import from remotion and react:

// Remotion APIs
import {
  useCurrentFrame,
  useVideoConfig,
  spring,
  interpolate,
  AbsoluteFill,
  Sequence,
  Audio,
  Video,
  Img
} from "remotion";

// React
import React, { useState, useEffect } from "react";

Examples

Fade-In Text

belt app run infsh/remotion-render --input '{
  "code": "import { useCurrentFrame, AbsoluteFill, interpolate } from \"remotion\"; export default function Main() { const frame = useCurrentFrame(); const opacity = interpolate(frame, [0, 30], [0, 1]); return <AbsoluteFill style={{backgroundColor: \"#1a1a2e\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\"}}><h1 style={{color: \"#eee\", fontSize: 80, opacity}}>Welcome</h1></AbsoluteFill>; }",
  "duration_seconds": 2,
  "fps": 30,
  "width": 1920,
  "height": 1080
}'

Animated Counter

belt app run infsh/remotion-render --input '{
  "code": "import { useCurrentFrame, useVideoConfig, AbsoluteFill } from \"remotion\"; export default function Main() { const frame = useCurrentFrame(); const { fps, durationInFrames } = useVideoConfig(); const progress = Math.floor((frame / durationInFrames) * 100); return <AbsoluteFill style={{backgroundColor: \"#000\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\", flexDirection: \"column\"}}><h1 style={{color: \"#fff\", fontSize: 200}}>{progress}%</h1><p style={{color: \"#666\", fontSize: 30}}>Loading...</p></AbsoluteFill>; }",
  "duration_seconds": 5,
  "fps": 60,
  "width": 1080,
  "height": 1080
}'

Spring Animation

belt app run infsh/remotion-render --input '{
  "code": "import { useCurrentFrame, useVideoConfig, spring, AbsoluteFill } from \"remotion\"; export default function Main() { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const scale = spring({ frame, fps, config: { damping: 10, stiffness: 100 } }); return <AbsoluteFill style={{backgroundColor: \"#6366f1\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\"}}><div style={{width: 200, height: 200, backgroundColor: \"white\", borderRadius: 20, transform: `scale(${scale})`}} /></AbsoluteFill>; }",
  "duration_seconds": 2,
  "fps": 60,
  "width": 1080,
  "height": 1080
}'

With Props

belt app run infsh/remotion-render --input '{
  "code": "import { AbsoluteFill } from \"remotion\"; export default function Main({ title, subtitle }) { return <AbsoluteFill style={{backgroundColor: \"#000\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\", flexDirection: \"column\"}}><h1 style={{color: \"#fff\", fontSize: 80}}>{title}</h1><p style={{color: \"#888\", fontSize: 40}}>{subtitle}</p></AbsoluteFill>; }",
  "props": {"title": "My Video", "subtitle": "Created with Remotion"},
  "duration_seconds": 3,
  "fps": 30,
  "width": 1920,
  "height": 1080
}'

Sequence Animation

belt app run infsh/remotion-render --input '{
  "code": "import { useCurrentFrame, AbsoluteFill, Sequence, interpolate } from \"remotion\"; function FadeIn({ children }) { const frame = useCurrentFrame(); const opacity = interpolate(frame, [0, 20], [0, 1]); return <div style={{ opacity }}>{children}</div>; } export default function Main() { return <AbsoluteFill style={{backgroundColor: \"#000\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\", flexDirection: \"column\", gap: 20}}><Sequence from={0}><FadeIn><h1 style={{color: \"#fff\", fontSize: 60}}>First</h1></FadeIn></Sequence><Sequence from={30}><FadeIn><h1 style={{color: \"#fff\", fontSize: 60}}>Second</h1></FadeIn></Sequence><Sequence from={60}><FadeIn><h1 style={{color: \"#fff\", fontSize: 60}}>Third</h1></FadeIn></Sequence></AbsoluteFill>; }",
  "duration_seconds": 4,
  "fps": 30,
  "width": 1920,
  "height": 1080
}'

Python SDK

from inferencesh import inference

client = inference()

result = client.run({
    "app": "infsh/remotion-render",
    "input": {
        "code": """
import { useCurrentFrame, AbsoluteFill, interpolate } from "remotion";

export default function Main() {
  const frame = useCurrentFrame();
  const opacity = interpolate(frame, [0, 30], [0, 1]);

  return (
    <AbsoluteFill style={{
      backgroundColor: "#1a1a2e",
      display: "flex",
      justifyContent: "center",
      alignItems: "center"
    }}>
      <h1 style={{ color: "#eee", fontSize: 80, opacity }}>
        Hello from Python
      </h1>
    </AbsoluteFill>
  );
}
""",
        "duration_seconds": 3,
        "fps": 30,
        "width": 1920,
        "height": 1080
    }
})

print(result["output"]["video"])

Streaming Progress

for update in client.run({
    "app": "infsh/remotion-render",
    "input": {
        "code": "...",
        "duration_seconds": 10
    }
}, stream=True):
    if update.get("progress"):
        print(f"Rendering: {update['progress']}%")
    if update.get("output"):
        print(f"Video: {update['output']['video']}")

Related Skills

# Remotion best practices (component patterns)
npx skills add remotion-dev/skills@remotion-best-practices

# AI video generation (for AI-generated clips)
npx skills add inference-sh/skills@ai-video-generation

# Image generation (for video assets)
npx skills add inference-sh/skills@ai-image-generation

# Python SDK reference
npx skills add inference-sh/skills@python-sdk

# Full platform skill
npx skills add inference-sh/skills@infsh-cli

Documentation

halt-catch-fire의 다른 스킬

ai-image-generation
halt-catch-fire
We need to translate the given text from English to Korean. The instruction says to preserve product names, protocol names, URLs, numbers, and technical terms. So names like GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve, inference.sh CLI, etc. should remain as is. Also numbers like 50+, 4.5. The text inside <text> is a description of an agent skill for AI image generation. We need to translate the rest naturally into Korean. Let's break it down: "Generate AI images with GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI." -> "inference.sh CLI를 통해 GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve 및 50개 이상의 모델로 AI 이미지를 생성합니다." "Models: GPT-Image-2, FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4
creativemediaimage
ai-video-generation
halt-catch-fire
inference.sh CLI를 통해 Google Veo, Seedance 2.0, HappyHorse, Wan, Grok 및 40개 이상의 모델로 AI 비디오를 생성합니다. 모델: Veo 3.1, Veo 3, Seedance 2.0, HappyHorse 1.0, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. 기능: 텍스트-비디오, 이미지-비디오, 참조-비디오, 비디오 편집, 립싱크, 아바타 애니메이션, 비디오 업스케일링, 폴리 사운드. 사용처: 소셜 미디어 비디오, 마케팅 콘텐츠, 설명 비디오, 제품 데모, AI 아바타. 트리거: 비디오 생성, AI 비디오,...
creativevideomedia
twitter-automation
halt-catch-fire
We need to translate the given text from English to Korean. The instruction says to preserve product names, protocol names, URLs, numbers, and technical terms. The name "twitter-automation" is not in the text, so we don't include it. We only translate the text inside <text>. No extra labels or commentary. The text describes an agent skill for automating Twitter/X. It mentions CLI, apps like x/post-tweet, etc., capabilities, use cases, and triggers. We need to translate naturally while keeping technical terms like "inference.sh CLI", "x/post-tweet", etc. as is. Also "Twitter/X" should be preserved as is or translated? The instruction says preserve product names, so "Twitter" and "X" are product names. But "Twitter/X" might be a combined reference. I'll keep "Twitter/X" as is. Similarly "X API" should be preserved. "inference.sh CLI" is a technical term, keep as is. The list of apps: x/post-tweet, x/post-create (with media),
marketingapicommunication
ai-avatar-video
halt-catch-fire
inference.sh CLI를 통해 AI 아바타 및 토킹 헤드 영상을 생성합니다. 권장: P-Video-Avatar (가장 빠르고 저렴하며 TTS 내장). 추가: OmniHuman, Fabric, PixVerse. 오디오: Inworld TTS-2 (100개 이상 언어, 캐릭터 감정 조절), ElevenLabs, Kokoro. 기능: 오디오 기반 아바타, 텍스트-투-아바타, 립싱크 영상, 토킹 헤드 생성, 가상 프레젠터, UGC 콘텐츠. 용도: AI 프레젠터, 설명 영상, 가상 인플루언서, 더빙, 마케팅 영상, UGC 광고, 게이밍 아바타,...
videocreativemedia
agent-browser
halt-catch-fire
inference.sh를 통한 AI 에이전트용 브라우저 자동화. @e 참조를 사용하여 웹 페이지 탐색, 요소와 상호작용, 스크린샷 촬영, 비디오 녹화. 기능: 웹 스크래핑, 양식 작성, 클릭, 타이핑, 드래그 앤 드롭, 파일 업로드, JavaScript 실행. 용도: 웹 자동화, 데이터 추출, 테스트, 에이전트 브라우징, 연구. 트리거: 브라우저, 웹 자동화, 스크래핑, 탐색, 클릭, 양식 작성, 스크린샷, 웹 브라우징, Playwright, 헤드리스 브라우저, 웹 에이전트, 인터넷 서핑, 비디오 녹화
browser-automationweb-scrapingtesting
web-search
halt-catch-fire
Tavily와 Exa를 통해 inference.sh CLI로 웹 검색 및 콘텐츠 추출. 앱: Tavily Search, Tavily Extract, Exa Search, Exa Answer, Exa Extract. 기능: AI 기반 검색, 콘텐츠 추출, 직접 답변, 리서치. 용도: 리서치, RAG 파이프라인, 사실 확인, 콘텐츠 수집, 에이전트. 트리거: 웹 검색, tavily, exa, search api, 콘텐츠 추출, 리서치, 인터넷 검색, ai 검색, 검색 어시스턴트, 웹 스크래핑, rag, perplexity 대안
researchweb-scrapingapi
infsh-cli
halt-catch-fire
inference.sh CLI를 통해 250개 이상의 AI 앱 실행 - 이미지 생성, 비디오 제작, LLM, 검색, 3D, Twitter 자동화. 모델: FLUX, Veo, Gemini, Grok, Claude, Seedance, OmniHuman, Tavily, Exa, OpenRouter 등 다수. AI 앱 실행, 이미지/비디오 생성, LLM 호출, 웹 검색 또는 Twitter 자동화 시 사용. 트리거: inference.sh, infsh, ai model, run ai, serverless ai, ai api, flux, veo, claude api, image generation, video generation, openrouter, tavily, exa search, twitter api, grok
developmentapicreative
landing-page-design
halt-catch-fire
랜딩 페이지 전환 최적화: 레이아웃 규칙, 히어로 섹션 디자인, CTA 심리학 포함. 어바우드 더 폴드 공식, 소셜 프루프 배치, 모바일 디자인, F-패턴 리딩을 다룹니다. 사용처: 스타트업 랜딩 페이지, 제품 페이지, SaaS 마케팅, 전환 최적화. 트리거: 랜딩 페이지, 히어로 섹션, 어바우드 더 폴드, 전환 최적화, 랜딩 페이지 디자인, CTA 버튼, 히어로 이미지, 랜딩 페이지 레이아웃, SaaS 랜딩 페이지, 제품 페이지 디자인, 전환율, 랜딩 페이지...