← Creative Lab
Mondelēz — 2025–2026

Sizzle Video Pipeline

AI storyboards from a spreadsheet, with the real pack composited back in

A spreadsheet-driven AI storyboard pipeline for two CPG campaigns, with a three-stage system that renders the client's actual packaging correctly — the one thing AI alone gets wrong.

33
Beat Lanes Baked
9
Pipeline Tools
3
Stages To A Correct Pack
The hard part

AI look development handles everything except the pack; a deterministic compositing pass drops the real wrapper in, then one masked, low-denoise AI pass melts the seam away.

Client
Mondelēz
Role
Creative Technologist / AI Director Pipeline Development / Brand LoRA Training / Compositing
Timeline
2025–2026
01 · The payoff first

Two delivered cuts

Everything below exists because these shipped.

Oaties — retail sizzlev06 · 1:02 · the 18-beat reel, graded and mixed
Perfect Bar — Low Sugar sizzlev06 · 2:26 · the second sizzle, same pipeline

Note the encodes here are the site's compressed copies; the delivered masters are full-resolution ProRes/H.264. Every beat you'll meet below is visible in these cuts.

02 · The script is a spreadsheet

One workbook is the single source of truth

Sizzle-Prompts-Master, v2 through v6 — seven tabs, from README to Runtime Summary.

Every beat is a row. Every row fans out into five parallel prompts — one tuned for each model family the beat might render through — plus its VO line and duration. Change the row, and every downstream artifact regenerates from it.

BeatModeTitleDurPrompt columns per row
05HEROHero Reveal — pack on a honey-lit pedestal4.0sStage B (QwenEdit, ComfyUI) · Z-Image Turbo + Brand LoRA · Universal cross-model · i2v motion (Kling/Runway/Veo/Seedance/Luma) · VO
02GRAPHICThe Insight — "SUGAR." typographic frame2.5s
12LIFESTYLEFridge Reach3.0s

Real rows, verbatim from the Oaties Master tab. The Runtime Summary tab adds the durations up so the reel length is known before a single frame renders.

03 · Nine tools, built for the job

The pipeline is code, and the code is the deliverable too

ToolLinesWhat it does
bake_prompts.py468Reads the workbook, writes the ComfyUI graph — the 103-node storyboard baker below is its output, not a hand-drawn patch bay.
storyboard.py1,692Gated-approval storyboard tool: assembles review PDFs, tracks approve/reject/re-roll per beat, only approved frames move on.
sizzle.py961Cloud image CLI (fal.ai) — batch renders beats when the job runs remote instead of local.
motion.py1,198Image-to-video CLI. Chain mode interleaves holds with start/end-frame bridges so the reel moves without cuts.
transitions.py461Generates within-clip transition motion prompts.
composite_pack.py679Pack-shot preprocessor — compositing the real wrapper into generated scenes.
make_captions.py202Writes per-image caption files for LoRA training.
make_manifest.py249Builds the manifest that drives the storyboard and motion passes.
build_storyboard_workflow.py349The generic graph generator the baker grew from.
04 · The brand, taught

A LoRA learns the identity before anything renders

oaties-lora-z-image.safetensors — 30 image-and-caption pairs, captions written by make_captions.py.

The Oaties brand visual identity sheet used for LoRA training
The training sheet — palette hexes, lockups, wrappers. The model learns the visual identity, then draws inside it.
A page of the gated-approval storyboard PDF
The approval loop — storyboard PDFs v1 → v7, assembled by storyboard.py; approve, reject, or re-roll a beat.
05 · The graphs, populated

Queue once, the whole board renders

Both graphs below are the live workflows, exported from the running ComfyUI — shown with the frames each lane actually rendered.

Driving it, timelapsed · a full storyboard pass at the controls — prompts drafted through Claude research, the custom Oaties LoRA loaded, previews landing lane by lane until the board is full
The 103-node Oaties storyboard graph, each save node showing its rendered frame
z-image-turbo-lora-storyboard-24-v1 · 103 nodes · 24 frame lanes, 18 beats baked · Z-Image Turbo + brand LoRA · 8 steps
The 67-node Low Sugar Stage A graph, populated with its rendered beats
LowSugar Stage A v3 — brand-voice calibrated · 67 nodes · 15 beat lanes · rebuilt after studying the pack: flat colour fields, the signature pack-atop-ingredients hero, no gradients
06 · The boards

Every lane's frame, straight off the graph

Oaties — 18 beats:

Low Sugar — 15 beats:

These are the raw lane outputs, not retouched picks — the honest state of a board the moment the queue finishes. The versions behind each pick live in the beat boards on the Mondelēz case study.

06b · The approval loop, felt

Rest on a beat — the draft becomes the pick

