Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
agricidaniel avatar

Claude Video Promo

  • 7 installs
  • 23 repo stars
  • Updated April 6, 2026
  • agricidaniel/claude-video

claude-video-promo is a Claude Code skill that builds promo videos from free stock footage with Remotion text overlays and audio.

About

claude-video-promo is a Claude Code skill that builds promo and marketing videos by combining free Pixabay or Pexels stock footage with Remotion text overlays, transitions, effects, and audio. A scene planner classifies each scene and auto-selects transitions and audio ducking, and contrast-aware placement adapts text to background brightness. A developer uses it to assemble a marketing video from stock clips and text.

  • Promo videos from free stock footage plus Remotion overlays
  • Contrast-aware text placement and auto scene planning
  • 3-stage acquire, analyze, render pipeline with TTS voiceover

Claude Video Promo by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #1,085 of 1,335 Generative Media skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

claude-video-promo capabilities & compatibility

Free stock APIs (Pixabay, Pexels) require free keys; rendering runs locally via Remotion.

Capabilities
promo video generation · stock footage sourcing · text overlay · scene planning
Use cases
marketing · video generation
Pricing
Bring your own API key
Requires keys
PIXABAY_API_KEY · PEXELS_API_KEYOPTIONAL
From the docs

What claude-video-promo says it does

Create promo videos using free stock footage (Pixabay/Pexels) as backgrounds with
SKILL.md
**Pixabay API key**: Free at https://pixabay.com/api/docs/ (set `PIXABAY_API_KEY` env var)
SKILL.md
npx skills add https://github.com/agricidaniel/claude-video --skill claude-video-promo

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs7
repo stars23
Last updatedApril 6, 2026
Repositoryagricidaniel/claude-video

What it does

Assemble a promo or marketing video from free stock footage with Remotion text overlays, transitions, and voiceover.

Who is it for?

Assembling marketing promo videos from stock footage with contrast-aware text overlays

Skip if: Simple edits or platform export of an existing video, which other sub-skills handle

When should I use this skill?

You want a promo or marketing video built from stock clips with text overlays and voiceover

What you get

Produces a rendered promo MP4 combining stock footage, text overlays, transitions, and audio.

  • Rendered promo MP4
  • Contrast map JSON
  • TTS voiceover track

By the numbers

  • 3-stage pipeline (acquire, analyze, render)
  • 5 scene intent classes (hook, problem, feature, proof, cta)

Files

SKILL.mdMarkdownGitHub ↗

claude-video-promo: Stock Footage + Remotion Promo Videos

Create polished promo/marketing videos by combining free stock footage with Remotion text overlays, transitions, and audio: with contrast-aware text placement.

V2 Intelligence Layer

The pipeline includes a scene planner that automatically makes aesthetic decisions:

Scene Intent Classification

The planner reads headlines/subtexts and classifies each scene:

  • hook: First scene, dramatic, dark (Ken Burns: zoom out reveal)
  • problem: Tension, urgency (Ken Burns: slow pan)
  • feature: Clean, professional (Ken Burns: zoom in focus)
  • proof: Warm, collaborative (static or medium)
  • cta: Last scene, urgent (Ken Burns: subtle zoom, 15% larger text)

Transition Decision Tree

Transitions are auto-selected based on scene context:

  • Dark to bright: fade (0.7s, smooth brightness ramp)
  • Hook to problem: cut (punchy, immediate)
  • Feature to feature: wipe-left (progression feel)
  • Any to CTA: zoom (builds urgency)

Audio Intelligence

Per-scene ducking levels and ramp speeds:

  • Hook: duck to 0.10, 10-frame ramp
  • Feature: duck to 0.10, 10-frame ramp
  • CTA: duck to 0.08, 5-frame ramp (fastest, voice most prominent)
  • Proof: duck to 0.15, 15-frame ramp (music more present)

Contrast Analysis V2

Uses worst-case zone brightness (not average) plus variance detection:

  • High variance (busy background): always strong backing
  • Bright zone in text area (>0.5): force backing regardless of average
  • Clean dark background: no backing, just shadow

Prerequisites

  • Pixabay API key: Free at https://pixabay.com/api/docs/ (set PIXABAY_API_KEY env var)
  • Pexels API key (optional): Free at https://www.pexels.com/api/ (set PEXELS_API_KEY env var)
  • FFmpeg: Required for video preprocessing and contrast analysis
  • Node.js + npm: For Remotion rendering
  • Remotion project: The promo-pipeline/ directory bundled with this plugin

Pipeline: 3 Stages

1. ACQUIRE          2. ANALYZE           3. RENDER
Stock search     →  Frame contrast   →   Remotion composition
Stock download       analysis             AdaptiveText overlay
FFmpeg preprocess    Luminance grid        Transitions + Audio
TTS voiceover        contrast-map.json    Final MP4 output

Workflow

Step 1: Understand the Request

Determine from the user (conversationally or via YAML config):

  • What scenes are needed (topic, text, duration)
  • What stock footage to search for (keywords, mood)
  • Text positioning (center, lower-third, upper-left, upper-right)
  • Transitions between scenes (fade, wipe-left, wipe-right, zoom, cut)
  • Audio: background music query + voiceover text
  • Output: resolution, codec, destination path

