01The principle
Each part of the ad is made by the tool that is best at it, and nothing else.
AI makes imagery and motion
Nano Banana 2 draws the characters, sets and first frames. Gemini Omni animates them. They never write text: AI lettering comes out wrong.
Code makes everything exact
Captions, headlines, prices, the map of Tunisia, the phone, the calendar and the logo are React code in Remotion, pixel-checked, right to left where needed.
The edit makes it human
27 short shots, each cut on a spoken word and snapped to the beat, with a designed sound on every action. That's what stops it from feeling AI-generated.
02Nine gates, one approval first
Every gate ends with something to see or hear. Nothing that costs money starts before the owner approves the script.
- 1
Brief
Offer, audience, CTA keyword, the facts that must be true.
ads/<slug>/brief.mdfree - 2
Script
8 lines on the Hormozi structure, Tunisian Derja, lint at 0 issues, 2-4 hooks. Nothing is spent before the owner says “ok”.
script.mdfreeowner review - 3
Voice
Gemini 3.1 TTS (Sadachbia), 3 takes per line; forced alignment + transcript check pick the best.
8 lines, word timingscents - 4
Timing
27 cuts anchored to spoken words, snapped to the 127.8 BPM beat grid.
timeline.jsonfree - 5
Reference kit
Style frame, character sheets, sets, then one 2K first frame per AI shot. Never any text.
22 images≈ $2.5owner review - 6
Code scenes
Every letter, number, map, phone, chip and caption is React code in Remotion.
pixel-checked stillsfreeowner review - 7
AI shots
Gemini Omni animates each first frame, 720p, at most 2 takes; the best 1-2 s are kept.
16 shots · 31 takes≈ $12owner review - 8
Finish
Sound on every action, shake and punch-ins, grade, render, master −14 LUFS, WhatsApp copy.
QC reportfreeowner review - 9
Publish
Private source repo (LFS) + public page and release.
linksfree
03The system
The voice and the music build a single timing file. Every picture and every sound is placed from it.
04The real timeline of the camera ad
Drawn straight from timeline.json. Yellow shots are AI, blue shots are code. Green blocks are the 8 voice lines, with a tick on every word.
On a phone, scroll the timeline sideways. Hover or tap a shot to see what it shows.
05From one frame to a finished shot
Each AI shot starts from a still composed for it, with the character sheets as references. Omni animates it. The edit keeps the best second or two, and code adds the words.
The thief lifts the cash from the tool belt

Nano Banana 2, 2K, text-free

Gemini Omni, 720p

trimmed, zoomed, code on top
The first frame is composed for the shot: the character sheets keep the technician and the thief on model. Omni animates the theft; the edit keeps 1.4 s of it, zoomed 1.3× onto the action.
Likes and «Prix caméra?» burst out of the phone

Nano Banana 2, 2K, text-free

Gemini Omni, 720p

trimmed, zoomed, code on top
Omni only makes the phone buzz and flash on the dashboard. Every bubble, like and number is drawn in code on top, timed to the spoken words.
The call-out: «CAMÉRAS · ALARMES ?»

Nano Banana 2, 2K, text-free

Gemini Omni, 720p

trimmed, zoomed, code on top
Omni turns the technician toward the viewer and makes him point; the headline slams in code on the word «تركّب», inside the safe top band.
06The cast and the sets
One style frame sets the look: matte clay, one warm key light, chalk-white Tunisian walls, cobalt and one sun-yellow accent. Then the character sheets keep everyone on model in every shot.






…and the 16 first frames, one per AI shot:
















07All 27 shots
A frame from the middle of each shot of the final master, in order.

NIGHT: bullet camera snaps toward us, red strobe, siren

CCTV POV: the masked Boost-button thief sprints across the shop street

freeze frame, red target box locks on the thief, tag BOOST

the thief lifts banknotes from the installer's tool belt while he works

installer hands 3 notes, the thief snatches them; counter 300 DT

