/video-pipeline — raw-footage editing through AI plan + FFmpeg + Remotion + VideoDB
STATUS: scaffold only. This skill ships as v0.1 with the workflow documented but NOT yet runnable. Activation is gated on:
brew install ffmpeg (the CLI dependency for cuts)
npm install -g @remotion/cli (the composition layer)
- VideoDB API key registered in
.claude/apis/videodb-api-key.txt (the indexing layer)
- First proving run: produce a 60-second LinkedIn vertical from a recent GTM Engineer Pulse podcast episode
Sourced from 2026-05-17 MCP Market /steal Item D — consolidates the four upstream patterns ai-video-production-pipeline, videodb-for-claude-code, ai-video-editing-workflow-1, video-editing-workflow-1 into one orchestrated Genesys skill.
Why this skill exists
product-ui-frames and onboarding-video render HTML compositions to MP4 via Hyperframes — perfect for product UI animation, useless for editing actual filmed footage. Anything that involves real video sources (podcast cuts, webinar highlights, founder interview clips, customer testimonial videos) falls outside our current stack.
This skill closes the real-footage gap. It's the production pipeline that gtme-podcast was always missing.
When to use
Invoke when user says:
- "Cut this podcast into a 60-second LinkedIn vertical"
- "Make a YouTube short from the [topic] section of [episode]"
- "Produce a cliplet of [guest] talking about [thing]"
- "Auto-edit this podcast episode for the punchiest segments"
- "Scrub this video for [keyword] and cut a 90-second clip"
Do NOT invoke when:
- The source is HTML/UI composition → use
/product-ui-frames or /onboarding-video
- The source is just an audio file (no video) → use
/transcript-analysis + downstream content skills
- The user wants a script for a video that doesn't exist yet → use
/youtube-scripts or /gtme-podcast
Input requirements
| Input |
Required |
Source |
| Source video file (mp4, mov) or URL |
Required |
User |
| Brand kit |
Required |
brand-kit output (the colors, fonts, overlay specs) |
| Intent: what segment, what platform |
Required |
User ("60-second LinkedIn vertical of the agent-dispatch section") |
| Transcript or transcript-search query |
Recommended |
transcript-analysis output or user query |
| Product messaging context |
Recommended |
product-messaging for hook framing |
| Target platform spec |
Required |
LinkedIn vertical (9:16, ≤60s), YouTube short (9:16, ≤60s), LinkedIn square (1:1, ≤90s), or custom |
The four-layer pipeline
Phase 1 — AI plans the edit (from transcript + intent)
- Load the source's transcript (from
transcript-analysis output or generate via VideoDB transcribe).
- From the intent, identify the target segment (e.g., "the 60 seconds where the guest talks about why agents loop").
- Use VideoDB semantic search to surface the timestamp range matching the intent.
- Produce a structured edit plan:
- Source in-point + out-point (HH:MM:SS.mmm)
- Hook frame (the 1-2 second moment that opens the cut)
- Caption track (verbatim from transcript, time-aligned)
- Brand overlay specs (logo placement, color frame, end-card)
- Aspect-ratio decision (9:16 vertical letterbox vs 1:1 square center-crop)
Cost gate: VideoDB transcribe + semantic search = .claude/rules/videodb-credits.md applies. Estimate before running.
Phase 2 — FFmpeg executes the cut
- From the AI edit plan, generate the FFmpeg command:
ffmpeg -i source.mp4 -ss [in] -to [out] -vf "[aspect-ratio filter]" -c:a copy intermediate.mp4
- Run the cut (deterministic, no AI cost).
- Verify output duration matches plan ±0.5 sec.
Phase 3 — Remotion composes brand frames + captions
- Load brand-kit tokens (colors, fonts, logo path, end-card template).
- Generate Remotion composition that overlays:
- Brand frame (color border, logo top-left)
- Captions (time-aligned, burned-in for vertical platforms)
- End-card (last 2 seconds: brand mark + CTA)
- Render:
npx remotion render src/composition.tsx./out/final.mp4.
Phase 4 — VideoDB indexes the source for reuse
- Upload the source video to VideoDB (if not already indexed).
- Tag with metadata: source type (podcast / webinar / interview), date, guest, topics from transcript.
- Store the index entry so future
/video-pipeline runs can search "already indexed" before re-uploading.
Cost gate: Indexing has a per-minute fee. See .claude/rules/videodb-credits.md.
Quality gate before ship
Per design-production.md skill authorship contract, every video-output skill must pass:
Anti-patterns
- ❌ Skipping Phase 4 (indexing). Re-indexing the same source costs credits next time. Always index on first cut.
- ❌ Running auto-edit during exploration. Sketch the cut in transcript form (Phase 1) first; only then commit to the cut.
- ❌ Hardcoded brand colors in the Remotion composition. Always reference brand-kit tokens.
- ❌ Burning captions in for desktop platforms. Vertical (LinkedIn vertical, YouTube short, TikTok) = burned-in; desktop (YouTube long, LinkedIn newsfeed image) = subtitle file.
- ❌ Using VideoDB for sources you'll only cut once. If it's truly one-shot, transcribe via cheaper means and skip the index pass.
Chain suggestions
After producing a cliplet:
- "Want me to draft the LinkedIn post that ships with this cliplet?" →
/linkedin-content-guide + the cliplet path
- "Should I create the YouTube-short metadata (title, description, hashtags)?" →
/youtube-scripts adaptation
- "Should I cascade this into other platform formats?" →
/content-operations Platform-Native Adaptation Matrix
Final ship gate
Run /premortem --output before ship. See /premortem skill for the 5 execution domains (will-it-resonate / will-it-convert / will-it-stay-on-brand / will-stakeholder-push-back / will-it-degrade-over-time) and output template.
Trivial-case escape: ## Premortem\nNo failure modes — trivial change satisfies the contract for genuinely trivial outputs.
1---2name: video-pipeline3description: Video Pipeline4---56# /video-pipeline — raw-footage editing through AI plan + FFmpeg + Remotion + VideoDB78**STATUS: scaffold only.** This skill ships as v0.1 with the workflow documented but NOT yet runnable. Activation is gated on:9101. `brew install ffmpeg` (the CLI dependency for cuts)112. `npm install -g @remotion/cli` (the composition layer)123. VideoDB API key registered in `.claude/apis/videodb-api-key.txt` (the indexing layer)134. First proving run: produce a 60-second LinkedIn vertical from a recent GTM Engineer Pulse podcast episode1415Sourced from 2026-05-17 MCP Market /steal Item D — consolidates the four upstream patterns `ai-video-production-pipeline`, `videodb-for-claude-code`, `ai-video-editing-workflow-1`, `video-editing-workflow-1` into one orchestrated Genesys skill.1617---1819## Why this skill exists2021`product-ui-frames` and `onboarding-video` render HTML compositions to MP4 via Hyperframes — perfect for product UI animation, useless for editing actual filmed footage. Anything that involves real video sources (podcast cuts, webinar highlights, founder interview clips, customer testimonial videos) falls outside our current stack.2223This skill closes the real-footage gap. It's the production pipeline that `gtme-podcast` was always missing.2425---2627## When to use2829**Invoke when user says:**30- "Cut this podcast into a 60-second LinkedIn vertical"31- "Make a YouTube short from the [topic] section of [episode]"32- "Produce a cliplet of [guest] talking about [thing]"33- "Auto-edit this podcast episode for the punchiest segments"34- "Scrub this video for [keyword] and cut a 90-second clip"3536**Do NOT invoke when:**37- The source is HTML/UI composition → use `/product-ui-frames` or `/onboarding-video`38- The source is just an audio file (no video) → use `/transcript-analysis` + downstream content skills39- The user wants a script for a video that doesn't exist yet → use `/youtube-scripts` or `/gtme-podcast`4041---4243## Input requirements4445| Input | Required | Source |46|---|---|---|47| Source video file (mp4, mov) or URL | Required | User |48| Brand kit | Required | `brand-kit` output (the colors, fonts, overlay specs) |49| Intent: what segment, what platform | Required | User ("60-second LinkedIn vertical of the agent-dispatch section") |50| Transcript or transcript-search query | Recommended | `transcript-analysis` output or user query |51| Product messaging context | Recommended | `product-messaging` for hook framing |52| Target platform spec | Required | LinkedIn vertical (9:16, ≤60s), YouTube short (9:16, ≤60s), LinkedIn square (1:1, ≤90s), or custom |5354---5556## The four-layer pipeline5758### Phase 1 — AI plans the edit (from transcript + intent)59601. Load the source's transcript (from `transcript-analysis` output or generate via VideoDB transcribe).612. From the intent, identify the target segment (e.g., "the 60 seconds where the guest talks about why agents loop").623. Use VideoDB semantic search to surface the timestamp range matching the intent.634. Produce a structured edit plan:64 - Source in-point + out-point (HH:MM:SS.mmm)65 - Hook frame (the 1-2 second moment that opens the cut)66 - Caption track (verbatim from transcript, time-aligned)67 - Brand overlay specs (logo placement, color frame, end-card)68 - Aspect-ratio decision (9:16 vertical letterbox vs 1:1 square center-crop)6970**Cost gate:** VideoDB transcribe + semantic search = `.claude/rules/videodb-credits.md` applies. Estimate before running.7172### Phase 2 — FFmpeg executes the cut73745. From the AI edit plan, generate the FFmpeg command:75 - `ffmpeg -i source.mp4 -ss [in] -to [out] -vf "[aspect-ratio filter]" -c:a copy intermediate.mp4`766. Run the cut (deterministic, no AI cost).777. Verify output duration matches plan ±0.5 sec.7879### Phase 3 — Remotion composes brand frames + captions80818. Load brand-kit tokens (colors, fonts, logo path, end-card template).829. Generate Remotion composition that overlays:83 - Brand frame (color border, logo top-left)84 - Captions (time-aligned, burned-in for vertical platforms)85 - End-card (last 2 seconds: brand mark + CTA)8610. Render: `npx remotion render src/composition.tsx./out/final.mp4`.8788### Phase 4 — VideoDB indexes the source for reuse899011. Upload the source video to VideoDB (if not already indexed).9112. Tag with metadata: source type (podcast / webinar / interview), date, guest, topics from transcript.9213. Store the index entry so future `/video-pipeline` runs can search "already indexed" before re-uploading.9394**Cost gate:** Indexing has a per-minute fee. See `.claude/rules/videodb-credits.md`.9596---9798## Quality gate before ship99100Per `design-production.md` skill authorship contract, every video-output skill must pass:101102- [ ] Output duration ≤ target cap (60s for LinkedIn vertical / YouTube short, 90s for LinkedIn square)103- [ ] Aspect ratio matches platform spec (9:16 vertical, 1:1 square, etc.)104- [ ] Captions are time-aligned and verbatim from transcript105- [ ] Brand frame uses brand-kit tokens (no hardcoded colors)106- [ ] End-card includes CTA + brand mark107- [ ] No copyrighted music or audio in the cut (verify source rights)108- [ ] VideoDB index entry created with proper metadata tags109- [ ] Cost matches estimate within 20% (verify against `.claude/rules/videodb-credits.md` budget)110111---112113## Anti-patterns114115- ❌ Skipping Phase 4 (indexing). Re-indexing the same source costs credits next time. Always index on first cut.116- ❌ Running auto-edit during exploration. Sketch the cut in transcript form (Phase 1) first; only then commit to the cut.117- ❌ Hardcoded brand colors in the Remotion composition. Always reference brand-kit tokens.118- ❌ Burning captions in for desktop platforms. Vertical (LinkedIn vertical, YouTube short, TikTok) = burned-in; desktop (YouTube long, LinkedIn newsfeed image) = subtitle file.119- ❌ Using VideoDB for sources you'll only cut once. If it's truly one-shot, transcribe via cheaper means and skip the index pass.120121---122123## Chain suggestions124125After producing a cliplet:126127- "Want me to draft the LinkedIn post that ships with this cliplet?" → `/linkedin-content-guide` + the cliplet path128- "Should I create the YouTube-short metadata (title, description, hashtags)?" → `/youtube-scripts` adaptation129- "Should I cascade this into other platform formats?" → `/content-operations` Platform-Native Adaptation Matrix130131---132133## Final ship gate134135Run `/premortem --output` before ship. See [`/premortem` skill](../../../../meta/orchestration/premortem/SKILL.md) for the 5 execution domains (will-it-resonate / will-it-convert / will-it-stay-on-brand / will-stakeholder-push-back / will-it-degrade-over-time) and output template.136137Trivial-case escape: `## Premortem\nNo failure modes — trivial change` satisfies the contract for genuinely trivial outputs.138139---140