
Table of Contents
Hey all, happy Friday,
James got sent home from school on Monday with a fever. He was out on Tuesday. He was out on Wednesday. He was out on Thursday. His mood the entire time sat somewhere between "mildly offended diplomat" and "tiny dictator whose tea has gone cold."
My in-laws came over to help during the day, and they basically saved us (thank you, Leni and Mitch!). Maddie and I also booked a babysitter for Saturday so that we can actually sit down and work for a full day. I am genuinely thrilled about spending Saturday at my laptop.
That is the sentence of a man with a one-year-old.
Rewind to last weekend, though, which was great and is also probably the reason this week happened. We took James to his first Mets game on Sunday. He was glued to the field the entire time. He loved Citi Field. He loved the food (the fries are embarrassingly good). He tried to make friends with everyone in a three-row radius. At one point, he clocked a guy's foot-and-a-half-tall margarita and reached for it with the quiet confidence of a man who had already made peace with his choices.
The guy, reasonably, did not want a one-year-old sampling his drink.
Linus update: I have been informed by multiple sources (two, and you know who you are) that Linus may have put on a few pounds since James came along. In his defense, James throws a significant amount of food at Linus from the high chair, and that is the kind of enabling relationship I cannot, in good conscience, intervene in.
Anyway,
A few months ago, I wrote a whole newsletter on a 5-step workflow for animating statics with Veo 3.1. ChatGPT for ideation, Nano Banana for the missing frame, JSON prompt back into ChatGPT, animate in Veo Fast, iterate by uploading the GIF. It worked. I stand by it.
Seedance 2.0 (ByteDance’s newest image-to-video model, just landed on fal.ai) is twice as expensive per generation as Veo.
However, the same brief I’d been running on Veo all week, same starting image, ran it through Seedance just to see. Veo’s output was the kind of glitchy half-thing you delete and pretend you never made.
Seedance was an ad.
The text held.
The product held.
The motion was natural.
I watched it three times, trying to find what was wrong with it.
There wasn’t anything wrong with it.
So I spent the day rebuilding the entire animation workflow from scratch on Seedance 2.0, ran 13 tests across 8 different ads, and figured out the three things that actually matter.
By the end, I had a single prompt I could hand to anyone. You paste it into Claude with your static, and it gives you the exact Seedance prompt to run. No JSON, no code, no After Effects, no “let me know if it works.”
If you are one for skipping instructions when assembling furniture, first off, I can relate. Secondly:
You don’t need to install anything. Everything happens in fal.ai’s website. No terminal, no API key in code, no scripts. Just paste, click, download.
Here’s the whole thing.
What Changed (the short version)
Three things make this a different workflow than what I wrote two weeks ago, not just a model swap.

Seedance 2.0 image-to-video can run with one frame OR two. Veo 3.1 could do this as well, but Seedance does it a hell of a lot better. For example, I would never do a one-frame animation with Veo.
The model preserves on-image text and brand elements WAY better than Veo. The thing that used to fail constantly (headline mangles, logo morph, callout shifts) just holds. Even on long durations.
It has its own failure modes, and you have to know them or you’ll waste credits. I’ll get to those.
The whole workflow I’m about to show you exists because of those three things, plus one more.
I built a single prompt that diagnoses the static for you and automatically writes the right Seedance prompt.
You don’t have to know which flow to pick. Claude picks it for you.
The Two Flows
Before we start the workflow, please note the two paths Seedance provides. They use different inputs and different prompt styles.
Flow 1, Single-frame (image to video)
You give Seedance one image and a motion prompt. It animates from that frame for about 5 seconds.
Best for: independent motion.
The subject moves but doesn’t go anywhere new. Bear runs in place. Particles drift. Hair sways. Gradient blobs breathe. Light pulses. UI breathes. The composition at the end isn’t fundamentally different from the start.

Teddy

Lose those lbs!
Flow 2, Start + End Frame (image + end-image to video)
You give Seedance TWO images. The original static, and a separate end-frame image. It interpolates between them for about 5 seconds. The end frame is what the ad looks like AFTER the action.
Best for: state changes. Text swaps. Slider moves. Popups dismiss. Objects appear or disappear. Products rotate. Layouts reveal. Anything where the end of the clip is fundamentally different from the start.
Example: A finger clicks the “Okay” button on an iOS popup, the popup dismisses, then a hand reaches in and lifts a sunscreen tube out of the array. Two clips chained together.
None of this is possible with Flow 1 alone.

