Communitygithub.com

CleanExpo/Pi-Dev-Ops

/remotion-video one-shot Remotion command skill and ENTRY POINT for the Remotion Skills Package. Use for video, explainer, ad, promo, reel, intro, social cut, marketing, training, or launch videos. Reads the brief, classifies intent, enforces one single Synthex ElevenLabs voice, emits a production/wave plan, and dispatches the right sub-skills in topological order. Always invoked first.

What is Pi-Dev-Ops?

Pi-Dev-Ops is a Claude Code agent skill that /remotion-video one-shot Remotion command skill and ENTRY POINT for the Remotion Skills Package. Use for video, explainer, ad, promo, reel, intro, social cut, marketing, training, or launch videos. Reads the brief, classifies intent, enforces one single Synthex ElevenLabs voice, emits a production/wave plan, and dispatches the right sub-skills in topological order. Always invoked first.

Works with✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/CleanExpo/Pi-Dev-Ops/tree/HEAD/skills/remotion-orchestrator

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

remotion-orchestrator — Remotion Skills Package entry point

/remotion-video one-shot command

/remotion-video is the one-shot command lane for Remotion marketing videos. It turns a rough brief into one governed production packet, one render path, and one final evidence report.

Hard rules for this command path:

  • single voice only; no multi-voice casts and no per-scene voice switching.
  • use existing Synthex ElevenLabs credentials and voice configuration only.
  • no new vendors, no new accounts, no connector platforms.
  • start with dry-run unless the operator explicitly asks for production render.
  • write .harness/remotion/<jobId>/production-packet.json, script.md, preflight-report.md, and render-command.sh.
  • never commit generated MP4s.

The command routes through remotion-script, remotion-production, remotion-direction, remotion-editing, remotion-integrations, and remotion-professionalism, while preserving the existing Remotion Skills Package workflow below.

Single entry point for the Remotion Skills Package — a set of 10 sibling skills (remotion-orchestrator, remotion-brand-research, remotion-brand-codify, remotion-designer, remotion-colour-family, remotion-motion-language, remotion-screen-storyteller, remotion-marketing-strategist, remotion-composition-builder, remotion-render-pipeline) installed globally at ~/.claude/skills/remotion-* (symlinked to ~/Pi-Dev-Ops/skills/remotion-*). Available in every project, not just Pi-Dev-Ops.

Discovery brief gate (turn 1, mandatory)

Adopted from nexu-io/open-design (Apache-2.0). Before any wave plan is emitted, lock the brief. Refuse to proceed until every required field is filled — vague briefs produce overlong wave plans and off-brand renders.

Required fields

FieldTypeNotes
brandBrandSlugMust resolve in src/brands/. Unknown → dispatch remotion-brand-research first.
compositionExplainer | Intro | SocialAd | NIRReport | ProductDemov1 supports Explainer; others fall back with note.
channellinkedin | youtube | instagram | tiktok | trainingDrives aspect ratio + duration discipline.
aspectRatio1920x1080 | 1080x1920 | 1080x1080Defaults from channel if omitted.
durationSec15 | 30 | 60 | 90 | 120Drives wave-count cap.
topicstringOne sentence on what the video says. "Brand awareness video" alone is rejected — must name the specific point.
audiencestringInherited from BrandConfig.audience.primary if omitted, but founder must confirm.

Optional: school (visual-school override for the colour generator), voiceoverScript (skip storyteller if pre-written), referenceComposition (existing job to remix).

Hard stop conditions

  • topic reads as a category ("our product", "the launch") rather than a specific claim → block.
  • composition ≠ Explainer in v1 without explicit fallback acknowledgement → block.
  • Multiple brands named in one brief → split into N parallel jobs (one per brand); never blend.

The gate runs before the wave plan is computed. A blocked brief never reaches the dispatcher.

Invocation

