Figma Asked Me to Pay to Export My Own Animation
Picture this. I've got a stack of SVG frames in Figma, a simple animation I want out as a GIF, and forty-five minutes to spare. What I get instead is a plugin marketplace full of tools that either choke on frame order, watermark the output, or ask for a subscription to do what a for loop should handle for free. I tried three of them. All three made it worse.
So I stopped asking Figma nicely and wrote my own converter. Two hours, one Flask app, zero subscriptions. VectorMorph takes a folder of SVG frames and hands back a clean animated WebP or GIF, in the order you gave it, without losing a pixel to someone else's export queue.
What's Actually Under the Hood
Nothing fancy, which is the point. Flask runs the show, CairoSVG rasterizes each frame to PNG, and Pillow handles the blending and fade transitions between them. That's the whole pipeline.
• Modular code: app.py runs the show, config.py holds the settings, and the file handling and image processing live in their own utility modules instead of one 900-line mess.
• Live progress over WebSockets: Flask-SocketIO streams the conversion status back in real time, so you're watching it work instead of staring at a spinner wondering if it died.
• A conversion pipeline you can actually read: SVG to PNG via CairoSVG, then frame blending and fade transitions via Pillow. No hidden steps, no black box.
Why I'd Rather Own the Tool
This isn't a startup pitch. It's a Flask app that runs on my laptop and does one job correctly. But that's exactly the point: half the SaaS tools I tried were solving a problem that a hundred lines of Python already solves, for free, without a login screen.
Two hours of mild frustration turned into a tool I now trust more than the ones I paid for in attention, if not in cash. Sometimes the fastest way past a broken export menu is to stop using it.