Install the belt CLI skill: npx skills add belt-sh/cli
Video Ad Specs
Create platform-specific video ads via inference.sh CLI.
Quick Start
Requires inference.sh CLI (belt). Install instructions
belt login
# Generate a vertical video ad scene
belt app run bytedance/seedance-2-0 --input '{
"prompt": "vertical video, person excitedly unboxing a product, clean modern room, bright natural lighting, social media ad style, authentic feeling",
"ratio": "9:16",
"generate_audio": true
}'
Platform Specifications
TikTok
| Spec |
Value |
| Aspect ratio |
9:16 (vertical) |
| Resolution |
1080 x 1920 px |
| Duration |
5-60 seconds (15-30s recommended) |
| File size |
Max 500 MB |
| Format |
MP4, MOV |
| Sound |
On by default (design with sound) |
| Text safe zone |
150px from all edges |
| Hook window |
1 second — first frame must grab attention |
Instagram Reels
| Spec |
Value |
| Aspect ratio |
9:16 (vertical) |
| Resolution |
1080 x 1920 px |
| Duration |
Up to 90 seconds (15-30s for ads) |
| Cover image |
Separate upload, shows in grid |
| Sound |
On by default |
| Caption area |
Bottom 20% reserved for text overlay |
Instagram Stories
| Spec |
Value |
| Aspect ratio |
9:16 |
| Resolution |
1080 x 1920 px |
| Duration |
Up to 15 seconds per segment |
| Swipe-up/Link |
Available for ads |
| Top/bottom |
14% top and 20% bottom = unsafe for key content |
YouTube
| Format |
Aspect |
Duration |
Skip |
| Bumper |
16:9 |
6 seconds exactly |
Non-skippable |
| Non-skippable |
16:9 |
15 seconds |
Non-skippable |
| Skippable (TrueView) |
16:9 |
Any length |
Skip after 5 seconds |
| Shorts |
9:16 |
Up to 60 seconds |
N/A |
Resolution: 1920 x 1080 (16:9) or 1080 x 1920 (Shorts)
Facebook Feed
| Spec |
Value |
| Aspect ratio |
1:1 (square) or 4:5 (recommended for mobile) |
| Resolution |
1080 x 1080 or 1080 x 1350 |
| Duration |
Up to 240 min (15-30s recommended) |
| Autoplay |
Silent — captions are essential |
| Sound |
85% of Facebook video is watched without sound |
LinkedIn
| Spec |
Value |
| Aspect ratio |
1:1 or 16:9 |
| Resolution |
1080 x 1080 or 1920 x 1080 |
| Duration |
3 seconds to 10 minutes (15-30s for ads) |
| Tone |
Professional |
| Autoplay |
Silent in feed |
AIDA Framework for Video Ads
| Phase |
Time |
Goal |
Technique |
| Attention |
0-3s |
Stop the scroll |
Pattern interrupt, bold visual, question |
| Interest |
3-10s |
Keep watching |
State the problem, show relevance |
| Desire |
10-20s |
Want the solution |
Show the product/outcome, social proof |
| Action |
Final 3-5s |
Click/buy/sign up |
Clear CTA, urgency, offer |
Hook Techniques (First 3 Seconds)
| Technique |
Example |
| Bold statement |
"This tool replaced my entire marketing team" |
| Question |
"Why are you still doing this manually?" |
| Surprising visual |
Unexpected transformation, before/after reveal |
| Pattern interrupt |
Start mid-action, unusual angle, bright color |
| Social proof |
"2 million people switched to this" |
| Pain point |
"If you hate [common frustration], watch this" |
Creating Video Ads
Vertical (TikTok, Reels, Stories, Shorts)
# Hook scene (0-3s)
belt app run google/veo-3-1-fast --input '{
"prompt": "vertical 9:16 video, close-up of hands struggling with tangled cables and messy desk, frustrated energy, shaky handheld camera, authentic social media style, bright lighting"
}'
# Solution reveal (3-15s)
belt app run bytedance/seedance-2-0 --input '{
"prompt": "vertical video, smooth product reveal, clean wireless charging station on minimalist desk, satisfying organization transformation, bright modern room, social media ad aesthetic",
"ratio": "9:16",
"generate_audio": true
}'
# Add voiceover
belt app run falai/dia-tts --input '{
"prompt": "[S1] Stop wasting time with this mess. This one product changed my entire setup. Everything charges. Everything is organized. Link in bio."
}'
# Merge video + audio
belt app run infsh/video-audio-merger --input '{
"video": "solution-reveal.mp4",
"audio": "voiceover.mp3"
}'
# Add captions (critical for silent autoplay)
belt app run infsh/caption-videos --input '{
"video": "ad-with-audio.mp4",
"caption_file": "captions.srt"
}'
Square (Facebook, LinkedIn Feed)
belt app run google/veo-3-1-fast --input '{
"prompt": "square 1:1 video, professional person at desk discovering a new software tool, laptop screen showing clean dashboard, natural office lighting, corporate commercial style, satisfied expression"
}'
YouTube Bumper (6 Seconds)
# 6-second bumper: one message, one visual, one CTA
belt app run google/veo-3-1-fast --input '{
"prompt": "6 second product ad, quick montage of a sleek app being used on phone, fast cuts, modern, energetic, brand logo reveal at end, punchy and dynamic, wide 16:9"
}'
# Keep it tight
belt app run falai/dia-tts --input '{
"prompt": "[S1] Your reports. Automated. Try DataFlow free."
}'
Captions Are Mandatory
85% of Facebook and 40%+ of Instagram video is watched on mute.
Caption Best Practices
| Rule |
Reason |
| Always add captions |
Silent viewing is the default on most platforms |
| Large, readable font |
Small text is invisible on mobile |
| High contrast |
White text with dark outline/background |
| Centered or bottom-third |
Standard viewing position |
| Max 2 lines at a time |
More text = can't be read fast enough |
| Key words in bold/color |
Draws eye to important words |
# Generate captions from audio
# (create SRT file from your script, then burn in)
belt app run infsh/caption-videos --input '{
"video": "ad-video.mp4",
"caption_file": "ad-captions.srt"
}'
Ad Structure Templates
Testimonial Ad (15-30s)
| Time |
Content |
| 0-3s |
Customer states the problem they had |
| 3-15s |
How they discovered and tried the product |
| 15-25s |
The specific result they achieved |
| 25-30s |
Product name + CTA |
Demo Ad (15-30s)
| Time |
Content |
| 0-3s |
The problem (text or visual) |
| 3-20s |
Product demo showing the solution |
| 20-25s |
Key result/benefit |
| 25-30s |
CTA + offer |
Before/After Ad (15s)
| Time |
Content |
| 0-3s |
"Before" state (messy, slow, frustrating) |
| 3-5s |
Transition / product introduction |
| 5-12s |
"After" state (clean, fast, satisfying) |
| 12-15s |
CTA |
Common Mistakes
| Mistake |
Problem |
Fix |
| No hook in first 1-3s |
Viewer scrolls past |
Open with pattern interrupt |
| Landscape video on TikTok/Reels |
Letterboxed, looks amateur |
Use 9:16 for vertical platforms |
| No captions |
Most viewers watch silent |
Always add captions |
| CTA too late |
Viewers already left |
Clear CTA within last 5 seconds |
| Too long for platform |
Forced skip or dropout |
Match platform duration norms |
| Same ad for all platforms |
Wrong specs, wrong tone |
Create platform-specific versions |
| Logo in first 3s |
Feels like a commercial, gets skipped |
Save branding for the end |
| Text in unsafe zones |
Cut off by platform UI |
Check safe zone per platform |
Checklist
Related Skills
npx skills add inference-sh/skills@ai-video-generation
npx skills add inference-sh/skills@video-prompting-guide
npx skills add inference-sh/skills@text-to-speech
npx skills add inference-sh/skills@prompt-engineering
Browse all apps: belt app store
1---
2name: video-ad-specs
3description: "Video ad creation with exact platform-specific specs for TikTok, Instagram, YouTube, Facebook, LinkedIn. Covers dimensions, duration limits, AIDA framework, and caption requirements. Use for: video ads, social media ads, paid media creative, video marketing, ad production. Triggers: video ad, social media ad, tiktok ad, instagram ad, youtube ad, facebook ad, linkedin ad, video creative, ad specs, paid media, video marketing, ad production, reels ad, stories ad, pre roll, bumper ad"
4allowed-tools: Bash(belt *)
5---
6
7> **Install the belt CLI skill:** `npx skills add belt-sh/cli`
8
9# Video Ad Specs
10
11Create platform-specific video ads via [inference.sh](https://inference.sh) CLI.
12
13## Quick Start
14
15> Requires inference.sh CLI (`belt`). [Install instructions](https://raw.githubusercontent.com/inference-sh/skills/refs/heads/main/cli-install.md)
16
17```bash
18belt login
19
20# Generate a vertical video ad scene
21belt app run bytedance/seedance-2-0 --input '{
22 "prompt": "vertical video, person excitedly unboxing a product, clean modern room, bright natural lighting, social media ad style, authentic feeling",
23 "ratio": "9:16",
24 "generate_audio": true
25}'
26```
27
28
29## Platform Specifications
30
31### TikTok
32
33| Spec | Value |
34|------|-------|
35| Aspect ratio | **9:16** (vertical) |
36| Resolution | 1080 x 1920 px |
37| Duration | 5-60 seconds (15-30s recommended) |
38| File size | Max 500 MB |
39| Format | MP4, MOV |
40| Sound | On by default (design with sound) |
41| Text safe zone | 150px from all edges |
42| Hook window | **1 second** — first frame must grab attention |
43
44### Instagram Reels
45
46| Spec | Value |
47|------|-------|
48| Aspect ratio | **9:16** (vertical) |
49| Resolution | 1080 x 1920 px |
50| Duration | Up to 90 seconds (15-30s for ads) |
51| Cover image | Separate upload, shows in grid |
52| Sound | On by default |
53| Caption area | Bottom 20% reserved for text overlay |
54
55### Instagram Stories
56
57| Spec | Value |
58|------|-------|
59| Aspect ratio | **9:16** |
60| Resolution | 1080 x 1920 px |
61| Duration | Up to 15 seconds per segment |
62| Swipe-up/Link | Available for ads |
63| Top/bottom | 14% top and 20% bottom = unsafe for key content |
64
65### YouTube
66
67| Format | Aspect | Duration | Skip |
68|--------|--------|----------|------|
69| Bumper | 16:9 | **6 seconds** exactly | Non-skippable |
70| Non-skippable | 16:9 | **15 seconds** | Non-skippable |
71| Skippable (TrueView) | 16:9 | Any length | Skip after **5 seconds** |
72| Shorts | 9:16 | Up to 60 seconds | N/A |
73
74Resolution: 1920 x 1080 (16:9) or 1080 x 1920 (Shorts)
75
76### Facebook Feed
77
78| Spec | Value |
79|------|-------|
80| Aspect ratio | **1:1** (square) or **4:5** (recommended for mobile) |
81| Resolution | 1080 x 1080 or 1080 x 1350 |
82| Duration | Up to 240 min (15-30s recommended) |
83| Autoplay | **Silent** — captions are essential |
84| Sound | 85% of Facebook video is watched **without sound** |
85
86### LinkedIn
87
88| Spec | Value |
89|------|-------|
90| Aspect ratio | **1:1** or **16:9** |
91| Resolution | 1080 x 1080 or 1920 x 1080 |
92| Duration | 3 seconds to 10 minutes (15-30s for ads) |
93| Tone | Professional |
94| Autoplay | Silent in feed |
95
96## AIDA Framework for Video Ads
97
98| Phase | Time | Goal | Technique |
99|-------|------|------|-----------|
100| **Attention** | 0-3s | Stop the scroll | Pattern interrupt, bold visual, question |
101| **Interest** | 3-10s | Keep watching | State the problem, show relevance |
102| **Desire** | 10-20s | Want the solution | Show the product/outcome, social proof |
103| **Action** | Final 3-5s | Click/buy/sign up | Clear CTA, urgency, offer |
104
105### Hook Techniques (First 3 Seconds)
106
107| Technique | Example |
108|-----------|---------|
109| Bold statement | "This tool replaced my entire marketing team" |
110| Question | "Why are you still doing this manually?" |
111| Surprising visual | Unexpected transformation, before/after reveal |
112| Pattern interrupt | Start mid-action, unusual angle, bright color |
113| Social proof | "2 million people switched to this" |
114| Pain point | "If you hate [common frustration], watch this" |
115
116## Creating Video Ads
117
118### Vertical (TikTok, Reels, Stories, Shorts)
119
120```bash
121# Hook scene (0-3s)
122belt app run google/veo-3-1-fast --input '{
123 "prompt": "vertical 9:16 video, close-up of hands struggling with tangled cables and messy desk, frustrated energy, shaky handheld camera, authentic social media style, bright lighting"
124}'
125
126# Solution reveal (3-15s)
127belt app run bytedance/seedance-2-0 --input '{
128 "prompt": "vertical video, smooth product reveal, clean wireless charging station on minimalist desk, satisfying organization transformation, bright modern room, social media ad aesthetic",
129 "ratio": "9:16",
130 "generate_audio": true
131}'
132
133# Add voiceover
134belt app run falai/dia-tts --input '{
135 "prompt": "[S1] Stop wasting time with this mess. This one product changed my entire setup. Everything charges. Everything is organized. Link in bio."
136}'
137
138# Merge video + audio
139belt app run infsh/video-audio-merger --input '{
140 "video": "solution-reveal.mp4",
141 "audio": "voiceover.mp3"
142}'
143
144# Add captions (critical for silent autoplay)
145belt app run infsh/caption-videos --input '{
146 "video": "ad-with-audio.mp4",
147 "caption_file": "captions.srt"
148}'
149```
150
151### Square (Facebook, LinkedIn Feed)
152
153```bash
154belt app run google/veo-3-1-fast --input '{
155 "prompt": "square 1:1 video, professional person at desk discovering a new software tool, laptop screen showing clean dashboard, natural office lighting, corporate commercial style, satisfied expression"
156}'
157```
158
159### YouTube Bumper (6 Seconds)
160
161```bash
162# 6-second bumper: one message, one visual, one CTA
163belt app run google/veo-3-1-fast --input '{
164 "prompt": "6 second product ad, quick montage of a sleek app being used on phone, fast cuts, modern, energetic, brand logo reveal at end, punchy and dynamic, wide 16:9"
165}'
166
167# Keep it tight
168belt app run falai/dia-tts --input '{
169 "prompt": "[S1] Your reports. Automated. Try DataFlow free."
170}'
171```
172
173## Captions Are Mandatory
174
17585% of Facebook and 40%+ of Instagram video is watched on mute.
176
177### Caption Best Practices
178
179| Rule | Reason |
180|------|--------|
181| Always add captions | Silent viewing is the default on most platforms |
182| Large, readable font | Small text is invisible on mobile |
183| High contrast | White text with dark outline/background |
184| Centered or bottom-third | Standard viewing position |
185| Max 2 lines at a time | More text = can't be read fast enough |
186| Key words in bold/color | Draws eye to important words |
187
188```bash
189# Generate captions from audio
190# (create SRT file from your script, then burn in)
191belt app run infsh/caption-videos --input '{
192 "video": "ad-video.mp4",
193 "caption_file": "ad-captions.srt"
194}'
195```
196
197## Ad Structure Templates
198
199### Testimonial Ad (15-30s)
200
201| Time | Content |
202|------|---------|
203| 0-3s | Customer states the problem they had |
204| 3-15s | How they discovered and tried the product |
205| 15-25s | The specific result they achieved |
206| 25-30s | Product name + CTA |
207
208### Demo Ad (15-30s)
209
210| Time | Content |
211|------|---------|
212| 0-3s | The problem (text or visual) |
213| 3-20s | Product demo showing the solution |
214| 20-25s | Key result/benefit |
215| 25-30s | CTA + offer |
216
217### Before/After Ad (15s)
218
219| Time | Content |
220|------|---------|
221| 0-3s | "Before" state (messy, slow, frustrating) |
222| 3-5s | Transition / product introduction |
223| 5-12s | "After" state (clean, fast, satisfying) |
224| 12-15s | CTA |
225
226## Common Mistakes
227
228| Mistake | Problem | Fix |
229|---------|---------|-----|
230| No hook in first 1-3s | Viewer scrolls past | Open with pattern interrupt |
231| Landscape video on TikTok/Reels | Letterboxed, looks amateur | Use 9:16 for vertical platforms |
232| No captions | Most viewers watch silent | Always add captions |
233| CTA too late | Viewers already left | Clear CTA within last 5 seconds |
234| Too long for platform | Forced skip or dropout | Match platform duration norms |
235| Same ad for all platforms | Wrong specs, wrong tone | Create platform-specific versions |
236| Logo in first 3s | Feels like a commercial, gets skipped | Save branding for the end |
237| Text in unsafe zones | Cut off by platform UI | Check safe zone per platform |
238
239## Checklist
240
241- [ ] Correct aspect ratio for target platform
242- [ ] Hook in first 1-3 seconds
243- [ ] Captions added (readable, high contrast)
244- [ ] CTA clear and within final 5 seconds
245- [ ] Duration matches platform norms
246- [ ] Text outside platform unsafe zones
247- [ ] Audio designed for both sound-on and sound-off
248- [ ] Platform-specific version (not one-size-fits-all)
249
250## Related Skills
251
252```bash
253npx skills add inference-sh/skills@ai-video-generation
254npx skills add inference-sh/skills@video-prompting-guide
255npx skills add inference-sh/skills@text-to-speech
256npx skills add inference-sh/skills@prompt-engineering
257```
258
259Browse all apps: `belt app store`
260