The user can invoke the package by:

  • Saying any of: "use the Remotion Skills Package", "remotion package", "use remotion".
  • Naming any individual skill (e.g. "use remotion-designer to QA this layout").
  • Submitting a brief that classifies as intent: "video" via app/server/brief.py.

Translates a free-text brief into a structured render job and a wave plan that the Pi-Dev-Ops orchestrator (app/server/orchestrator.py) dispatches via P3-B fan-out.

The Remotion project

All compositions, brand configs, motion / colour helpers, and the render entry live at:

../../remotion-studio/

When working from any other project, sub-skills cd into that path before reading or editing brand / composition files. The render entry is npx tsx render/render.ts ... from inside remotion-studio.

Triggers

Brief contains any of: video, explainer, promo, ad, reel, intro, outro, cta, social cut, 60s/30s/15s, render, marketing video, training video, release video, feature video, paired with one of the brand identifiers dr / disaster recovery / nrpg / ra / restoreassist / carsi / ccw / carpet cleaners warehouse.

Inputs

The Pi-Dev-Ops planner (Opus 4.7) calls this skill with:

  • brief — original free-text request
  • repo_url — usually local:Pi-Dev-Ops/remotion-studio
  • linear_team_id, linear_project_id — pre-resolved from config/harness/projects.json

Output

A wave plan JSON written to remotion-studio/.research/wave-plans/{job_id}.json with this shape:

{
  "jobId": "ra-nir-explainer-2026-04-28T15-30-00",
  "brand": "ra",
  "composition": "Explainer",
  "channel": "linkedin",
  "durationSec": 60,
  "topic": "RestoreAssist NIR Phase 1 standardisation",
  "linear": { "teamId": "...", "projectId": "..." },
  "outputPath": "output/ra-nir-explainer-2026-04-28T15-30-00.mp4",
  "waves": [
    { "id": 1, "parallel": [ {"skill":"remotion-brand-research","if":"brands/ra.ts missing or stale"}, {"skill":"remotion-marketing-strategist"} ] },
    { "id": 2, "parallel": [ {"skill":"remotion-screen-storyteller"}, {"skill":"remotion-colour-family","if":"palette incomplete"}, {"skill":"remotion-motion-language","if":"motion missing"} ] },
    { "id": 3, "parallel": [ {"skill":"remotion-brand-codify","if":"any new brand artifacts"}, {"skill":"remotion-designer"} ] },
    { "id": 4, "serial":   [ {"skill":"remotion-composition-builder"}, {"skill":"remotion-render-pipeline"} ] }
  ]
}

Wave-count discipline

  • ≤3 waves for output <30s
  • ≤5 waves for output ≤120s
  • ≤8 waves for output >120s

Over-decomposition is the failure mode this guards against.

Composition routing (brief → composition id)

Brief signalcomposition
"explainer", "feature video", "how it works"Explainer
"intro", "title card", "channel opener"Intro (v1.1)
"ad", "promo", "reel", "social cut", "Instagram", "TikTok"SocialAd (v1.1)
"NIR report", "inspection report", RA + "report"NIRReport (v1.1)
"demo", "product walkthrough"ProductDemo (v1.1)

v1 supports Explainer only. Other composition ids return: "{Composition} ships in v1.1 — falling back to Explainer with channel-specific framing".

Brand resolution

Match keywords → BrandSlug:

  • disaster recovery, dr → dr
  • nrpg → nrpg
  • restoreassist, ra, nir → ra
  • carsi → carsi
  • ccw, carpet cleaners warehouse → ccw

If brief names multiple brands, ask the planner to split into N parallel jobs (one per brand) and emit N wave plans. Never blend brands into one composition.

Linear routing

After the render skill writes the MP4, this skill (or the render skill) opens a Linear ticket in the project mapped from config/harness/projects.json:

BrandLinear teamproject
raa8a52f07-63cf-4ece-9ad2-3e3bd3c15673 (RA)3c78358a-b558-4029-b47d-367a65beea7b
dr / nrpg43811130-ac12-47d3-9433-330320a76205 (DR)d2c1d63b-1e85-424d-9278-efff15b0d46b
carsi91b3cd04-... (GP)resolved at runtime
ccwruntimeruntime

