Supplier Video Ad Builder

Dev Tools

Transforms supplier or CJ source videos into 1080×1920 TikTok/Instagram Reels ads with clean zone detection, Pillow text overlays, CTA card, and trending audio.

Install

openclaw skills install skill-supplier-video-ad

Supplier Video Ad Builder

Turns raw supplier source footage into polished 1080×1920 TikTok/IG Reels ads.

Pipeline: detect clean zones → cut + slow-mo → Pillow text overlays → CTA end card → trending audio → final MP4.

Requirements

  • ffmpeg + ffprobe
  • Python 3.10+: Pillow
  • Montserrat-Bold font (or any TTF — configurable in scripts)
  • Your brand logo as PNG (with transparency)
  • Source video from supplier/CJ

File Structure

skill-supplier-video-ad/
├── scripts/
│   ├── detect_clean_zones.py   # Step 1: extract 1fps frames for text analysis
│   └── make_product_ad.py      # Step 2: full pipeline from config JSON
├── example/
│   └── product-config.json     # Reference config template
└── SKILL.md

Workflow

Step 1 — Detect Clean Zones

Run this on each source video to extract frames for visual inspection:

python3 scripts/detect_clean_zones.py path/to/source.mp4 --output-dir ./frames

Then analyze the frames with an image model:

"For each frame (f_01=t1s, f_02=t2s, ...), is there baked-in text? YES/NO"

Map YES/NO → timestamps → define clean_zones in your config.

Step 2 — Create Product Config

{
  "product_name": "Cool Gadget",
  "price": "29.99 USD",
  "output_name": "cool-gadget-ad-v1.mp4",
  "source_videos": {
    "main": "path/to/source.mp4"
  },
  "clean_zones": [
    { "source": "main", "ss": 2.5, "dur": 2.5, "slowmo": true,  "label": "hero-shot" },
    { "source": "main", "ss": 8.0, "dur": 2.0, "slowmo": false, "label": "lifestyle" },
    { "source": "main", "ss": 14.0,"dur": 3.0, "slowmo": false, "label": "detail" }
  ],
  "text_overlays": [
    { "lines": ["Line 1", "Line 2"],       "start": 0.5, "end": 3.5,  "fontsize": 70, "y_pct": 0.62 },
    { "lines": ["Feature Text"],           "start": 3.8, "end": 6.5,  "fontsize": 70, "y_pct": 0.62 },
    { "lines": ["SHOP NOW"],               "start": 6.8, "end": 9.5,  "fontsize": 92, "y_pct": 0.66 },
    { "lines": ["yourstore.com"],          "start": 6.8, "end": 9.5,  "fontsize": 58, "y_pct": 0.76 }
  ],
  "font_path": "/path/to/Montserrat-Bold.ttf",
  "audio": "path/to/trending-sound.mp3",
  "audio_start_offset": 2,
  "audio_volume": 0.88,
  "cta": {
    "duration": 3,
    "price": "29.99 USD",
    "line1": "Link in bio  🛒",
    "line2": "yourstore.com",
    "bg_color": [8, 8, 14],
    "logo_path": "path/to/logo.png"
  }
}

Config tips:

  • y_pct: vertical position as fraction of frame height. 0.62 = product copy, 0.66 = CTA verb, 0.76 = URL.
  • fontsize: 70–74 for body, 92 for "Shop Now", 58 for URL.
  • Lines ≤ 20 chars each for clean wrapping.
  • slowmo: true → 0.8× speed (PTS=1.25×). Use on hero/dark cinematic shots.
  • Total duration: ~10–13s product footage + 3s CTA = 13–16s ideal ad length.

Step 3 — Run Pipeline

python3 scripts/make_product_ad.py example/product-config.json

Output: output/cool-gadget-ad-v1.mp4 — ready to post.

Text Rendering Note

This skill does NOT use ffmpeg drawtext — it renders text as Pillow PNGs and overlays them via overlay filter. This avoids ffmpeg font/emoji compatibility issues and works on any Linux server.

Output Spec

  • Resolution: 1080×1920 (9:16 portrait)
  • FPS: 30
  • Codec: H.264 + AAC 128k
  • Typical size: 8–20 MB

Proven TikTok Sounds (March 2026)

TrackVibeTikTok Videos
"Bounce (i just wanna dance)" — фрози & joyfulUpbeat instrumental8M+ ✅
"warm nights" — XoriLofi/chill lifestyleTrending
"Break Me" — Blake WhitenCinematic product demoTrending

CTA Card

The pipeline auto-generates a branded end card with:

  • Your logo (PNG with alpha) centered, scaled to 400px wide
  • Glowing ambient light effect behind logo
  • Price in large bold type
  • CTA line + URL in muted gray
  • Dark background (configurable bg_color)