
TL;DR
A 20-second ad is ~50 spoken words at ~2.5 words/second. Storyboard short-form ads as a 6-column table (one row per shot), not drawings. Assign seconds to beats: hook, problem, demo, proof, CTA. Write one prompt per shot and decide safe zones before you export. Mark 15s + 6s cutdowns on the master, then lock scope at a single storyboard review gate.
Word count to runtime conversion, and catching an overlong script before anyone storyboards it

Scripts are cheap because they let you pretend time is infinite.
A 20-second ad is not “about a paragraph.” At a spoken pace of roughly 2.5 words per second, you get ~50 spoken words. That’s it. Most drafts that “read well” are closer to 120-150 words, which is why they turn into frantic edits, tiny text, or a voiceover that sounds like a disclaimer speedrun.
Here’s the pre-storyboard test I like:
- Highlight only the spoken words (not stage directions).
- Count them.
- Divide by 2.5 to get seconds.
If you’re at 70 spoken words, you’re already at ~28 seconds. That means your storyboard will either (a) quietly delete key lines, or (b) cram multiple ideas into a single shot and hope the viewer does the decoding.
This is also where you decide whether you even have an “approved script.” If you’re still shopping for formats (testimonial, problem-solution, unboxing, founder POV), start upstream with the script patterns in AI UGC scripts that convert for ecommerce. This article assumes the angle and copy are approved, then treats them like an engineering spec.
One blunt rule: if the script is too long, do not storyboard it. Cut it first. One revision at storyboard costs minutes; the same fix after generating 12 variants costs the batch.
The six-column storyboard table: timecode, shot description, spoken line, on-screen text, safe-zone note, and generation prompt or camera note

A storyboard for a 20-second ad is not a drawing exercise.
It’s a contract that says: “At second 7.2, the viewer sees this, hears this, and reads this - and it fits inside the UI overlays.” If you can’t make that clear in a table, you don’t have a storyboard. You have hopes.
Use one row per shot. Not one row per beat, not one row per “scene.” A shot is the unit your editor cuts and your generator renders.
Here’s the six-column layout (copy it into Sheets/Notion):
| Timecode (in-out) | Shot description | Spoken line | On-screen text | Safe-zone note | Generation prompt or camera note |
|---|---|---|---|---|---|
| 0.0-0.8 | Tight selfie, creator holds empty water bottle | “I used to crash at 3pm.” | “3pm crash?” | TikTok: keep text above bottom 484px | Prompt: UGC selfie, handheld, bright kitchen, tired expression, 1080x1920 |
| 0.8-2.0 | Quick cut to electrolyte packet on counter | “Then I tried this.” | Brand + product name | Keep brand mark away from right 140px | Prompt: close-up product on counter, natural light, slight camera shake |
| 2.0-6.0 | Creator mixes, water turns slightly tinted | “It’s electrolytes without the sugar bomb.” | “Electrolytes - no sugar bomb” | Reels: keep headline out of bottom 350px | Camera note: show pour + stir, match cuts on movement |
| 6.0-10.0 | Before/after energy: creator at laptop, then walking | “I feel normal again by noon.” | “Noon energy” | TikTok: top clear 130px for UI | Prompt: split-screen feel, casual home office, same outfit |
| 10.0-14.0 | Proof moment: ingredient list or quick rating screenshot | “And it’s third-party tested.” | “Third-party tested” | If using screenshot, scale to safe area | Camera note: add subtle zoom-in, 0.2s whoosh optional |
| 14.0-20.0 | CTA: creator points to on-screen offer | “Try it for 30 days. Link below.” | “30-day try” + “Shop now” | Keep CTA button zone clear | Prompt: creator points down, confident tone, clean background |
Three notes that prevent most “why didn’t this come out right?” loops:
- Timecode is in-out, not just a timestamp. You’re allocating seconds, not documenting a timeline after the fact.
- On-screen text is separate from spoken line. Many ads fail because teams treat captions like an afterthought, then discover there’s no visual room.
- The last column is the execution handoff. It must read like something an editor can cut or a generator can render in one pass.
If a single row needs two prompts, two camera notes, and a paragraph of explanation, split it into two shots. Or admit the script is trying to do three jobs in one breath.
Breaking a 20-30 second ad into beats and assigning seconds to each: hook, problem, demo, proof, CTA