Thumbnail & still image generation (Canva-first — do NOT credential-hunt)

For a video thumbnail, poster, or any marketing still, the reliable path is the connected Canva MCP, not a raw image-gen API key:

  1. generate-design (design_type: your_story for 9:16, youtube_thumbnail for 16:9) with a detailed brand-aligned query — pass the palette/headline in the query; Canva renders headline text reliably.
  2. Download the candidate previews and pick the best; create-design-from-candidate → export-design (PNG at target WxH, export_quality: pro).

Hard rules (learned the hard way, 2026-07-01):

  • Never credential-hunt for image-gen keys. Do not scan .env files or vercel env pull across projects/environments looking for GEMINI_API_KEY / OPENAI_API_KEY / AI_GATEWAY_API_KEY. The auto-mode classifier blocks it as credential exploration, and it wastes the whole session.
  • Vercel "Sensitive" env vars are write-only — vercel env pull returns them EMPTY. Do not try to pull one; get the value from its original source or use Canva.
  • If no image tool is connected and no key is reachable in ONE directed check, stop and ask the founder once — offer Canva up front.
  • A frame-grab from the rendered MP4 (bundled ffmpeg at node_modules/@remotion/compositor-*/ffmpeg) is the offline fallback. Note: on macOS, symlink the sibling *.dylib files into the cwd so the bundled ffprobe/ffmpeg resolve (SIP strips DYLD_*).

What this skill does NOT do

  • Does not author compositions — that's remotion-composition-builder.
  • Does not run npx remotion render — that's remotion-render-pipeline.
  • Does not edit BrandConfig files — that's remotion-brand-codify.

It only plans + delegates.

Per-project usage model

The package is shared infrastructure; each calling project supplies its own runtime config and API keys.

ConcernWhere it lives
Skill definitions~/.claude/skills/remotion-* (symlinked → Pi-Dev-Ops/skills/remotion-*) — globally available.
Remotion Node project (compositions, brand configs, render entry)../../remotion-studio/ — single shared substrate.
Brand configsSynthex/packages/brand-config/src/brands/{slug}.ts — one source of truth per brand, used by every project that renders for that brand. (Migrated from Pi-Dev-Ops/remotion-studio/src/brands/ per RA-1985 / Synthex SYN-897.)
API keys (ElevenLabs, Telegram, Supabase, Linear, Remotion licence)The calling project's .env / .env.local. Skills read process.env at render time.
Rendered MP4 outputThe calling project's .remotion-renders/ directory by default. Override with --out=.

Adding a new brand for your project

If your project (e.g. Synthex) needs to render for a brand that isn't yet in src/brands/:

  1. Run remotion-brand-research against the brand's public sources.
  2. Run remotion-brand-codify to produce Synthex/packages/brand-config/src/brands/{slug}.ts.
  3. Extend the BrandSlug union in Synthex/packages/brand-config/src/types.ts.
  4. Register in Synthex/packages/brand-config/src/brands/index.ts.
  5. Run npm run typecheck from Synthex/packages/brand-config/ (then npm run build to regenerate dist/).

Currently registered brands: dr, nrpg, ra, carsi, ccw, synthex, unite.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

CleanExpo/Pi-Dev-Ops

Produce one or many consistent, on-brand faceless marketing videos from a topic: script, ElevenLabs voiceover with timestamps, one styled illustration per beat, ffmpeg stitch to 1080p, optional Unlisted YouTube upload. The look is a named style from styles.md (flat-line, hand-doodle, bold-kinetic, cinematic-photoreal, minimal-corporate, retro-print), so one command yields repeatable output per brand. The automated pipeline; distinct from faceless-video and video-director.

CleanExpo/Pi-Dev-Ops

