Durian Lamp
31 Aug 2026

It started with a simple problem: my girlfriend was coming to visit for a four-week holiday and my bedroom can get pretty dark at night, so I wanted to get her a small night lamp. I could buy one, of course, but where's the fun in that? So I decided to make one myself.
The next question was what it should look like. My girlfriend loves durian fruit, and me not so much, especially the smell of it. Whenever she buys one, I feel like I can smell it everywhere. So I thought a lamp in the shape of a durian could be the perfect solution for both of us.
The first durian#
The idea was fairly simple: 3D-print a translucent durian, put an addressable LED strip inside and control it with an ESP32 running WLED.
I initially experimented with placing the LEDs vertically inside the lamp, similar to what I did with my word clock. But that required a lot of cutting and soldering. Instead, I found that I could just wrap one continuous LED strip horizontally around a central column. It was much easier and actually gave a better effect as well.
When my girlfriend arrived, she liked the lamp, but as a durian lover she had some suggestions. And she was right. The shape could use some better grooves and the stem didn't look quite right. After changing those, it started looking much more like an actual durian.
She was very happy with the result and showed it to her mom. Her mom wanted one too, but a smaller version. That led to a second design: a mini durian made to fit a simple LED tea light. So before I'd even finished improving the original lamp, it had already produced a smaller spin-off.

An experiment with AI-generated 3D modelling#
The durian was also my first project where I used AI for most of the 3D modelling instead of designing everything myself in Fusion 360. I took it a bit further than simply asking AI to generate a model. I built a Three.js web interface around it where I could configure the durian before exporting it.
I could change the overall size and height, choose between different power inputs, change the spike height and number of spikes, and configure different options for the base, such as USB-C or a regular power input. Everything scaled automatically.

At first, this felt great. I was able to get something fairly complex working surprisingly quickly. I printed it and, even better, the dimensions were right. The stem fitted, the power connector fitted and all those configurable parts actually worked.
Then I needed to start making changes. That's where it became much less fun. Giving AI precise instructions for changes to an existing 3D shape turned out to be much harder than creating the initial version. Once I started printing more versions, I also discovered problems that weren't immediately obvious in the model.
For example, some parts of the shell didn't have a consistent wall thickness, which eventually caused printing problems. It was an interesting experiment and I'm glad I tried it. It showed me how quickly AI can help create a configurable 3D model and even build an interface around it.
It also convinced me not to use this approach again for a model like this. For something I expect to keep modifying and refining, I'd rather go back to Fusion 360 and have full control over the geometry.
Then I broke it#
The physical design was getting better, but the electronics were still very much a prototype. One day I took the lamp into the kitchen to try it out. The resistor connection on the LED data line came loose and the first LED in the strip stopped working.
Annoying, but it taught me a good lesson. If I wanted this to be an actual lamp rather than an electronics experiment sitting next to my bed, I needed to make the inside as reliable as the outside. That's when a simple night lamp started turning into a much bigger electronics project.
Version 1: The prototype#

The first electronics were about as simple as I could make them. An ESP32 running WLED controlled the addressable 5 V LED strip, with a 330 Ω resistor between the ESP32's data output and the LED strip. Power came from a regular 5 V USB supply. The LED strip was wrapped around the central column inside the lamp, with the ESP32 and wiring hidden inside the base.
It proved that the concept worked, but the loose wiring and soldered connections weren't something I wanted to rely on permanently. Breaking the data connection made that very obvious.
There was also another small problem: the lamp could only be controlled through WLED using the app or a browser. That's not very convenient when you're lying in bed in the dark and just want to turn on a lamp.
Main parts:
- ESP32
- 5 V addressable LED strip
- 330 Ω data resistor
- 5 V USB power
- 3D-printed translucent shell, base and column
Version 2: Moving to perfboard#
For the next version, I wanted the electronics to feel less like a prototype. I moved the connections onto perfboard and added a 1000 µF capacitor across the LED power supply. More importantly, I changed the power distribution.
Instead of sending the LED current through the ESP32 board, the incoming 5 V supply was split so the ESP32 and LED strip each had their own connection to the main power rails. That gave me a much cleaner power path and meant the ESP32 wasn't being used as a power distribution board for the LEDs.
I also wanted a physical way to turn the lamp on and off without having to find my phone in the dark. So I cut the USB power cable and added an inline cord switch.

It worked well, but there was another problem. Pretty much everything was soldered together. The board lives inside the central column, so getting it in and out means pushing and pulling the electronics through a fairly small space. Eventually I broke one of the wires while doing that.
That made the next improvement pretty obvious: instead of soldering everything permanently together, I wanted the individual parts to be removable and replaceable.

Main changes:
- Perfboard instead of loose connections
- 1000 µF capacitor
- Dedicated 5 V and ground rails
- Separate power branches for the ESP32 and LED strip
- 330 Ω resistor retained on the data line
- Inline cord switch for physically turning the lamp on and off
Version 3: Making it smaller and cleaner#
The first perfboard worked, but it was larger and messier than it needed to be. Everything was also still soldered together and couldn't easily be disconnected. So I made another one.
The goal wasn't really to change how the lamp worked. I wanted to improve the physical design of the electronics: shorter connections, better component placement and a more compact board that was easier to fit inside the base and easier to remove again.
This was also where I started thinking less about simply making a working circuit and more about making the electronics into an actual module that could be removed, repaired or replaced.
I liked this version a lot more, but there was still one part I didn't trust. The USB-C connector was mounted directly onto the perfboard. I secured it with hot glue, which worked, but every time I plugged or unplugged the USB cable I could feel that this would probably become the next thing to break with heavier use.