The easiest way to keep a script honest is to give every beat a budget.
For a 25-second ad, a clean starting allocation looks like this:
- Hook: 0-2s
- Problem: 2-6s
- Demo: 6-16s
- Proof: 16-21s
- CTA: 21-25s
That’s not “the rules.” It’s a useful constraint that forces tradeoffs.
Notice what gets the most time: demo (10 seconds). That’s where short-form ads are either believed or ignored. If your “demo” is actually three claims and a product beauty shot, you are not demoing. You are reciting.
Here’s how this maps into the table without turning into a film school exercise:
- Hook gets 1-2 shots. One visual idea, one line.
- Problem gets 1-3 shots. You can show the pain, not explain the pain.
- Demo gets 3-6 shots because it’s actions: pour, tap, swipe, unbox, apply, compare.
- Proof gets 1-2 shots: rating screenshot, guarantee card, quick stat, credible badge.
- CTA gets 1-2 shots and must match the offer and landing page.
If you’re pulling the promise, objection, and CTA verb from a messaging system, don’t improvise it inside the storyboard. Use the cell you already decided in the UGC message angle matrix by funnel stage - that’s the “source of truth” for what the storyboard has to carry.
This beat budget also makes disagreements faster. Someone says “We need to add the founder story.” Fine. Which beat loses time? Demo or proof? Make them pick.
Writing one generation prompt per shot so the tool or the editor produces the intended frame on the first pass
A prompt is not a vibe. It’s a spec.
Your goal is not to create “more detail.” Your goal is to remove ambiguity so you don’t spend the next hour debating why the creator is suddenly outdoors, holding the wrong object, wearing a suit, and smiling like a stock photo.
One prompt per shot forces discipline. It also forces you to see when a shot is actually two shots.
A good per-shot prompt usually includes:
- Subject: “UGC-style creator selfie” vs “hands-only product close-up.”
- Setting: “bright kitchen” vs “bathroom mirror” vs “home office.”
- Action: “opens pouch and pours into bottle” is better than “shows product.”
- Camera: “handheld, slight shake, front camera” or “tripod, centered.”
- Framing: “tight head-and-shoulders” or “mid-shot with hands visible.”
- Output spec: “9:16, 1080x1920.”
Here are three prompts that are “one sentence” but still executable:
- “Handheld UGC selfie, creator in gym parking lot, slightly sweaty, holds shaker bottle up to camera, 9:16 1080x1920.”
- “Close-up hands-only shot on white counter, pours serum onto fingertips, natural window light, shallow depth of field, 9:16.”
- “Tripod mid-shot in bedroom, creator points to on-screen text area, neutral background, confident expression, 9:16.”
If you’re producing with AI UGC tools, remember the economics change. Traditional UGC can run ~$200 per video once you’re paying creators and managing revisions. EzUGC-style AI UGC is closer to ~$5 per video, which means regenerating one bad shot is cheap enough that you can storyboard shots a $200-per-video budget would have vetoed.
But don’t confuse “cheap regen” with “no spec.” Cheap regeneration is a reason to explore more variants, not a reason to ship unclear instructions.
Making safe-zone placement decisions at the storyboard stage rather than discovering them at export
Most “our editor messed up the export” complaints are actually storyboard failures.
Safe zones are not an export setting. They’re a layout decision: where your text lives, where your product lives, and what you are willing to let the platform UI cover.
Put the platform rule in the safe-zone column on every row, not just “global notes.” Why? Because some shots can tolerate text higher (product close-up), and some shots need text lower (face framing). The right answer changes shot to shot.
Use these concrete starting numbers:
- TikTok 1080x1920: 130px clear at the top, 484px at the bottom, 140px on the right, 44px on the left. Source and nuance: TikTok safe zones pixel guide.
- Instagram Reels and Stories 1080x1920: keep ~250-300px clear at the top and ~300-350px at the bottom. Details: Instagram safe zones for Reels and Stories.
Two practical rules I’d bake into the table:
- If a shot includes a face, keep primary text away from the lower third where captions and UI pile up. Don’t make the viewer choose between reading and looking at a human.
- If a shot includes a screenshot (rating, review, app UI), assume you’ll need to scale it down. Write “screenshot must remain legible at 80% scale within safe area” in the safe-zone column so nobody is surprised later.
This is also where you decide if you’re shipping one master that works “fine” everywhere, or building platform-specific versions. If you can’t afford two edits, at least storyboard the safe zones with the strictest platform in mind.
Designing cutdowns into the storyboard up front by marking 15-second and 6-second in-points on the master
Cutdowns shouldn’t be a panic after the winner emerges.
They should be designed into the master so you can ship a 25s, 15s, and 6s without rewriting the ad each time.
The easiest way is to mark in-points right in the timecode column:
- 15-second version starts at the demo.
- 6-second version starts at the hook.
That sounds obvious until you realize most masters aren’t built to support it. They require the problem setup to “make sense,” so the demo can’t stand alone. Or the proof shot references a line you cut, so it becomes nonsense.
Here’s a clean storyboard behavior:
- In the master, write a note like: “15s IN: 6.0s (Demo start)” and “6s IN: 0.0s (Hook).”
- Make the first demo shot self-contained. It should not require a four-second explanation.
- Make proof optional. Proof is valuable, but it’s the first thing that gets cut in 6 seconds.
This is also why the table matters more than a script doc. The script doc can’t show you that your “proof” line is welded to a shot that won’t exist in the 15s cut.
The single review gate: what an approver signs at storyboard so the script cannot be reopened after generation
You need one moment where the team stops being creative and starts being operational.
That moment is storyboard sign-off.
The approver should be signing a short checklist that lives above the table (or as a locked first row). Not to add bureaucracy - to prevent the most expensive kind of revision: reopening the script after you generated a batch.
Here’s what I’d have them explicitly approve:
- Runtime math: total timecode equals target (20s, 25s, 30s).
- Spoken word count matches the time budget (using ~2.5 words/sec).
- Claims and proof: every claim has a corresponding proof shot or is removed.
- On-screen text: exact words, capitalization, and any required legal language.
- Safe-zone rules per platform are written into the table.
- Cutdown plan: 15s and 6s in-points are marked.
- Shot count and variant count: how many generations you intend to produce.
That last item matters more than it sounds. If you’re using AI UGC, you can create video ads in minutes, not days. But the speed creates a new failure mode: generating 12 variants off an unapproved spec, then arguing about fundamentals.
One revision at storyboard costs minutes; the same fix after generating 12 variants costs the batch.
Lock the storyboard. If someone wants to change the hook after sign-off, that’s a new version (v2), not a “quick tweak.”
Handing off to production: shot IDs, file naming, and what the next stage needs to start immediately
Production doesn’t need your taste. It needs your identifiers.
If you want editors, freelancers, or AI systems to move fast, you need shot IDs that map back to storyboard rows. Otherwise you’ll get the classic Slack message: “Which shot is s03 again?”
Use a convention like:
- sku-angle-v1-s03
Example: `hydration-stick-energy-v1-s03`.
Then match that everywhere:
- Storyboard row label
- Generated file name
- Exported cut timeline marker
- Feedback comments (“Replace s03, keep s04”)
A simple production handoff package should include:
- The storyboard table (locked after approval)
- Any brand assets (logo files, end card, product packshots)
- Offer details (discount, guarantee language, URL)
- Platform targets (TikTok, Reels, Stories) and safe-zone rules
- Output specs (1080x1920, file format, max length)
This is the moment you pass the baton to the pipeline stage that turns a finished storyboard into raw generations and edits. If your team is building a lean system around that, the next step is described in an AI video production pipeline for lean marketing teams.
One last contrarian note: a storyboard that’s this specific can feel “too controlling” to people used to loose creative direction.
That’s the point. Paid social is not a short film. If a shot cannot be described in one sentence that a generator or an editor can execute, the script is wrong, not the storyboard.
If you want to take your locked storyboard and generate consistent UGC-style ad variants fast (including AI avatars in 29 publicly listed languages), you can build straight from that table inside EzUGC.
Frequently asked questions
Direct answers pulled into the page to improve answer-first relevance and scanability.
Written by
Ananay Batra
Founder
Founder & CEO - Listnr AI | EzUGC