The itch
I love the look of old hand-drawn animation where a character stays perfectly still but the outline keeps trembling, like the linework is breathing. Animators call it "line boil." No pose change, no motion, just the line itself redrawn slightly differently on every frame.
I wanted that effect for some flat line-art assets, but every AI video tool I tried either burned credits regenerating the whole image per clip (with all the consistency drift that implies), or just didn't have this as an option.
So I built a tiny tool that does one job: drop in a PNG/JPG, get back a short line boil MP4, zero AI image or video credits spent, because it's not generative at all.
How it actually works
No AI model touches the pixels. It's a deterministic SVG filter trick, rendered to video with HyperFrames (an open-source render-video-from-HTML framework):
- A handful of feTurbulence + feGaussianBlur + feDisplacementMap filter variants, each with a fixed seed
- The composition swaps between them a few times a second on a paused GSAP timeline
- Low-frequency, single-octave noise smoothed with a blur pass, so the warp reads as a gentle wobble of the existing line, not sandpaper grain, which is what you get if the turbulence frequency is left too high
Because every filter is pre-baked and the swapping happens at fixed timeline offsets instead of Math.random() at render time, the same input always produces the same output, fully reproducible.
The output resolution always matches the source image's aspect ratio, portrait in, portrait out, no forced 16:9 letterboxing.
Demo
Input (plain line art, no color, no shading):
Output (2 seconds, line boil applied):
Wrapping it in an app
The filter logic is maybe 40 lines of HTML and SVG. The tedious part was making it usable without touching a terminal, so it's a small Python and Tkinter app now:
- Drag a PNG or JPG onto the window, or click to browse
- Pick a duration and a wobble intensity: light, medium, or strong
- Pick a save folder once, it's remembered
- Progress streams live in a log box, and it warns instead of silently overwriting a file with the same name
Why this is worth writing up
Nothing here is novel, feTurbulence displacement is an old SVG trick. What I think is worth sharing is the constraint: matching a specific, well-known 2D animation technique with a zero-cost, fully local, deterministic pipeline, instead of reaching for a generative model by default. Sometimes the AI-era answer to "make this feel alive" is a 20-year-old filter primitive and a render loop, not a diffusion model.
— Michelle



Top comments (0)