Main changes:
- Smaller perfboard
- Cleaner component layout
- Shorter wiring
- More compact power distribution
- Easier to fit inside the lamp base
- More focus on making parts removable
Version 4: Moving USB to the enclosure#
There was still one weak point: the USB connection. The USB-C power connector was attached to the perfboard itself and glued into position. Every time the USB cable was plugged in or removed, some of that force ended up being transferred to the board.
It worked, but I didn't trust it as a long-term solution. For the next version, I separated the USB connector from the electronics completely. The USB-C input is now mounted directly into the wall of the 3D-printed base. From there, two wires carry 5 V and ground to the internal perfboard.
That means plugging in the lamp puts the mechanical stress on the enclosure instead of the electronics. I also changed the rest of the board with repairability in mind. The wiring now uses JST and JST-PH connectors where possible, so parts can be disconnected and replaced instead of being permanently soldered together. The ESP32 itself is removable as well.
I deliberately put much of the wiring on top of the perfboard too. It's not quite as hidden, but it makes the connections much easier to see and understand when I need to work on it.
Finally, I added a resettable fuse to give the power input some extra protection. At this point, the perfboard had gone from being a place to solder some wires together to becoming its own removable controller module.

Main changes:
- USB-C connector mounted in the enclosure
- Separate wires from USB input to the perfboard
- No mechanical load from the USB cable on the circuit board
- JST and JST-PH connectors for removable components
- Removable ESP32
- More visible and easier-to-follow wiring
- Resettable fuse
- More modular internal electronics
- Easier to remove, repair or redesign the controller later
At this point the electronics were basically finished. So naturally I grabbed an ESP32 Mini to make an even smaller version.
No. Finish the lamp.

At least it was a quick test, and I got to enjoy the modularity paying off.
One more problem: heat#
With most of the electronics finally in place, I noticed one more thing during testing: the ESP32 was getting a bit warm inside the column.
My first thought was that it might somehow be related to the LED strip drawing power. Since the ESP32 and LEDs now have separate power paths, I wanted to make sure something wasn't still causing extra load on the board.
So I tested it with the LEDs running and with them completely off. As far as I could tell, the LEDs weren't the cause. The ESP32 still warmed up without them. The more likely problem was much simpler: I had put an ESP32 inside a fairly small, almost completely enclosed 3D-printed column.
So instead of changing the electronics again, I changed the print. I redesigned the column to add more ventilation around the ESP32, allowing heat to escape instead of getting trapped inside.
It's another small thing I probably wouldn't have thought much about when building the first prototype, but something that became obvious once I started treating the lamp as something that should be able to run reliably for longer periods. I like this solution as it’s also saving some filament.
The video created another problem#
Somewhere along the way I made a durian song with Suno, called Durian everywhere. It was too good not to share, so now I needed to make a video.
For the video I gathered all the different durians I'd made and carried them around the house to set up different shots. That exposed another design flaw very quickly: the top shell kept falling off the base.
Until then it hadn't bothered me much. The lamp normally just sits in one place, so gravity was doing a perfectly acceptable job of holding everything together. A video shoot apparently has different requirements. After repeatedly picking the shell up from the floor, I redesigned the internal mechanism and added a proper snap-fit between the shell and the base.
The complete lamp can now be picked up and moved around as one piece without leaving half the durian behind. Yet another problem I probably wouldn't have discovered if I'd simply left the lamp sitting on the nightstand.
Current setup
The lamp currently combines:
- ESP32 running WLED
- 5 V addressable LEDs wrapped around the internal column
- 330 Ω resistor on the LED data line
- 1000 µF capacitor across the LED power supply
- Resettable fuse
- Perfboard-based power distribution
- Separate power paths for the ESP32 and LEDs
- Enclosure-mounted USB-C power input
- JST and JST-PH connectors
- Physical control button
- 3D-printed translucent durian shell
- Redesigned durian stem, grooves and shell details
- Snap-fit connection between the shell and base
- Ventilated internal column for the ESP32
Almost finished#
It's quite a long way from the simple night lamp I originally planned. The lamp itself is essentially there, but I'm still making some final improvements before I consider it finished.
I'm currently experimenting with printing the internal column upside down. This uses less filament and avoids supports, but required some geometry changes to make it printable. The first attempt technically worked, but ended with a bit of spaghetti inside. Nobody would ever see it and the lamp would still work, but I know it's there, so I want to fix it.

The changes also mean my latest perfboard and ESP32 assembly doesn't quite fit anymore. On the upside, the new design should eventually give me better ventilation, better placement of the electronics and use less filament.
The slightly ridiculous part is that all of this is actually phase two. I still want to release a simple version first using just the Bambu LED strip and controller, with no ESP32, WLED or soldering. The ESP32 version will be the follow-up for anyone who wants to experiment a bit more. So I'm already redesigning phase two of a project whose phase one I haven't even published yet. For me, it's finished when both versions are tested, the video is done, and the files are available for free on MakerWorld.
Until then, this page remains a snapshot of a project that is still getting its last few unnecessary improvements.


