Technical demo
Your pet has opinions.
Upload a photo, pick something being argued about online, add your own director notes — and get a short video of your pet weighing in. This page documents how it is built.
Dog-In Podcast — full cut
720×1280 · 48s · h264 + AAC · 19 MB
Three segments, ten generated clips
- 0–8sCold open. Butcher alone, full frame.
- 8–16sRoll call. The grid assembles; three listen while one talks.
- 16–48sThe topic. Each dog takes a turn on the same argument.
The first two segments are fixed furniture — they carry over to every episode untouched. Only the third is written fresh, so a new short costs four generations rather than ten.
The two takes behind one tile
idle B-roll · 8s · reused every episode
The idle take is seeded from the last frame of the speaking take, which locks the same dog, room, lighting and framing — not merely a similar-looking room. Without it the listeners stare blankly; with it they blink, tilt, scratch and yawn, and the grid reads as a real call.
How it is made
01The photo
Breed, coat colour and markings are described in words. Naming the breed explicitly carries the likeness further than image resolution does.
02The topic
A real discussion — a thread, a podcast clip, an argument. The claim being made is preserved; only the stakes change.
03Director notes
The owner supplies the attitude. Loud and self-important, or flat and unimpressed. This is what makes it sound like their pet.
04The render
Each character is generated alone, twice — speaking and idle — then composited into one grid with captions and branding.
Notes from the build
- Native generation beats lip-sync retrofitting. Post-hoc lip-sync tools are trained on human faces and track landmarks a muzzle does not have. Generating the animal already talking sidesteps the problem — the single most important finding so far.
- Composite, do not ask for a crowd. Prompting one model for four characters on a call rendered the same dog in every panel. Four separate generations tiled in post gives four distinct dogs and exact control over who speaks when.
- Names belong in captions, not dialogue. The model refuses to speak real people’s names outright. Drawing them into the caption layer is reliable, unrestricted, and free to change — and puts more of the joke on screen than the spoken version managed.
- Seed continuity from the last frame. Growing the idle take out of the speaking take’s final frame guarantees an exact match. A shared background reference cannot, because it does not lock the animal.
- Every line is transcribed back and checked. This caught a take where one character had absorbed another’s line, and two takes where a list of names came out as mush.
- Do not write stage directions the model can read aloud. Dashes added to force pauses were spoken as filler words. Punctuation is not direction.
- Remux before publishing. Model output puts the moov index at the end of the file, so a browser shows a blank player until the whole thing downloads. A lossless faststart pass moves it to the front.
What it costs
| Model | veo-3.1-lite, 720p, native audio |
| Any 8s clip | $0.40 |
| Generation time | 41–62 seconds |
| This 48s short, from nothing | $4.00 — ten clips |
| Each additional episode | $1.60 — four new lines; intro, cast and idles are reused |
Still rough
Honest state of play. Coined words give the model trouble — “okayest” lands somewhere between okayest and okay-us. Dense lists of proper nouns need splitting across takes rather than crammed into eight seconds. And every clip is a fresh roll of the dice: coat colour drifted tan-heavy on one early take and had to be regenerated.