Openpaw c-video-edit
Programmatic video creation using Remotion (React-based) and Editly (JSON-based declarative). Create, render, and compose videos from code.
install
source · Clone the upstream repo
git clone https://github.com/daxaur/openpaw
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/daxaur/openpaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/c-video-edit" ~/.claude/skills/daxaur-openpaw-c-video-edit && rm -rf "$T"
manifest:
skills/c-video-edit/SKILL.mdsource content
Video Editing — Remotion & Editly
Create, render, and compose videos programmatically. Use Remotion for React-based dynamic videos or Editly for quick JSON-based assembly.
Remotion (React-based video creation)
Project Setup
# Create a new Remotion project npx create-video@latest my-video cd my-video # Start interactive studio npx remotion studio
Rendering
# Render a composition to video npx remotion render src/index.ts MyComposition out/video.mp4 # Render a still frame (thumbnail) npx remotion still src/index.ts MyComposition out/thumbnail.png --frame=30 # List available compositions npx remotion compositions src/index.ts
Render Options
# Resolution and FPS npx remotion render src/index.ts MyComp out.mp4 --width 1920 --height 1080 --fps 30 # Codec (h264, h265, vp8, vp9, prores) npx remotion render src/index.ts MyComp out.mp4 --codec h264 # Quality (CRF 0-51, lower = better) npx remotion render src/index.ts MyComp out.mp4 --crf 18 # Speed preset npx remotion render src/index.ts MyComp out.mp4 --x264-preset fast # Pass data as props npx remotion render src/index.ts MyComp out.mp4 --props='{"title":"Hello","color":"blue"}' # Parallel rendering (faster) npx remotion render src/index.ts MyComp out.mp4 --concurrency 4 # Benchmark render time npx remotion benchmark src/index.ts MyComp
Composition Structure
// src/Root.tsx — register compositions import { Composition } from "remotion"; import { MyVideo } from "./MyVideo"; export const RemotionRoot = () => ( <Composition id="MyVideo" component={MyVideo} durationInFrames={150} fps={30} width={1920} height={1080} /> ); // src/MyVideo.tsx — video content import { useCurrentFrame, interpolate, AbsoluteFill, Sequence } from "remotion"; export const MyVideo = () => { const frame = useCurrentFrame(); const opacity = interpolate(frame, [0, 30], [0, 1]); return ( <AbsoluteFill style={{ backgroundColor: "black" }}> <Sequence from={0} durationInFrames={60}> <h1 style={{ color: "white", opacity }}>Hello World</h1> </Sequence> </AbsoluteFill> ); };
Editly (JSON-based declarative editing)
Quick Assembly
# Simple concatenation with titles editly title:'Intro' clip1.mov clip2.mov title:'THE END' --out output.mp4 # From JSON spec editly spec.json5 --fast --out output.mp4 # Add background music editly spec.json5 --audio-file-path music.mp3 --out output.mp4
JSON Spec Format
{ "width": 1920, "height": 1080, "fps": 30, "outPath": "output.mp4", "defaults": { "duration": 4, "transition": { "name": "fade", "duration": 0.5 } }, "clips": [ { "duration": 3, "layers": [{ "type": "title-background", "text": "My Video", "background": { "type": "linear-gradient" } }] }, { "layers": [{ "type": "video", "path": "clip1.mp4", "cutFrom": 0, "cutTo": 10 }] }, { "layers": [ { "type": "image", "path": "photo.jpg" }, { "type": "title", "text": "Caption", "position": "bottom" } ] } ], "audioFilePath": "background.mp3", "keepSourceAudio": false }
Layer Types
— video clip (cutFrom/cutTo for trimming)video
— audio trackaudio
— static imageimage
— full-screen title card with backgroundtitle-background
— text overlaytitle
— subtitle textsubtitle
— WebGL shader transition/effectgl
Guidelines
- Remotion — best for complex, data-driven, animated videos (dashboards, branded content, social media)
- Editly — best for quick assembly (concatenation, transitions, title cards, slideshows)
- Both require
(installed automatically with this skill)ffmpeg - Remotion renders can be CPU-intensive — warn user about duration for long compositions
- Always confirm output path before rendering to avoid overwriting
- Use
flag with Editly for quick previews before final render--fast