There is a TikTok trend where the camera looks straight down at someone lying on a carpet, a ceiling fan turns above them, and every time a blade sweeps across the lens their outfit changes. I built it as an effect on BlinkPop, a site that turns one photo into the AI video trend of the week. It looked simple. It took three rounds to get right, and the fix was not a better prompt.
The pipeline
Every effect on the site follows the same shape:
- Compose. An image model places the user's photo into the scene: the overhead shot, the carpet, the sofa, the person in outfit one. For the fan effect the user uploads one photo per outfit, so we make one still per outfit.
- Animate. A video model (Seedance 2.0 Mini) turns the stills into a short vertical clip.
The site runs on Cloudflare Workers with D1 and R2. Jobs have two or three steps, and each step's callback starts the next one.
Attempt 1: describe the timing in the prompt
The first version gave the video model the stills and a prompt like "a ceiling fan turns slowly; each time a blade passes the lens, the outfit changes to the next one."
With three outfits, the blade swept past four or five times and the outfit changed on passes one and four. Passes two and three did nothing. The model understood "fan" and "outfit change" but had no idea those two things were supposed to happen at the same moment.
Attempt 2: be more precise
I tried a slower fan, written-out pass times ("a blade passes at 2.5s and 6s"), and fewer words. Six runs, same problem. Sometimes the fan even changed direction halfway through. Text alone could not pin the rhythm.
Attempt 3: show it the rhythm
Seedance 2.0 Mini has a reference mode: besides reference images, you can pass a reference video, and it copies camera, motion and timing from it.
So I made rhythm clips: short cuts of one of our own earlier renders where the fan timing came out right.
- 2 outfits: a 6-second clip with one blade pass at 2.5s
- 3 outfits: a 9-second clip with passes at 2.5s and 6s
The request now sends the outfit stills as reference_image_urls and the matching clip as reference_video_urls. The prompt says to copy the camera, the fan and the timing from the video, take the room, the person and the outfits from the images, and treat the woman in the clip as a stand-in.
Results:
- 2 and 3 outfits: 8 out of 8 correct (man, woman and a dog)
- The user's face was not pulled toward the stand-in in the clip
- The fan kept one direction in all 13 reference-mode runs
- 4 outfits: only 2 out of 4 correct, so the effect stops at three
Reference mode also bills the reference video's seconds plus the output seconds, which works out to about $0.14 to $0.21 per video. That's roughly what the prompt-only version cost.
What I took from it
- Timing is a motion problem, not a language problem. If the result depends on two events happening at the same moment, show the model a video where they do.
- Use your own footage as the reference. The rhythm clips are cut from our own render, not from the original TikTok.
- Cap the feature where it stops being reliable. Three outfits that always work beat four that work half the time.
A few smaller lessons from the other effects:
- When composing two people into one scene, put the user photos first and the scene image last, and say "image 1 stands on the left, image 2 on the right". Otherwise left and right swap often.
- Check the photo before charging (is there a person or pet, is it too dark or blurry). If the check service is down, let the job through rather than block paying users.
- Refund credits automatically on any failed step.
You can try the fan effect and the others at blinkpop.video. New accounts get enough free credits for one video. I'd love to hear how others handle timing in AI video pipelines.
Top comments (0)