
Table of Contents
Hey all, happy Friday.
James turned 1 this week!
One year old. 365 days of keeping a tiny human alive. Maddie greeted him with balloons in the morning, and he went absolutely nuts: like a golden retriever discovering the ocean for the first time. Full chaos mode.
Then we brought him to school, where they sang happy birthday to him.
And yet, he was completely stone-faced during the song. Just staring at everyone. Unblinking. Like a tiny mob boss receiving tribute.
But once he got into the classroom and saw the banners and his little birthday throne surrounded by all the other kids? He settled into it like he'd been waiting his whole life for this moment. I think we may have a problem.
Sunday is his birthday party at Brooklyn Bowl for Prince for Kids. Yes, the little prince gets to see Prince. He's a Brooklyn Bowl veteran at this point: Grateful Dead for Kids, Beatles for Kids. The kid has better taste than most adults I know 😉.
Anyway. Let's talk about making your static ads move.
The Problem Everyone Has
You've got a static ad that's performing. Creative team nailed it. Fonts are beautiful. Copy is dialed. And then someone says: "Can we animate this?"
Normally, this means:
Opening After Effects
Three rounds of revisions
Your designer silently plotting your demise
The font somehow becoming Comic Sans in the process
Or you could do what I've been teaching in the cohort sessions: use AI to handle it in about 15 minutes while keeping everything intact.
Here's the exact workflow.
How This Actually Works
The core insight that makes this work: you're not asking AI to animate your ad. You're creating a start frame and an end frame, then letting AI interpolate between them.
This is the difference between "please animate this ad with steam rising" (chaos) and "here's frame 1, here's frame 2, connect them" (control).
Your static ad is one of those frames. You just need to create the other one.

Original Static

Animated Static
Step 1: Ideate + Get Your Frame Prompt
Upload your static ad to ChatGPT.
Yes, ChatGPT. I know. I'm a Claude guy for everything else.
But ChatGPT does a much better job reverse-engineering images, and—this is crucial—it can actually read GIFs. Claude looks at a GIF and just sees the first frame. Gemini does the same thing. ChatGPT will analyze the actual motion, which matters later when you're iterating.
Use this prompt:
I want to animate this static ad.
Give me 5 animation concepts. For each one, tell me:
1. Is my static the START frame or the END frame?
2. What does the other frame look like?
3. What happens between them?
4. A Nano Banana prompt to create the other frame
5. Why this motion works for the product
Rules:
- All text stays frozen throughout
- No camera movement
- 3-4 seconds maxWhat you get: Animation concepts + the Nano Banana prompt to create whichever frame you're missing.
Why ChatGPT? I use Claude Projects for everything else. But ChatGPT does a much better job reverse-engineering images. It's the one exception.
Example:


Step 2: Create the Missing Frame
Take the Nano Banana prompt from Step 1. Run it. Iterate until it looks right.

Now you have both frames.

Start Frame

End Frame
A few notes here:
Don't iterate too many times. Every pass through Nano Banana degrades the image slightly. Cap yourself at 3-4 iterations. If it's still not right, go back to the drawing board with a fresh reference instead of compounding errors.
If the product looks wonky, don't keep tweaking prompts. Upload the actual PDP render alongside your image. Tell ChatGPT "here's what the product actually looks like" and have it regenerate the prompt. This fixes 90% of warped products, wrong proportions, and mysterious logo disappearances.
Use contextual clues for scale. If your product is too big or small relative to a hand or face in the image, tell the prompt to use those elements as reference points. "The can should be about the size of her hand" works better than "make the can smaller."
Step 3: Get the Veo JSON Prompt
Go back to the SAME ChatGPT window (it already knows your context). Upload both frames.
Use this prompt:
Here's my start frame and end frame.
Give me a Veo 3.1 JSON prompt that animates between them based on the concept we discussed.
Rules:
- All text frozen
- No camera movement
- Resolves cleanly into the end frameWhy same window: ChatGPT already has the context—the concept, the logic, what's supposed to move. You're not re-explaining anything.
Important: Make sure all the copy from your ad is actually in the JSON prompt. 9 times out of 10, when fonts get mangled, it's because the text wasn't explicitly preserved in the prompt. ChatGPT is actually good at recognizing fonts and colors from images: use that.


Step 4: Animate
Run the JSON in Veo 3.1 Fast. Generate a few variations.

Pro tip on where to run this: You can use Fal.ai or Higgsfield, but those get expensive. I use Flow (Google DeepMind's platform) for $250/month, with unlimited Veo 3.1 access. For the volume we're doing, it's a no-brainer.
Set it to Fast/Lower Priority. I've literally never seen a difference between Fast and Quality. Zero credits vs. 100 credits for identical output. Always do Fast.
Generate 4-8 variations. Usually at least one is usable on the first pass.
Step 5: Iterate
If it's off, go back to the same window.
Download the output as a GIF. Upload it to ChatGPT. Say "here's what I'm getting" and describe the problem:
"The logo disappears"
"Her arm is doing a weird dance"
"The can grows to the size of a small child"
"I want a sand crab to emerge from the sand" (actual request from last week's session)
ChatGPT will update the JSON prompt. Run it again.
This is the whole reason we use ChatGPT in this workflow: it's the only model that can analyze GIF motion and provide useful feedback on what to change.
The Stuff That Goes Wrong (And How to Fix It) -
🛟 Save This!
Warped products: Upload the PDP render. Always.
Disappearing logos: Make sure the logo is explicitly mentioned in the JSON prompt.
Wrong proportions: Use elements in the image as reference points. "The bottle should be 1.5x the height of her hand."
Fonts turning to mush: Include all copy verbatim in the prompt. ChatGPT is surprisingly good at matching fonts if you give it the actual text.
Quality degradation: You've iterated too many times. Start fresh with the original reference.
The hand/arm does something weird: This is just Veo being Veo. Generate more variations or simplify the motion concept.
Why This Matters
Meta's Andromeda update wants creative diversity. The old playbook of running the same ad with some text changes isn’t it anymore. But nobody has time to produce 47 unique videos per week.
This workflow turns a single static image into an animated version in 5-10 minutes. Without touching After Effects. Without bothering your designer. Without the font mysteriously becoming Papyrus.
The AI tools are only as good as how creative you are with them. They can't invent good animation concepts: that's still your job. But once you know what you want? They can execute it faster than any traditional production workflow.
The Quick Version
Ideate: Upload static to ChatGPT, get animation concepts + Nano Banana prompt
Create missing frame: Run prompt in Nano Banana, iterate (max 3-4x)
Get JSON prompt: Same ChatGPT window, upload both frames
Animate: Veo 3.1 Fast in Flow, generate 4-8 variations
Iterate: Download GIF, upload to ChatGPT, describe problems, get updated prompt
Start frame + end frame + JSON prompt = video that doesn't break your brand.
Alright, I need to go dig my car out of a snowbank so a one-year-old can see a Prince tribute band.
Have a great weekend.
Will