Every cell starts on an early candidate and melts into the frame that was approved. The distance between the two is the loop doing its job.

Oaties:

Beat 01 draft Beat 01 kept
01
Beat 02 draft Beat 02 kept
02
Beat 03 draft Beat 03 kept
03
Beat 04 draft Beat 04 kept
04
Beat 05 draft Beat 05 kept
05
Beat 06 draft Beat 06 kept
06
Beat 07 draft Beat 07 kept
07
Beat 08 draft Beat 08 kept
08
Beat 09 draft Beat 09 kept
09
Beat 10 draft Beat 10 kept
10
Beat 11 draft Beat 11 kept
11
Beat 12 draft Beat 12 kept
12
Beat 13 draft Beat 13 kept
13
Beat 14 draft Beat 14 kept
14
Beat 15 draft Beat 15 kept
15
Beat 16 draft Beat 16 kept
16
Beat 17 draft Beat 17 kept
17
Beat 18 draft Beat 18 kept
18
Beat 19 draft Beat 19 kept
19

Low Sugar:

Beat 01 draft Beat 01 kept
01
Beat 02 draft
02
Beat 03 draft
03
Beat 04 draft Beat 04 kept
04
Beat 05 draft Beat 05 kept
05
Beat 06 draft
06
Beat 07 draft Beat 07 kept
07
Beat 08 draft Beat 08 kept
08
Beat 09 draft Beat 09 kept
09
Beat 10 draft Beat 10 kept
10
Beat 11 draft
11
Beat 12 draft
12
Beat 13 draft Beat 13 kept
13
Beat 14 draft Beat 14 kept
14
Beat 15 draft
15
Beat 16 draft Beat 16 kept
16
Beat 17 draft Beat 17 kept
17
Beat 18 draft
18
Beat 19 draft
19
06c · The second pass

Same script, newer models

Concept cheap, polish expensive — the local pipeline locked what each beat is, then the approved beats were re-rendered through the newer models (nano banana 2, seedance). Rest on a cell to watch the jump.

Low Sugar — local lane → new-model board, all 15 beats:

Beat 01, local pass Beat 01, new-model pass
01
Beat 02, local pass Beat 02, new-model pass
02
Beat 03, local pass Beat 03, new-model pass
03
Beat 04, local pass Beat 04, new-model pass
04
Beat 05, local pass Beat 05, new-model pass
05
Beat 06, local pass Beat 06, new-model pass
06
Beat 07, local pass Beat 07, new-model pass
07
Beat 08, local pass Beat 08, new-model pass
08
Beat 09, local pass Beat 09, new-model pass
09
Beat 10, local pass Beat 10, new-model pass
10
Beat 11, local pass Beat 11, new-model pass
11
Beat 12, local pass Beat 12, new-model pass
12
Beat 13, local pass Beat 13, new-model pass
13
Beat 14, local pass Beat 14, new-model pass
14
Beat 15, local pass Beat 15, new-model pass
15

Oaties — local frame → the new pass in motion:

Beat 01, local pass
01
Beat 02, local pass
02
Beat 03, local pass
03
Beat 06, local pass
06
Beat 07, local pass
07
Beat 10, local pass
10
Beat 12, local pass
12
Beat 13, local pass
13
Beat 14, local pass
14
Beat 15, local pass
15

This order is the economics of the whole system: iteration happens where frames cost nothing, and the expensive models only ever render beats that already earned their place on the board.

07 · Motion, then hands

The reel assembles, then gets finished properly

motion.py chain drives the video pass from the manifest — holds on the approved frames, start/end-frame bridges between them, so an 18-beat reel cuts like one continuous move. Everything lands in After Effects (oaties_sizzle_v06.aep — 18 beat comps, brand type and endframe, grade and mix), because the last ten percent is still craft: type never generated, grade never guessed.

Competitor storyboard beat before revision
A note, before — competitor beat as generated.
Competitor storyboard beat after ingredient callouts
A note, applied — the same beat after client feedback: name the sweeteners.
The Pack Problem

Generated Pack vs. Composited Pack

The same beat, twice. Left: the generated draft — a plausible box with a garbled wordmark. Right: the approved frame, with the real pack art segmented with SAM 2, auto-aligned, colour-matched, and knitted in with one low-denoise pass.

Generated draft — hallucinated packaging
before
The draft — the model's guess at the pack
Approved frame — real pack art composited in
after
The approved frame — the real pack, composited
Scope

Project Elements

AI StoryboardingBrand LoRA TrainingWorkflow GenerationSAM 2 CompositingSpreadsheet-Driven ProductionBrand Fidelity Systems
Next Project
Norton Neo →

Have a Project in Mind?

Animation direction, VFX and creative technology. Message me on LinkedIn or get in touch.