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.
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.
ffmpeg + ffprobePillowskill-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
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.
{
"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.slowmo: true → 0.8× speed (PTS=1.25×). Use on hero/dark cinematic shots.python3 scripts/make_product_ad.py example/product-config.json
Output: output/cool-gadget-ad-v1.mp4 — ready to post.
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.
| Track | Vibe | TikTok Videos |
|---|---|---|
| "Bounce (i just wanna dance)" — фрози & joyful | Upbeat instrumental | 8M+ ✅ |
| "warm nights" — Xori | Lofi/chill lifestyle | Trending |
| "Break Me" — Blake Whiten | Cinematic product demo | Trending |
The pipeline auto-generates a branded end card with:
bg_color)ZIP package — ready to use