About this site

A small tool built by one person: turn a still photo into a looping portrait that breathes and blinks, running entirely on a graphics card at home.

Why build it

It started with a family album. A yellowed group photo at the back of a drawer; the only surviving picture of a grandparent as a young person. You look at it long enough and you start to wonder what it would feel like if they blinked once more, or smiled again. Current image generation models can already do that, but to use one you first have to install Python, install ComfyUI, download tens of gigabytes of weights and learn to wire up a node graph. That barrier isn't a technical problem; it's a "nobody has packaged it" problem.

So this site reduces the whole thing to three steps: pick a photo, pick a motion, wait forty seconds. The prompt wording, output dimensions, looping method and failure guards are already tuned for you.

About the author

I'm William Hsu, a full-stack engineer who builds complete systems from zero to one — product design, architecture, development, deployment and commercialisation. My portfolio is at lazebot.com, with a dozen or so projects including ERP systems, game server infrastructure and AI system integrations.

This is one of the more enjoyable ones: part practical exercise in video generation models, part experiment in taking an awkward technology and packaging it so anyone can use it.

What building it taught me

Most of the work wasn't getting the model to run — it was handling what the real world does to it:

The details are written up in how it works and the guide — both of those pages have more substance than this one.

Three design principles

1. If a choice can be removed, remove it

There is no free-text prompt box — you pick from eleven presets. Not because free text is hard, but because loosely worded prompts sharply raise the odds of something strange appearing. "The photo is a bird, the prompt says the person, so a person appears" is the perfect example. Narrowing the options to combinations we know work has a much higher success rate than handing you a text box.

2. Failure should be legible

When the model does badly, you shouldn't just see "generation failed". Hence the failure cases page, which lays out what each common failure looks like, why it happens and how to avoid it — using clips that were actually generated.

3. Don't quietly do things with people's photos

Everything runs on our own hardware, no third-party AI API is involved, there is no training, no face matching, and files are deleted after seven days. That isn't marketing copy — the implementation details are in how it works.

What's next

If you want something specific, tell me.

See my other work → lazebot.com