Produce a faceless YouTube-style video (hand-drawn doodle / simple-illustration channels like Zen, Nick Invest) end-to-end from a single topic. ASKS FACT-vs-STORY mode first (non-fiction educational vs fiction storytelling) and branches the whole run — built to serve multiple clients/channels, not one fixed format. Reverse-engineers a proven reference video's script format, writes a new script in that format, generates an ElevenLabs voiceover with timestamps, creates one styled Artlist (AI Toolkit) image per timestamp, and stitches everything with FFmpeg — fully automated, no human recording. Use when the user says "faceless video", "/faceless-video", "doodle video", "make a YouTube short/long-form in the Zen style", or wants an organic faceless-channel content piece. Composes with video-distribution-strategist (channel/launch) and video-director (when motion/edit polish is wanted instead of stills).

CleanExpo/Pi-Dev-Ops

The 15+ year brand director extension of `brand-guardian` specifically for video — frame-by-frame audit of brand-mark integrity, Gun Metal `#1a1a1a` + Candy Red `#dc143c` consistency, NO AI slop, NO Lucide icons, custom geometric marks ONLY, real logos correctly placed. PASS / FAIL gate before any client-facing video ships. Use after `video-colorist` completes the grade pass.

CleanExpo/Pi-Dev-Ops

The 15+ year Director-of-Photography persona (Roger Deakins / Emmanuel Lubezki / Hoyte van Hoytema-tier) that owns shot composition, lens psychology, motion language, and the decision of which source (Remotion / Hyperframes / stock cinematic) each scene uses. Extends the existing `remotion-designer` + `remotion-motion-language` skills with a frame-by-frame shot-language framework. Use when the user says "cinematography", "shot list", "framing", "DoP", "lens choice", or invoked by `video-director` Phase 2.

CleanExpo/Pi-Dev-Ops

The 15+ year colorist persona (Light Iron / Company 3 / The Mill-tier) that applies per-brand LUT + grade pass to every Unite-Group video. Closes the "raw Remotion render colours" gap — today Remotion outputs whatever colours BrandConfig declares with zero cinematic grade. Use when the user says "colour", "grade", "LUT", "look", "cinematic finish", or invoked by `video-director` Phase 3 (post-production) after `video-sound-designer` mixes audio.

CleanExpo/Pi-Dev-Ops

The Creative Director persona that owns brief intake, composition selection and narrative POV for every Unite-Group video. ENTRY POINT for the Video Agency: use for any video creation brief (explainer, promo, social cut, demo reel, case study, testimonial, client video). Dispatches the full production team: script-writer, cinematographer, editor, sound designer, colorist, brand-guardian.

CleanExpo/Pi-Dev-Ops

The 15+ year platform-native distribution expert (early TikTok creator economy + YouTube algorithm + LinkedIn organic reach + IG Reels native specialist) that owns per-platform aspect ratio + duration cap + caption format + hook density + thumbnail composition. Extends `remotion-marketing-strategist` with platform-native specs locked per BrandConfig. Use when the user says "which platform", "distribution", "channel-fit", "thumbnail", "captions", or invoked by `video-director` Phase 4 (QA + Delivery) for per-platform cuts.

CleanExpo/Pi-Dev-Ops

The 15+ year screenwriter persona (Pixar / Apple keynote / Nike spot tier) that engineers hooks (0-3s), retention beats (7-15s), narrative tension curves, and CTA placement. Extends the existing `remotion-screen-storyteller` skill with a structural framework lifted from Pixar's 22 Rules + Apple keynote architecture. Use when the user says "script", "voiceover", "narration", "hook", "story arc", or invoked by `video-director` Phase 2.

CleanExpo/Pi-Dev-Ops

The 15+ year sound designer persona (Skywalker Sound / Sound Lounge / Audio Network-tier) that mixes ElevenLabs voiceover with music bed, sound effects, ambient texture, and audio polish. Closes the single biggest gap in the existing Remotion pipeline — today voiceover is the ONLY audio; this skill adds music + SFX + mix. Use when the user says "sound design", "audio mix", "music bed", "SFX", "score this", or invoked by `video-director` Phase 3 (post-production).

