I built CatDance, a small web app that turns a pet photo into an AI dance video. The idea is playful: take a cat, dog or plush photo and make it the star of a short dance clip.
The interesting engineering problem was making the workflow feel simple even though preview and full generation have different costs and capabilities.
One upload, two choices
My first approach separated the free preview and full video too much. That made people repeat work. The current generator lets you upload the photo once and choose the free preview or full version in the same place.
A Google account can try one free 5-second preview. The full version produces approximately 19 seconds at 720p, supports an optional second pet and preset scenes, and starts at $9.90 as a one-time purchase. There is no subscription.
The preview and full version use different models, so the preview is a way to try the workflow rather than a promise of identical final output.
Generation is only half the job
The frontend uses React and TanStack Start, with the application running on Cloudflare Workers. Generated files are delivered through object storage.
One practical lesson: a provider reporting “completed” is not the same as a customer having a downloadable video. The application still has to retrieve the output, assemble the full clip when necessary, attach template audio and persist the final file.
I now treat delivery as an explicit part of the job lifecycle. Errors record which stage failed, retries have a limit, and failed orders return the generation credit. An ambiguous submission should also be investigated before automatically submitting the same paid model request again.
Show the output before asking for a purchase
The homepage includes real input-photo and video examples. For a creative tool, those pairs explain the product better than a long feature list: people can judge whether the result is something they would want to share.
Photo quality and subject identity still matter. A clear image with one visible subject is a better starting point than a crowded or heavily cropped photo. Two-pet replacement is a more demanding task than replacing a single pet, and AI results can vary.
Try it
You can see the examples and use the generator at catdance.app. I am the maker of the product; this is a launch note, not an independent review.
I would be interested in feedback on the upload flow and whether the examples make the free/full choice clear.
Top comments (1)
tr.ee/dev-to