I built AI Zombie, a web app that turns two photos into a 15-second zombie love story with sound.
The story starts with a survivor facing someone they care about who has become a zombie. Instead of shooting, the survivor lowers the weapon and opens their arms. The zombie approaches, they embrace, and the scene cuts to a warm memory of them together.
You can use photos of two people, or make your dog or cat the zombie and keep yourself as the human survivor.
How it works
- Upload a photo of the person or pet who becomes the zombie.
- Upload a photo of the human survivor.
- Choose a cabin, city, or chapel setting, and a portrait or landscape format.
- Start the generation, then watch and download the finished video from My videos.
The output is a 15-second, 720p MP4 with audio. The homepage includes example videos if you want to see the style before creating one. Generation uses paid video credits.
Giving the model a specific story
I kept the generator focused on one short narrative. You choose the characters and setting; the app supplies the sequence of shots.
In the implementation, I build the video prompt around timed story beats: recognition, the survivor's decision, the approach, the embrace, and the memory. The transition is the part I care about most. I ask the model to keep the characters in the same positions across the cut, so the embrace connects the present to the memory.
The pet version needs different instructions. I ask for a natural four-legged trot and a short jump that fits the animal's size. The prompt also specifies that the model should preserve the pet's markings and species rather than give it human limbs or gestures.
These are instructions to the model, rather than guarantees. Faces, motion, and sound can vary between generations, and the model may miss a detail in the intended sequence.
A few implementation details
I built the app with TanStack Start and React, running on Cloudflare Workers. I use D1 for generation records and R2 for media storage. The video generation itself runs through an external API.
A generation takes longer than a normal page request, so I store it as a job. The UI shows its status while the backend handles submission and completion. Users can return to their video history to find the result.
I also use a request ID to handle repeated submissions. If a user retries the same request, the backend returns the existing job instead of creating another one. That matters when each generation consumes a paid credit.
I'd like your feedback
You can see the examples and try the generator at aizombie.online.
I'm interested in whether the story makes sense when you watch it, and whether the upload flow makes the two character roles clear. If you're building an image-to-video app, I'd also like to hear how you handle continuity between shots.
Top comments (1)
@jy_wang_2c4d36f4d66adea80 , this is such a creative and brilliantly executed concept! the "zombie love story" with a pet option is an incredibly unique hook that immediately stands out. 🧟♂️❤️
from an engineering perspective, your stack (tanstack start, cloudflare workers, d1, r2) is a masterclass in lightweight, scalable architecture. it perfectly mirrors the constraint-driven philosophy i use for koda: keep the backend lean, fast, and cost-effective.
but the absolute best technical detail here is your use of a request id to handle repeated submissions and prevent duplicate paid generations. implementing idempotency for paid api calls is a senior-level pattern that so many devs overlook until their wallet takes a hit.
regarding your question about continuity between shots: since video models struggle with temporal consistency, your approach of feeding timed story beats and explicit positional constraints (like "keep characters in the same positions across the cut") is exactly the right prompt-engineering workaround. another trick some devs use is passing the first frame of the next shot as the last frame of the current shot to force latent space alignment, but your narrative prompt structure sounds much more elegant for this specific use case.
fantastic work! the upload flow sounds very clear, and i love how you've structured the generation job. checking out aizombie.online now! 🐯🎬