Juicy!

Extra Juicy!
How To Pick The Workflow

Honest decision rule: if you can describe the desired result without saying “by the end, X looks different,” use Flow 1.
If you can’t, use Flow 2. You don’t actually have to think about this. The prompt I’m giving you below picks for you and writes the right output. But it’s useful to know what each flow is doing under the hood.
The Setup (one time, about 60 seconds)
You only need a free fal.ai account. Skip this if you already have one from previous newsletters.
Go to fal.ai and click Sign Up (top right).
Sign in with Google, GitHub, or email.
That’s it. Fal gives you starter credits on signup.
Each Seedance generation runs $0.50 to $1.00 depending on duration. Each Nano Banana end-frame generation runs about $0.10. The starter credits cover several full workflows.
I don’t like Higgsfield, I think they are scammers and dishonest, but do you boo.
The Prompt
Paste it into Claude (claude.ai or Claude Code) along with your static.
Optionally (but not really optional. Have your own thoughts. Critical thinking people!) add a line ABOVE the prompt with your own animation idea.
Like “My idea: I want the bottle to spin and fill with liquid.” If you don’t have an idea, leave that line out, and Claude will brainstorm on its own.
Claude reads your static, figures out what kind of motion it needs, picks Flow 1 or Flow 2, and writes the executable prompt(s) you’ll paste into fal.ai.
What You Do With The Output
Claude responds with sections 1 through 8. The important parts are 6 (the pick) and 7 (the executable prompt). Section 7 has either ONE prompt block (Flow 1) or TWO prompt blocks (Flow 2, with an end-frame prompt and a transition prompt).

If Claude picked Flow 1
Drop your static into the Image URL field.
Paste Claude’s prompt into the Prompt field.
Set Resolution to 720p, Duration to 5, and Generate Audio off.
Click Run. Wait 1 to 3 minutes.
Click Download when it’s done.

If Claude picked Flow 2
This is two separate steps: generate the end frame first, then animate.
Step A. Generate the end frame in Nano Banana 2.
Upload your static.
Paste Claude’s end-frame prompt into the Prompt field.
Click Run. Download the end frame.
Look at it carefully. Verify every word from the original is still there. Verify the only change is what you asked for. Nano Banana sometimes drops words or shifts elements. If you see any drift outside the intended change, regenerate before continuing. End-frame quality is the bottleneck for this whole flow. A bad end frame produces a bad video, no matter how good your transition prompt is.

Step B. Run Seedance with both frames.
Drop your static into the Image URL field.
Drop the end frame you just generated into the End Image URL field.
Paste Claude’s transition prompt into the Prompt field.
Set Resolution to 720p, Duration to 5, Generate Audio off.
Click Run. Wait 1 to 3 minutes. Download.

That’s it. Three places where you have to actually look and decide:

TLDR
Seedance 2.0 image-to-video on fal.ai is the new best model for animating static ads. Better text and identity preservation than Veo 3.1, and it supports both single-frame and start-+-end-frame inputs.
Two flows. Single-frame for independent motion (sways, runs, particles, UI). Start + end frame for state changes (text swaps, popups, rotations, object emergence).
One prompt does the diagnosis. Paste it into Claude with your static. Get back the right flow, the executable prompts, and pitfall warnings specific to your ad. Download here: [👉 ACCESS THE PROMPT HERE 👈]
Run on fal.ai’s website. No code, no install. Single-frame: one paste into Seedance image-to-video. Start + end frame: first paste into Nano Banana 2 edit (end frame), then paste into Seedance image-to-video with both frames.
Three places to look with your eyes. Concept pick, end-frame review, final video review. Everything else is automated.
Hard limits to know about: real human faces blocked, numbers distort during interpolation, large rotations go the wrong way, causal physics needs Flow 2.
Alright, I need to go manifest a fever-free Friday morning, put Linus on a light stretch program, and mentally prepare for the most exciting Saturday of my entire year, which, and I cannot stress this enough, is a Saturday at my laptop.
Have a great weekend.
Will
P.S. If you try the prompt on one of your ads, reply with the GIF. I want to see the weirdest thing it produces. The bear-pooping experience taught me that Seedance has range.