phone on the van dashboard buzzing; likes + «Prix caméra?» bubbles burst out

installer slumped on the van bumper among unsold boxes; «0 CLIENT»

on the ladder, turns to camera; «CAMÉRAS · ALARMES ?»

finger on the alarm keypad; 30-second ring

close-up, curious; client cards pop around him

steps off the ladder toward us; headline slam

Tunisia map, chip 1 · PUB CIBLÉE, house and shop pins with shields

villa at dusk: owner closes the gate, glances at the street

night: shopkeeper pulls the shutter down, worried

phone: NOUVELLE DEMANDE

Lead Up call agent on the phone, energetic

stopwatch stops at 4:12, chip 2 · APPEL < 5 MIN

checklist ticks the three questions exactly on the words

calendar fills, chip 3 · RDV CONFIRMÉ

installer walks up to the shop, shopkeeper waves him in

drill fixes a dome camera

handshake at the shop front

hard silence, the stamp hovers

stamp SLAMS 0 DT

kinetic headline builds word by word with the voice

phone: types CAMERA, sends, double ticks

end card: LEAD UP + CAMERA, green button
08Text never comes from the AI
Every word sits in a zone that the platform's own buttons and captions never cover.
- Captions follow the voice word by word: Lalezar with a thick black outline, the active word in yellow, never glued across a pause.
- No word appears twice. When a headline or bubble already shows a word, its caption is hidden.
- Right to left is measured, not eyeballed. French words inside Arabic lines are isolated so they keep their order.
- Numbers are digits on screen (300 DT, 4:12, 0 DT), and spelled out in words for the voice.
- The first frame is the thumbnail: something is lit and readable at frame 0.
09Sound
Half of the feel is sound: a clear Derja voice, a beat the cuts lock to, and a designed sound on every action.
Voice
Gemini 3.1 Flash TTS, voice Sadachbia, directed as “Karim”, a young business owner from Tunis. Takes are checked by forced alignment and a second model's transcript.
Music
An instrumental from Lyria 002, beat-tracked at 127.8 BPM and looped on an exact 64-beat grid, so a cut never lands off the beat.
Sound effects
All synthesized in code, so they're fully owned: siren, CCTV glitch, lock-on beeps, cash rustle, keypad, gate clank, shutter, drill, pops, stamp, impacts.
Mix
Music ducks under the voice, goes silent before the stamp, then everything is compressed and mastered to −14 LUFS with a peak limiter.
10Quality gates
Measured on the published camera master before release.
| Check | Target | Camera ad |
|---|---|---|
| Loudness | −14 LUFS (Meta / Reels) | −14.5 LUFS |
| True peak | ≤ −1.5 dBTP | −2.9 dBTP |
| Video format | yuv420p, BT.709, TV range (plays on every phone) | yuv420p · BT.709 |
| Frame | 1080×1920, 30 fps | 1080×1920 · 30 |
| WhatsApp copy | under 16 MB | 12.3 MB |
| Brightness | average luma ≳ 90/255, lit first frame | 101 · first frame lit |
| Derja script | InfoLab lint, 0 issues | 0 issues |
| Sound review | no masked voice, no harsh sounds | siren, glitch, stamp softened |
11Cost and time
Per ad, on Google Cloud credit. The code, the sound effects and the map are free and reused from ad to ad.
| Step | Model / tool | Volume | Cost |
|---|---|---|---|
| Voice + checks | Gemini 3.1 TTS · Gemini 2.5 Pro | 24 takes | cents |
| Music | Lyria 002 | 2 candidates | cents |
| Images | Nano Banana 2 (2K) | 22 images | ≈ $2.5 |
| AI shots | Gemini Omni (720p, 4 s takes) | 31 takes · 16 shots | ≈ $12 |
| Motion design, captions, render, master | Remotion · ffmpeg (local) | 1,500 frames | $0 |
| Total | about one night, gate by gate | ≈ $15 |

