Dropshipping guide reel
One template, a new product every day. Built from four @tradelle reels (Sept-Oct 2026, 56-64 s, 1080×1920) that share the same skeleton and almost the same voiceover; only the product, the prices and the hook change.
| Beat | Time | Picture | How we make it |
|---|
| Hook | 0-13 s | The product in action: real-looking phone or security-cam footage | varg-product-hook (Seedance 2.5 from product photos) |
| Price math | 13-27 s | Laptop, hand with a marker points at cost, sell price, demand chart | Real screenshots on a green-screen desk photo → Kling 4 adds the hand (or film it) |
| Steps | 27-53 s | The same desk and the same app UI in every shot, the pen walks through each screen | Same, one shot per screen |
| CTA | 53-60 s | Night skyline through an apartment window, iPhone look | Wan 3 or Seedance 2.5 once, reuse forever |
Captions: 1-2 words at a time, bold uppercase, white with a black outline, prices and keywords in lime, at 60 % of the height. Voice: one flat, confident male narrator, about 2.6 words per second, no music or a very quiet bed.
Generation runs on varg: the varg-ai skill (REST at https://api.varg.ai/v2) or the varg MCP server (https://mcp.varg.ai/mcp: call_tool, get_job, estimate_cost, create_upload). Every call returns a job; poll GET /v2/jobs/{id} until completed, the file is at output.outputs[0].url. Image-to-video jobs took 5-10 minutes in our test; one text-to-video job waited about an hour in the queue. Start them all at once and do the next step while they run.
1. Ask once, then go
Collect: the product (store or supplier link, 1-3 photos), cost price and sell price, which tools the steps name (the research tool, store builder, AI ad tool, supplier: the ones you're an affiliate of, or your own store), the CTA keyword (default GUIDE), and the language.
Then offer these choices in one message, each with a default:
- Hook: AI remake from product photos (default) / your own footage. Archetype: backyard camera, torture test, problem → solution, satisfying close-up, gift reaction.
- Laptop shots: full AI from screenshots (default) / film them yourself (free, looks 100 % real, guide in
references/screen-demo.md).
- Ending: AI night skyline (default, make once and reuse) / your own phone clip / stock.
- Voice: ElevenLabs
eleven_v4, voice "Brian" (default) / another voice / your own recording.
Quote the price before generating (POST /v2/estimate or MCP estimate_cost per clip). What our tests paid (Oct 2026): 6 s seedance_2_5 hook clip 231 credits, 5 s laptop shot 79 on kling_v4, the desk photo 22 once, the skyline 60 once, voice 8. The first reel is about 1,250 credits (2 hook clips + 9 laptop shots + skyline); every next product about 860 (2 hook clips + 5 product-specific laptop shots + voice), because the desk, the skyline and 4 of the laptop shots are shared. With real laptop footage, about 470 per reel.
2. Write the script
Fill the template in references/script.md (140-160 words for 55-60 s). Put the exact prices you'll show on screen into the script. No income promises (see the claims section there).
3. Make the pieces (start all video jobs in parallel)
Hook (0-13 s): follow varg-product-hook: 2-3 clips of 4-6 s on seedance_2_5, 9:16, 720p, the product photo as @image1.
Laptop shots (13-53 s): references/screen-demo.md. In short (the UI must be identical in every shot, so no model ever draws the screen):
- Once: a desk photo with a MacBook whose screen is flat chroma green (
gpt_image_2_5, prompt in the reference).
- Screenshots of every screen the script names, same size: your real store and tool, or
assets/demo-app.html (scripts/screenshot.mjs).
node scripts/screen-on-laptop.mjs plate.png frames/ screens/*.png: each screenshot warped onto the green screen, pixel-exact.
- Animate each frame for 5 s on
kling_v4 (79 credits): locked camera, static screen, the hand with a marker enters and points along a path in script order. 9 clips per reel; landing, settings, ad tool and flow are shared across products.
Skyline ending (53-60 s): references/cta-and-funnel.md has the iPhone-look prompt. Text-to-video on wan_3 (60 credits for 6 s) did it well in our test. Make 2 variants once and reuse the better one in every reel.
Voiceover:
curl -s -X POST https://api.varg.ai/v2/speech -H "Authorization: Bearer $VARG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "eleven_v4", "voice": "Brian", "text": "<the script>"}'
Word timings for the captions: transcribe the voiceover with groq_whisper_large_v3_turbo. It returns data.words with a start and end per word; whisper_large_v3 returns only sentence chunks.
curl -s -X POST https://api.varg.ai/v2/tools/transcription/call -H "Authorization: Bearer $VARG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "groq_whisper_large_v3_turbo", "audio_url": "VOICEOVER_URL", "language": "en"}'
# poll the job, then save its result (the object with "words") as words.json
4. Cut it
Download every clip into clips/ under the names guide-edl.mjs lists (hook1, hook2, productA, productB, store, home, settings, adpaste, ads, flow, orders, skyline), then:
mkdir -p fonts && curl -sL -o fonts/Bangers-Regular.ttf \
https://github.com/google/fonts/raw/main/ofl/bangers/Bangers-Regular.ttf # free, close to the originals' comic bold
node scripts/captions.mjs words.json captions.ass --keywords "shopify,profit,demand,free,guide,china"
node scripts/guide-edl.mjs words.json clips > edit.json # cuts every screen in on the word that names it
node scripts/assemble.mjs edit.json
For a voiceover in another language add --lang es (built in: en, es) or --anchors anchors.json with the same 11 keys; see varg-ad-localize. guide-edl.mjs finds the script's anchor words ("purchased", "sold", "Even after", "Here is how", "First", "Offer", "Then go", "It will", "Start posting", "when a customer", "Comment") and writes one cut per phrase. To cut by hand, edit.json is one entry per cut:
{
"out": "reel.mp4", "voiceover": "vo.mp3", "captions": "captions.ass", "fontsdir": "fonts",
"shots": [
{ "file": "hook1.mp4", "in": 0, "dur": 3.0 },
{ "file": "hook2.mp4", "in": 0.5, "dur": 2.6 },
{ "file": "research.mp4","in": 0, "dur": 3.0 },
{ "file": "store.mp4", "in": 0, "dur": 4.1 },
{ "file": "research.mp4","in": 2.6, "dur": 2.4, "zoom": 1.08 },
{ "file": "skyline.mp4", "in": 0, "dur": 4.6 }
]
}
zoom punches in (use it when you reuse a clip), speed below 1 slows a shot, a shot longer than its source holds the last frame, and overlays ([{ "file": "banner.png", "start": 0, "end": 7 }], full-frame PNGs with alpha) put on-screen text with emoji or a CCTV timestamp over the hook. libass can't draw colour emoji, so render those lines as PNGs. Shots should add up to the voiceover length. The script picks up Homebrew's ffmpeg-full by itself when the default ffmpeg can't burn subtitles.
ffmpeg without captions support. Homebrew's ffmpeg has no libass since 2025 (ffmpeg -filters | grep subtitles prints nothing). Install the keg-only ffmpeg-full next to it (brew install ffmpeg-full); it doesn't replace ffmpeg. Seen on macOS 15.1 (2026-10-27): the install upgraded shared libraries, after which the old ffmpeg failed to start (Library not loaded: libx265…) and ffmpeg-full failed on freetype (Library not loaded: /usr/lib/libhvf.dylib). Fix: brew upgrade ffmpeg and brew reinstall --build-from-source freetype. Don't run this on someone's machine without asking: it changes their system Homebrew.
Check the result: watch it once with sound and once muted; every price on screen must match the voice and the caption at that moment.
5. Post and catch the comments
Caption Best time to start is here 🤝 #entrepreneur #onlinebusiness #ecommerce (the originals' exact line), a ManyChat comment trigger on the keyword that DMs the guide, and the AI label where the platform asks for it. Setup and what to put in the guide: references/cta-and-funnel.md.
Tested
2026-10-28, four products end to end on varg with this exact pipeline: one green-screen desk photo (gpt_image_2_5), the demo app's screens via screenshot.mjs + screen-on-laptop.mjs, 24 laptop shots on kling_v4, hooks on seedance_2_5, eleven_v4 "Brian" voices, word timings from local Whisper, guide-edl.mjs + captions.mjs + assemble.mjs. The app looks the same in every shot and the desk never changes; the hand is the only thing that moves.
The first version (2026-10-27) drew each laptop frame with gpt_image_2_5; the UI changed between shots, which is why the steps above keep the model off the screen.
Rules
- Real prices, real store, real screenshots. No fake reviews, sales counts or income claims.
- Don't repost other people's videos as the hook. Remake the idea with your product (
varg-product-hook).
- Say it's an ad when you're paid or an affiliate; label AI footage where the platform asks.
- Keep Burj Khalifa out of focus in paid ads (Emaar wants approval for ad use).
- Re-running a byte-identical request is a free cache hit; change a word to get a new take.
Files
reel/
script.md # filled template
product.png # packshot (and any extra product photos)
plate.png # the green-screen desk photo, made once
screens/*.png # screenshots, one per screen named in the script
frames/*.jpg # screen-on-laptop.mjs output, one per screenshot
clips/*.mp4 # hook1-2, laptop shots (productA/B, store, home, settings, adpaste, ads, flow, orders), skyline
vo.mp3 words.json captions.ass fonts/
edit.json reel.mp4
Tutorial with all five example videos and the tools compared: https://github.com/vargHQ/how-to-make-ai-videos-for-dropshipping
Related skills
varg-product-hook (the hook), varg-ai (models, uploads, prices, cloud render), media-download (save reference reels), short-form-ffmpeg-cookbook (more edits: zoom punches, speed ramps, loudness), video-skills (other ad formats).