The Blender series is almost done
May turned into a heavy Blender month. Three posts in the add-on series went live, and I spent an embarrassing amount of time wondering where my render files went — turns out Blender was saving them exactly where I told it to, just not the way I expected.
🆕 NEW THIS MONTH
The Blender Add-on Series: Panels, Properties, and Non-Blocking Renders
The series is building a Blender add-on from scratch using Python — starting from nothing and working up to a complete, installable tool (a render queue). This month covered the pieces that turn a working script into something that actually feels like a tool. First, panels — how to build a proper sidebar UI so your operators show up in Blender's interface where you want them. Then properties — Blender's system for giving your add-on persistent state that survives between operator calls and plays nicely with undo. Finally, non-blocking renders with bpy.app.timers — how to trigger a render from Python without Blender locking up while it runs.
On the retro side:
Why the Game Boy Was Technically Outdated the Day It Launched — And Why That Was Genius When the Game Boy launched in 1989, it was already behind the competition on paper — worse screen, less color, slower CPU. It also outsold everything and kept selling for a decade. This post gets into the hardware decisions behind that, and why "technically inferior" turned out to be exactly right. Read it
💡 SOMETHING I LEARNED
Spent a good chunk of this month confused about where Blender was putting my render files. I'd set up an output path pointing to a folder — something like /renders/my_project/ — hit render, open the folder, and find it completely empty. Checked the path. Looked right. Rendered again. Still nothing in there. Turns out Blender was saving files one directory up, using my intended folder name as the start of the filename. Instead of /renders/my_project/0001.png, I was getting /renders/my_project0001.png. The folder I kept opening was empty because Blender never touched it. The fix is simple once you know it: the output path needs a trailing slash to tell Blender it's a directory, and that directory has to actually exist first. Blender won't create it for you. One-minute explanation. Embarrassingly long to figure out.
🗓️ WHAT'S COMING NEXT
The Blender add-on series is in its final stretch — the remaining posts close out the full build. If you've been following along from the beginning, the end is close. After that, something new: an intro to Raspberry Pi Pico and MicroPython aimed at Python developers. Not a beginner tutorial — this one assumes you already know Python and just want to know what's different, what transfers directly, and how to get something real running on hardware. If you've been curious about the Pico but weren't sure the learning curve was worth it, that's exactly who it's for. --- If you've hit a wall anywhere in the add-on series — something that didn't click or felt underexplained — hit reply. I'd like to know where the rough spots are before we wrap it up. Norm harlepengren.com