cd /news/generative-ai/keeping-a-product-s-label-real-in-ai… · home › topics › generative-ai › article
[ARTICLE · art-169658] src=dev.to ↗ pub= topic=generative-ai verified=true sentiment=↑ positive

Keeping a product's label real in AI video: a tracker with no green screen

Zaqero AI, a startup building short product videos for small businesses, described a production pipeline that preserves product labels in AI-generated video without a green screen. The system passes the original product photo to the video model unmodified, uses a vision model to locate label corners in a frame, and tracks the label across frames with normalized correlation refined to a tenth of a pixel, achieving 0.04-0.05 px RMS shake on a test shot; rather than pasting a new label, it flattens the label region, fits a smooth curve to recover the surface lighting, and refills only the lettering pixels. The team also found the video model's 24 fps output was being rendered at 30 fps, repeating every fifth frame, and now renders at 24.

by read4 min views3 publishedNov 14, 2026

If you make ads for a small brand with an AI video model, the first complaint is rarely the motion or the light. It is the label. A jar comes back with letters that are almost right, a logo that has melted a little, a line of small print that is now a different line of small print. To the brand that is not their product any more. We build Zaqero AI, which makes short product videos for small businesses. This post is about how we try to keep the label theirs: what is in production, what we built and measured on a test shot, and what is still open.

The cheapest fix is upstream. An earlier version of our pipeline "cleaned up" a product photo with an image model before handing it to the video model, setting the product on a plain grey ground. That meant the label the video model saw was already the image model's copy of it.

Now the product photo reaches the video model as it is. We cut the product out of its background and set it on light grey with a margin, keeping every product pixel; when the background is not plain enough to cut, the photo goes in as it is, only turned upright. Nothing is regenerated or restyled on the way. This part is live.

It helps, and it does not solve the problem: the video model still generates every frame, and small print drifts.

After a take comes back, we ask a vision model one narrow question about one frame: where are the four corners of the label (and, for a round thing like a jar, the left and right edges of the jar at the label's height)? It answers in JSON, as shares of the frame.

Code then checks the answer before anything trusts it: four points, inside the picture, a real four-sided shape, and big enough, at least about 1.5% of the frame. If the label is not clearly there, the answer is "not found" and the shot stays exactly as it was generated. That rule runs through everything below: when unsure, change nothing.

The obvious way to follow a label is to key it by colour. On our test jar that failed on the label's own lettering: the key jumped up to 28 px between frames.

What works is following the picture itself. Our patch tracker takes the label region from one reference frame and, on every other frame, searches for the move and scale (and, for things that turn, the rotation) that best match it, by normalised correlation, refining in smaller and smaller steps down to a tenth of a pixel.

Two details mattered more than the search:

On the test shot, a slow push-in on a candle jar, the first version matched the reference at 0.993 on average. The final version, measured on the rendered video against the picture, sits at 0.04-0.05 px RMS of shake, 0.14 px at worst. A track that matches worse than 0.85 at its worst moment is thrown away and the shot left alone.

Our first attempts pasted a new label image over the old one. It looked like a sticker every time: too sharp, too clean, frozen while the real label underneath kept catching the light.

So we stopped painting labels. On each frame we flatten the label region out of the picture, fit a smooth curve through it to get the surface's own light (dark side and bright side), and treat what stands apart from that curve as print. Only the lettering's pixels are filled in, from that same frame's clean surface around them and with its own fine noise. The label's edges, its bow, its light and its grain stay the footage's. Then the new print, if the brand asked for one, goes on in the same place, at the same size and shape. (That is also our rule: a label is edited in place, as it is, never covered by a different one.)

To keep the print from looking pasted on, we measure the shot instead of judging it by eye:

While measuring the shake we found that every video had a stutter we had stopped noticing. The video model returns 24 frames a second; we rendered at 30, so every fifth frame was a repeat. A label tracked to a twentieth of a pixel still looks rough if the footage under it hitches. We now render at 24. This change is live. Plainly:

We will write again when it has run on real videos, with those numbers.

If you are working on the same problem, the two ideas we would keep are: match against one reference, never the previous frame; and lift the old print off each frame instead of laying anything over it.

*Zaqero AI makes short product videos for small businesses from their own photos: [https://www.zaqero.app](https://www.zaqero.app)*
── more in #generative-ai 4 stories · sorted by recency
── more on @zaqero ai 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/keeping-a-product-s-…] indexed:0 read:4min 2026-11-14 · —