Yeah, I've got like 10 build threads going here, so what better time to start a new build thread?

I am making a Soul Cage for Halloween. Right now I'm in the waiting for parts phase. In the meantime, here's the Hackaday article that caught my interest.

https://hackaday.com/2025/09/25/trapped-soul-in-time-for-halloween/

🧵 1/N

#SoulCage #BuildThread #ESP32

Trapped Soul In Time For Halloween

While it is sort of disturbing, it is one of the best uses for a round LCD we’ve seen lately. What is it? Just [vishalsoniindia]’s SoulCage — a pendant that appears to have a poor…

Hackaday

While I wait, I thought I'd try obscuring it by flickering the LCD's backlight on and off. Here's a flickering backlight on a test pattern on the Reaction Diffusion Toy (different screen, same MCU).

🧵 2/N

#SoulCage #BuildThread #ESP32

Here's the brightness function. Sum of sine waves, un-gamma-corrected and rectified. The pattern repeats every 50 seconds.

No idea how it will look with the Soul Cage animations.

🧵 3/N

#SoulCage #BuildThread #ESP32

While waiting for parts, I printed the Soul Cage's housing (left). The Waveshare board comes with a machined metal housing. This printed part replaces the housing's back cover and deepens it to make room for a battery and a power switch.

I wanted something with more character, so I designed the one on the right. I found a nice 3D printed chain on Printables, and I added spike/loops to pass the chain through. The idea is that the soul is chained in.

🧵 4/N

#SoulCage #3DPrinting

The gray in the previous photo is just a working color. It photographs well, but I want something spookier. I picked up this fidget spinner at 3DPrintopia, and that's the filament I want. Do you know what it is? I sent email to AsylumLife, but no answer yet.

I will get some PolyMaker Shadow Red Dual Matte PLA if I don't find out what it is.
https://us.polymaker.com/products/panchroma-dual-matte?variant=43613087825977

🧵 5/N

#SoulCage #3DPrinting #Filament

AsylumLife responded. It was a limited edition filament, now gone. So I'll try plan B.

#SoulCage #Filament

Gotta decorate the case back. This is an attempt. Man, Fusion 360 fights you every inch of the way when you want to add lettering or artwork to a surface.

🧵 6/N

#SoulCage #3DPrinting

I designed a magnetic clasp for the Soul Cage's chain. There's already a magnetic clasp on Printables, but this one also has a mechanical engagement. It should be more secure.

I used my now-standard crush rib design to hold the magnets. I will Superglue them in too.

🧵 6/N

#SoulCage #3DPrinting

I'm adding static bursts to the Soul Cage video in addition to the flickering backlight. Here are the effects applied to the test pattern thing.

Why? The Soul Cage's video loop is only 8 seconds long. It's 8 very good seconds, but it does get repetitive. So I'm looking for ways to distract the viewer from noticing.

I've also tweaked the screen flickering algorithm to make it less repetitive.

Edit, 2 days later: 8 seconds, not 2.

🧵 7/N

#SoulCage #ESP32

This build thread is brought to you by Staples®.

I've used reams of paper as monitor stands for 40 years. They're cheap, they're solid, and they used to be ubiquitous in office environments.

🧵 8/N

#SoulCage #Staples

The Soul Cage's electronics and the new printer filament are here. I'm pretty happy with the color.

I've just started modifying the firmware. The current FW runs at 7 FPS. So first I need to speed it up before I add the static bursts.

🧵 9/N

#SoulCage #3DPrinting #Halloween

I am benchmarking tonight. It looks like the ESP32 S3 can copy from Flash to SRAM almost as fast as SRAM to SRAM.

The Soul Cage original firmware had the uncompressed video streams in .h files that initialized big arrays. Now I've moved the videos into partitions on the flash. I can recompile the app without having to wait for 14.5 MB of video to download every time.

And now I know how fast I can move the video into SRAM.

🧵 10/N

#SoulCage #ESP32

I am moving the Soul Cage's firmware from Arduino to ESP-IDF. Arduino is completely unusable for developing this app.

I just measured a compile and upload time of 4:33. Four and a half minutes. That's 1:20 to compile and link, 0:49 of mysterious "indexing", and 2:24 to flash. Yeah, it's a huge image, about 15 MB.

What's it doing with 1:20 compile time? This is an 8 core CPU; that's about 2 trillion cycles.

🧵 11/N

#SoulCage #Arduino #ESP32 #ESPIDF

@kbob I am very old. When I started university, if you were very lucky, you could compile a very simple undergraduate program twice in a day. Getting access to a terminal more than once per day was the limiting factor.

@woo I am also very old. Some of my undergraduate classes were taught using punch cards.

But in the intervening 45 years, I've gotten totally spoiled by sub-second turnaround.

@kbob @woo I’m old, too 🙂. I remember when a friend of mine “complained” of his newly acquired 486 PC. The “complaint” was that it was so much faster than his old 386 that he no longer had time to get a coffee and smoke a cigarette outside while his code was compiling! 🤣

[Edit] 386, not 368 🤦‍♂️

@kbob Some of my classmates chose to use cards because you could edit a couple of cards faster than editing a file and there was no queue for the card punch machines. I took my lecturers' advice to learn to use a line-editor on these new-tangled terminal things because they were going to be BIG, in the future.