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.
Latest cut — sequential, one shared setnew
720×1280 · 40s · five clips · $2.00
One dog per shot, straight cuts
- 0–8sThe claim. A humanoid robot will be the best-selling product of all time.
- 8–16sThe reframe. Every house already has one. You are describing us.
- 16–24sSecond-order. It does not eat. The floor economy goes to zero.
- 24–32sThe counter-number. The actual best-seller is the tennis ball.
- 32–40sTerritory. Losing on substance, escalating to the couch.
Every line answers the same claim, each in its owner’s analytical style. The whole thing was generated and assembled through three API endpoints with no local video tooling — and every spoken line was transcribed back afterwards and matched against the script word for word.
Preparing the plate
what an owner actually uploads
the same dog, on the house set
A reference photo carries its own background, and that background fights the scene description — one clip inherits the sofa, the next invents a different room. So the animal and the set are separated: one studio image is generated once, and every pet is composited onto that same set before it is ever used for video. Coat, blaze, eyebrow points and paws survive; the recliner and the bookshelf do not.
Earlier cut — the 2×2 grid
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, then the pet is composited onto the house set. 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, then the clips are stitched with captions and branding burned in — all through the API, no local video tools.
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 one take out of the previous take’s final frame is the only mechanism that reliably carries a character across a cut. Measured: the seed frame, the seeded clip’s first frame and the same clip seven seconds later share one wrinkle pattern, one eye patch, one microphone. A shared background reference cannot do this, because it does not lock the animal.
- The cheap model refuses reference images outright. Passing a plate as a reference returns referenceImages isn’t supported by this model on the lite tier. It is accepted two tiers up, where it does reproduce the set faithfully — at double and eight times the price. A start frame, by contrast, works on every tier. Two mechanisms that look interchangeable and are not.
- Separate the pet from the set. A reference image imports its background along with its subject. Compositing every character onto one generated set first is what stops the room changing between shots.
- 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 tier | 8s clip · reference images? |
| veo-3.1-lite | $0.40 · rejected — start frame only |
| veo-3.1-fast | $0.80 · accepted, binds the set to the plate |
| veo-3.1 | $3.20 · accepted |
| Generation time | 41–62 seconds, whatever the tier |
| This 40s short | $2.00 — five clips on the lite tier |
| Recommended mix | $2.40 — open on the fast tier to lock the set, seed the rest on lite |
Still rough
Honest state of play. Coat colour drifts during animation even when the plate is correct — a chocolate bulldog plates properly and then renders closer to standard fawn. On the lite tier the set is carried by prompt text alone, so it stays consistent between clips but drifts away from the plate it was supposed to match. Coined words give the model trouble, and dense lists of proper nouns need splitting across takes rather than crammed into eight seconds. Cuts are hard cuts; there are no crossfades yet.