CleanExpo/Pi-Dev-Ops

Converts a BrandResearch dossier into THREE artifacts — (1) typed BrandConfig TypeScript at Synthex/packages/brand-config/src/brands/{slug}.ts (runtime/behaviour — voice, voiceover, motion, audience, channel, forbiddenWords); (2) spec-conformant {slug}.design.md at Synthex/packages/brand-config/src/brands/{slug}.design.md (visual tokens — colour, typography, spacing, components, layout, elevation); (3) human-readable 9-section .md projection at Pi-Dev-Ops/remotion-studio/src/brands/{slug}.md derived from BOTH. Boundary contract at Pi-Dev-Ops/remotion-studio/src/brands/CONTRACT.md. Triggered after remotion-brand-research, or when the user pastes brand assets and says "codify". PRs are auto-merge:false — a human reviews before merge.

CleanExpo/Pi-Dev-Ops

Researches a portfolio company's visual identity from public sources (homepage, about page, marketing copy, GitHub README) and produces a structured BrandResearch dossier. Triggered when `Synthex/packages/brand-config/src/brands/{slug}.ts` (canonical home per RA-1985 / Synthex SYN-897) is missing, older than 90 days, or the user explicitly says "refresh brand for {brand}". Output feeds remotion-brand-codify.

CleanExpo/Pi-Dev-Ops

Generates a complete, accessible palette (primary, secondary, accent, 4-step neutral, semantic, and dark variant) from one to three hex anchors plus a colour-family classification. Validates WCAG-AA contrast for all text-on-background pairs. Triggered when a BrandConfig has fewer than 5 defined colours or contrast fails.

CleanExpo/Pi-Dev-Ops

Authors or extends a Remotion composition (.tsx) wired to BrandConfig + Storyboard + layout spec + motion. The actual builder skill — runs as a Sonnet-tier worker. Triggered after brand, storyboard, designer, and motion-language outputs are ready. Produces the file under remotion-studio/src/compositions/ and registers it in src/Root.tsx.

CleanExpo/Pi-Dev-Ops

Visual-design specialist for Remotion compositions. Sets layout grid, typography hierarchy, white-space, scene framing, and visual rhythm for a given composition + brand. Triggered after remotion-composition-builder for QA, or upfront when authoring a new composition type. Produces a layout spec consumed by remotion-composition-builder.

CleanExpo/Pi-Dev-Ops

Use when a Remotion video needs creative direction — hook, visual sequence, scene purpose, motion restraint, and CTA direction before render.

CleanExpo/Pi-Dev-Ops

Use when a Remotion video has timing, sync, transition, caption, pacing, or audio-fit risk and needs editing discipline before render.

CleanExpo/Pi-Dev-Ops

Use when /remotion-video needs existing Synthex ElevenLabs, brand-config, Remotion, output storage, Claude, or Hermes integration without adding vendors.

CleanExpo/Pi-Dev-Ops

Tunes a video's format and message for the target channel — LinkedIn, YouTube, Instagram Reel, internal training. Sets aspect ratio, total duration, hook timing, CTA timing, and pacing. Triggered when the brief mentions a specific channel or campaign goal. Output feeds remotion-screen-storyteller and remotion-composition-builder.

CleanExpo/Pi-Dev-Ops

Designs a brand-specific motion vocabulary — easing curves, default scene durations, signature entry/exit, transition frames. Each brand gets one signature move (rise / sweep / pulse / iris / whip) that recurs across compositions to build motion-recognition. Triggered when BrandConfig.motion is empty.

CleanExpo/Pi-Dev-Ops

Use when a Remotion video job needs production gates, render evidence, output discipline, and pass/fail validation before it can be called shippable.

Related Skills