Intermediate7 min readFarming

One image, an entire cohort — the clean-plate technique

Generate one shared image. Composite the per-prospect data on top. It’s the same technique cinema VFX has used for a hundred years — and it’s the reason Hybrig can farm an entire cohort of bespoke ads from a single Flux render while cloud tools would charge you per prospect.

The problem you hit at prospect #5

You wrote a great ad. You want to send a bespoke version to every prospect in your cohort — each one named on the vehicle, each one with their ZIP in the on-screen text, each one with their company on the closing card. The naive approach is to re-render the whole spot once per prospect with the right name baked in. That math collapses fast:

  • Cost. Even on free local Flux, 30-60s of GPU per render × hundreds of prospects = hours of GPU time per beat. Per beat. With multiple bespoke surfaces in one spot, you’re looking at half a day per cohort.
  • Variance. Diffusion models are probabilistic. Render the same prompt hundreds of times and you get hundreds of different framings, shadow patterns, vehicle angles. The cohort doesn’t look like one campaign — it looks like a bag of cousins.
  • Text accuracy. Even Flux, which is the best diffusion model at rendering text, misspells names. Render hundreds of versions of a long business name on a vehicle door and you’ll get plenty of mangled spellings. There’s no way to verify without watching every single clip.

The technique — clean plate plus programmatic overlay

Cinema VFX has a term for this: clean plate — a shot of a scene with the subject removed, so the subject (a CGI character, a sign, an explosion) can be composited back in later. The plate is shot once. The composite happens per finished frame.

The Hybrig farm applies the same logic to AI generation. You generate one clean image of a shot — the vehicle with a blank door, the phone with a blank screen, the yard with a blank sign — and then you composite the bespoke data on top programmatically. The Flux render is shared across every prospect in the cohort. The bespoke layer renders in milliseconds and produces pixel-perfect typography every time.

That’s the wedge: AI handles the photoreal hand and phone; code handles the bespoke text. The two halves of the frame play to each tool’s real strength.

Three clean plates in one 60-second ad

A typical cohort spot uses this pattern three times. Each a different surface, same technique:

The vehicle door (early in the spot)

One Flux render of a work vehicle with a flat blank door panel painted matte gray. No logo, no decals, no text. At render time Remotion draws the prospect’s company name on the door in a condensed bold font scaled to fit the panel. A 32-character business name and a 9-character business name both land cleanly on the same plate because the wordmark component auto-sizes.

The text-message screen (mid-spot)

One Flux render of a hand holding a phone with a generic dark screen. No text on the screen. At render time, Remotion composites a programmatic iMessage UI on top of the screen rectangle — authentic iOS chrome with a tinted avatar, the prospect’s first name as the contact label, and the bespoke message in an incoming gray bubble. The avatar tint hashes from the contact name so the same name always gets the same color, but no two prospects share an accent.

The yard sign (closing shot)

One Flux render of a planted yard sign with a blank rectangular face. Same wordmark component that handles the vehicle door composites onto the sign — but the sign is portrait, so the component auto-switches to a multi-line word-stack layout. A long business name stacks across multiple lines on the sign and across one line on the door, and the component handles the orientation switch from one prop.

Three surfaces. Three Flux renders. An entire cohort of bespoke ads. The math isn’t even close to the brute-force approach.

Where the work lives — Remotion and Hyperframes

Hybrig has two compositing systems and they cover different parts of the spot. You don’t pick one or the other — you use both, depending on which beat you’re bespoking.

Remotion CustomizationZone — for in-shot composites

When you’re compositing onto a specific spot inside a beat — a truck door, a phone screen, a sign face — Remotion handles it. You define a rectangle on the clean plate (CustomizationZone) and a React component that fills that rectangle with the bespoke content. Per beat, per surface, per prospect. The component reads prospect props like companyName or decisionMaker and renders accordingly.

Hyperframes — for intros, outros, and chyrons

When you’re wrapping the WHOLE ad with branded chrome — an opening title card, a closing CTA, a lower-third with the contractor’s name and territory ZIP — Hyperframes handles it. Templates have merge tags like {CONTRACTOR_COMPANY} and {CONTRACTOR_ZIP}. The runtime fills the tags from the prospect record and bakes the result onto the rendered video with local ffmpeg. Same clean plate idea — this time the plate is the branded chrome PNG, and the data is what fills the merge slots.

The mental model: Remotion is for compositing INSIDE a shot, Hyperframes is for compositing AROUND the whole video. They share the same clean-plate philosophy — produce one shared visual asset, fill it programmatically per prospect.

When to reach for a clean plate

  • The bespoke content is structured data (a name, a ZIP, a phone number, a price) — programmatic typography wins on accuracy every time.
  • You’re shipping to more than 5 prospects. Below that, hand renders are fine. Above that, the clean plate pays for itself inside the first cohort.
  • The surface receiving the data is geometrically simple — a flat truck door, a phone screen, a sign face. The composite math stays trivial.
  • Brand consistency matters — you want every prospect to see the same shot, just with their data swapped. Variance between renders breaks the brand.

When to skip the clean plate

  • The bespoke content is FREEFORM CREATIVE — a new pose, a new lighting setup, a new wardrobe. Those are diffusion-model jobs. Render them, don’t composite them.
  • The surface is geometrically complex or moves heavily in frame. A reflective curved surface, a hand wrapping around a phone in motion, a flag in wind — programmatic compositing reads as fake on these. Generate the whole shot.
  • You’re shipping ONE prospect only. The setup time for a clean-plate pipeline isn’t worth it for a one-off.

Real screenshots beat AI fakery — with one exception

Hybrig’s locked rule: real video beats real screenshots, real screenshots beat AI stills, AI stills beat Wan I2V, and Wan I2V beats programmatic fakery. That order matters — programmatic fakery is at the bottom because most of the time, an inserted fake number floating over a still feels like a screenshot. It breaks the cinematic frame.

The clean-plate technique is the EXCEPTION. It’s only programmatic when the rendered surface is something that genuinely belongs to the prospect — their company name, their ZIP, their text message. You’re not faking a dashboard metric or inventing a number that doesn’t exist. You’re showing the prospect their own data, on a surface that would actually carry their data in real life. That’s why the technique reads as authentic instead of fake: it IS authentic, just rendered.

The recipe — build your own clean-plate beat

Four steps. Reuse as a template for any campaign.

  1. Pick the surface in your shot that carries the bespoke data. Truck door, sign face, phone screen, business card on a table, a name plate on an office door. Anything flat-ish.
  2. Generate the still WITHOUT the data. Prompt Flux for the shot with the surface BLANK. Use negative prompts to suppress any text the model wants to invent (“blank, no text, no logo, no decals”). Save the single Flux render to public/footage/stills_master/.
  3. Define the composite rectangle. Open the still in any preview tool. Pixel-measure where the bespoke surface sits in the frame. Note top, left, width, height. Add a CustomizationZone to the beat in your Remotion composition with those coordinates.
  4. Write the React component that fills it. Read whichever prospect props you need (companyName, decisionMaker, zip), render with the right typography and color. Test with two prospects — one short name, one long. Adjust auto-sizing so both fit cleanly.

That’s the entire pipeline. The Flux render is a one-time cost. Every prospect after that lands free.