Step 2: Search Stock Footage

python3 promo-pipeline/scripts/stock_search.py \
  --query "aerial city night" \
  --source pixabay \
  --orientation landscape \
  --min-duration 8 \
  --count 5

For music:

python3 promo-pipeline/scripts/stock_search.py \
  --query "upbeat corporate" \
  --source pixabay \
  --media-type music \
  --count 3

Present results to user with preview URLs. Let them pick.

Step 3: Download + Preprocess

python3 promo-pipeline/scripts/stock_download.py \
  --url "DOWNLOAD_URL" \
  --output promo-pipeline/public/stock/scene-id.mp4 \
  --trim-duration 10 \
  --gpu

This scales to 1080p 30fps, pads if needed, and encodes H.264.

Step 4: Analyze Contrast

python3 promo-pipeline/scripts/analyze_contrast.py \
  --input promo-pipeline/public/stock/scene-id.mp4 \
  --output promo-pipeline/public/stock/scene-id-contrast.json

Produces a per-second 4x3 luminance grid. The Remotion AdaptiveText component reads this to adjust text backing plates:

  • Dark background → white text, no backing, subtle shadow
  • Mid background → white text, semi-transparent dark plate
  • Bright background → white text, strong dark plate

Step 5: Generate TTS (if voiceover needed)

Use the existing Gemini TTS script:

python3 promo-pipeline/scripts/tts_generate.py \
  --text "Your voiceover text here" \
  --output promo-pipeline/public/voiceover/scene-id.wav

Step 6: Build Scene Config JSON

Create scene-config.json with all paths and contrast data resolved:

{
  "scenes": [
    {
      "id": "hook",
      "durationFrames": 150,
      "stockPath": "stock/hook.mp4",
      "contrastMap": { ... },
      "headline": "The Future is Here",
      "subtext": "Launching Spring 2026",
      "textPosition": "center",
      "transition": "fade",
      "voiceoverPath": "voiceover/hook.wav"
    }
  ],
  "musicPath": "music/background.mp3",
  "musicVolume": 0.3,
  "musicFadeInFrames": 30,
  "musicFadeOutFrames": 60,
  "voiceoverDucking": 0.15
}

Step 7: Render

cd promo-pipeline
npx remotion render PromoVideo --props scene-config.json --codec h264 --crf 18

YAML Config Format (Alternative to Conversational)

Users can write a YAML config and the pipeline resolves everything:

scenes:
  - id: hook
    duration: 5s
    stock:
      query: "aerial city night lights"
      source: pixabay
    text:
      headline: "The Future is Here"
      subtext: "Launching Spring 2026"
      position: center
    transition: fade
    voiceover: "The future of marketing is about to change."

  - id: features
    duration: 8s
    stock:
      query: "technology dashboard data"
      source: pexels
    text:
      headline: "AI-Powered Analytics"
      position: lower-third
    transition: wipe-left

audio:
  music:
    query: "upbeat corporate"
    volume: 0.3
    ducking: 0.15

Safety Rules

1. Never overwrite source files: all operations produce new files 2. Check API key before searching: fail clearly if PIXABAY_API_KEY is missing 3. Validate stock video duration >= scene duration before rendering 4. Pre-trim music to match total video duration (Remotion Audio doesn't loop) 5. Confirm before batch downloads: stock video files can be large

Text Position Reference

PositionWhereBest For
centerVertically + horizontally centeredHero statements, titles
lower-thirdBottom 25%, full widthNews-style, documentary
upper-leftTop-left cornerSubtitles, labels
upper-rightTop-right cornerBranding, logos

Transition Reference

TypeEffectUse When
fadeOpacity crossfade (0.5s)Default, smooth
wipe-leftHorizontal clip reveal from leftSequential progression
wipe-rightHorizontal clip reveal from rightReverse/callback
zoomScale + fade dissolveDramatic emphasis
cutInstant switchFast pacing, urgency

Scripts

  • scripts/stock_search.py: Search Pixabay + Pexels video/music APIs (stdlib only)
  • scripts/stock_download.py: Download + FFmpeg preprocess to 1080p 30fps
  • scripts/analyze_contrast.py: Frame luminance analysis → JSON contrast map

Remotion Components

  • src/components/PromoVideo.tsx: Main composition: sequences scenes + audio
  • src/components/StockScene.tsx: Single scene: OffthreadVideo bg + adaptive text + Ken Burns
  • src/components/AdaptiveText.tsx: Contrast-aware text with spring/fade/typewriter/slide-up animations
  • src/components/Transitions.tsx: Fade, wipe, zoom transitions between scenes
  • src/components/AudioLayer.tsx: Background music with voiceover ducking
  • src/hooks/useContrast.ts: Reads contrast map, returns per-frame adaptive text styles

Related skills

FAQ

Where does the footage come from?

It pulls free stock footage from Pixabay and optionally Pexels, requiring their free API keys.

How does it place text over busy footage?

A contrast-aware analysis uses worst-case zone brightness and variance to force text backing when the background is busy or bright.

Generative Mediaagentsautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.