A friend runs a small online store and handed me 40 product photos with one request: "can these move?" Doing that one photo at a time, writing a fresh prompt each time, would have taken the whole weekend. So I built a small template system before I opened any photo to video ai generator at all.
This post covers the template that made 40 photos manageable, where I did the actual generating, and a script that stitches the results into one reel.
The problem with animating photos one at a time
The first five photos went fine. By photo six, my prompts had drifted: different lighting language, different camera moves, no consistent mood across a single product line. A viewer would notice the catalog didn't feel like one catalog.
The fix wasn't a smarter prompt. It was one prompt template and a spreadsheet.
A photo to video ai generator is really just the image to video AI case applied to a whole catalog: one photo in, one clip out, repeated forty times. That's the quickest way to animate a photo at the scale a small store actually needs, whether it's an AI product video generator for a shop or a portfolio reel for a photographer. The generator handles one photo fine by default. Forty in one voice is a planning problem, not a prompting problem.
Build the prompt list before you generate anything
I keep one CSV with a filename, a product name, and a mood per photo, and fill the rest from a template:
# build_prompts.py - fill a prompt template from a CSV of photos
import csv
TEMPLATE = (
"Slow {move} on {product}, {mood} lighting, shallow depth of field, "
"cinematic color grade, no camera shake"
)
MOVES = {"hero": "push-in", "detail": "orbit", "lifestyle": "pan right"}
with open("photos.csv") as src, open("prompts.csv", "w", newline="") as out:
reader = csv.DictReader(src)
writer = csv.writer(out)
writer.writerow(["filename", "prompt"])
for row in reader:
move = MOVES.get(row["shot_type"], "push-in")
prompt = TEMPLATE.format(move=move, product=row["product"], mood=row["mood"])
writer.writerow([row["filename"], prompt])
print("wrote prompts.csv")
photos.csv needs only filename,product,mood,shot_type per row. Run the script once and every photo gets a prompt in the same voice, ready to paste in one at a time or hand to a teammate.
A few things kept the catalog feeling like one catalog instead of forty unrelated clips:
-
One mood per product line, not per photo. I set
moodat the product level and letshot_typevary the move. - A short, fixed vocabulary for moves. Three move words, reused everywhere, read as a style. Ten different move words read as inconsistency.
- The template stays boring on purpose. Cinematic color grade and no camera shake are in every prompt because I never want to debate them per photo.
Where I generated: photo to video AI in one workspace
For the generating itself, I used VOKOO, a multi-model AI creation platform built around video. Its tagline is "Create more. Switch less," and for 40 photos with one voice, that consistency mattered more than any single clip. I dropped in a photo, pasted its prompt from prompts.csv, and had a clip to review before I finished my coffee.
Photo in, motion out
The AI video generator turns a photo plus a prompt into a video. Make a video before the idea gets cold. Each row in prompts.csv became one generation.
Fix a weak photo before you animate it
Some of the 40 were low-res phone shots. The AI photo editor and image upscaler let me edit, refine, and make small or blurry images crisp and usable without leaving the flow.
Switch models when one style doesn't fit
The AI agent lets me try different models without rebuilding my workflow. The hero shots needed a different touch than the lifestyle shots, so I split them across two models without changing anything else.
Check the cost before scaling to 40
I can pick quality and generation specs per stage and see the estimated credit cost before I submit. I ran three test photos at draft quality first, then committed to all 40 at the spec that looked right. One place to generate, edit, enhance, and animate.
Turn the batch into one reel
Forty separate clips aren't a catalog video. This stitches them into one reel with a short crossfade between each pair, reading the order straight from your CSV:
#!/usr/bin/env bash
# make_reel.sh - concat clips in prompts.csv order with a crossfade
# usage: ./make_reel.sh clips/ 0.5 (clip folder, fade duration in seconds)
DIR="$1"; FADE="${2:-0.5}"
mapfile -t FILES < <(tail -n +2 prompts.csv | cut -d',' -f1 | sed 's/\.[a-zA-Z0-9]*$/.mp4/' | sed "s|^|$DIR/|")
CHAIN="[0:v]"
FILTER=""
INPUTS=""
OFFSET=0
for i in "${!FILES[@]}"; do
INPUTS+=" -i ${FILES[$i]}"
if [ "$i" -gt 0 ]; then
DUR=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "${FILES[$((i-1))]}")
OFFSET=$(echo "$OFFSET + $DUR - $FADE" | bc)
NEXT="v$i"
FILTER+="${CHAIN}[$i:v]xfade=transition=fade:duration=$FADE:offset=$OFFSET[$NEXT];"
CHAIN="[$NEXT]"
fi
done
eval ffmpeg -y $INPUTS -filter_complex "\"${FILTER%;}\"" -map "${CHAIN}" -an reel.mp4
echo "wrote reel.mp4"
Every filename in prompts.csv needs a matching .mp4 in the clips folder. The script builds an xfade chain in order and writes one reel.mp4.
Keeping 40 generations affordable
The draft-then-commit habit scales linearly: test a few photos at a low spec, confirm the look, then run the rest at the spec you'll actually use. The estimated cost shown before submit is what made testing at scale comfortable instead of anxious.
If you'd like an LLM to write the mood column in photos.csv from a product description, RouteAI provides a cost-effective, OpenAI-compatible API gateway with multiple models, so setup stays simple.
Try this next
A photo to video ai generator handles one photo well by default. Handling forty in the same voice takes a template, not a better prompt written forty times. VOKOO did the generating; the template kept it consistent. Stop managing tools. Start making things.
Here's a short test you can run this weekend:
- Fill
photos.csvwith five real photos and runbuild_prompts.py. - Generate all five and drop the clips in
clips/. - Run
make_reel.sh clips/ 0.5and watch the result. - Check the estimated cost before you scale to the rest of your catalog.
If you want an easy AI video generator that keeps simple AI video creation simple and still leaves room to explore, try VOKOO at https://vokoo.ai.

Top comments (0)