OpenSCAD Shadow Boxes, Shadow Casting

This slideshow requires JavaScript.

A friend recently requested some less LLM-centric content.  I’ve often said this blog is largely a lab notebook for various ideas or build log.  It’s also merely a subset of the stuff swirling around in my brain than a dedication to any one topic.  In any case, this post is dedicated to Pete.

I saw the above 3D printed box on Instagram.  It looks like a wanted poster from the show “One Piece” of a character named Roronoa Zoro who carries three swords.  The box contains a small post in the very center which seems very out of place – until the lights are dimmed and the light under the tip of the post is activated, revealing the light is blocked by the irregular edges of the box and casts a shadow of the silhouette of a figure holding three swords.

I’ve seen other implementations of this stereographic projection technique, but this was easily the coolest.  The disparity between the size and shape of the box and shadow was almost startling.

My mind went wild with ideas upon seeing this box.  One of the first ideas I had related to some fan-made movie posters by Kevin Collert many years ago.1 Imagine a small projector / box of arbitrary shape that could project that kind of silhouette behind you?

Yeah, a Tony Stark cosplay is neat… but what if you had an inconspicuous stereographic projector on your back that threw up a huge Iron Man shadow behind you!?

This could be extended in any number of ways.  A Luke Skywalker cosplay that casts a Darth Vader shadow, Bruce Banner with a Hulk, etc, etc.  But, also, what about a shadow of a familiar?  A little dragon perched behind you.  Or two thugs standing to your side like evil shadow henchmen?  Or a crowd of zombies?  The neat part about the box / lamp shown on Instagram was that the box didn’t look like it would display that kind shadow of a shadow.  It just looked like a box with weird edges to it.

But, how did they do it?

He makes a good point (iykyk)

I’m terrible at Blender.  I’ve watched tutorials, tried to use it, but I just can’t wrap my feeble mind around it.  My one string is the ability to make things in OpenSCAD.  There are plenty of others who can make incredible things in it, but I’m no slouch.  The code may not be pretty, but, well, as they say…

And, really, that’s all that counts

I started with a few assumptions.

  • The light source has to be a single point.  If there were multiple LED’s or filaments, it would create fuzzy / duplicate shadow edges.  This should be possible with a single bright LED.
  • The shadow is basically a cone.  The edge of the shadow everywhere must be essentially some sort of a distorted cone, with the center point being the single point of light and the edges of the silhouette being the edge of the cone.
  • The top edge of the box must be where the cone intersects with the box.  If we decide how far off the wall the point of light is and we know where we want the shadow to be and where the shadow edges are, we should be able to intersect the shadow-cone with a thin walled box.
A rough sketch of the idea

Creating the box itself shouldn’t be that big a deal.  It’s an easy few lines of OpenSCAD.  Creating the arbitrary “cone” was initially a much harder problem.  Now, if the design I was trying to create was very simple or entirely convex, I could just use the OpenSCAD hull function around an SVG of the desired shadow and a very small sphere for the point of light.  Since a simple shape would be uninteresting, I knew that hull wasn’t going to work.  For a while I tried really hard to build a python program that would work by creating a polyhedron built out of the large SVG in the desired location and a very small SVG at the light point – and stitching the sides together programmatically.  If you’ve ever worked with the OpenSCAD polyhedron functions, you know what a pain it is.  If you don’t define the faces in a certain order or order the faces properly, you’ll end up with flipped faces and a pile of useless triangles.  Even when the faces were properly built, the result ended up being difficult for OpenSCAD to render since it involved so many points converging on so few points and weird little overlaps.  It was a mess.

I’m listening…

You mean, all I have to do is RFTM?  Apparently the linear_extrude function has a parameter called “scale” where you can define how small something should get as it is extruded.  This is literally exactly what I needed.

I needed the shadow on the wall to be extruded off the wall as high as the point of light, but scaled down to that same point of light.  But, would this work???  I haven’t printed it yet, but I believe it should.

This slideshow requires JavaScript.

From there, the next question is… does this OpenSCAD back-of-the-napkin sketch really work?  Again, I’m not sure – I haven’t printed this for a few different reasons.  If this design were printed “as is”, there would be a ton of overhangs and support material.  I believe when you look at some of the pictures of the lamp lit up from the side, you can see the infill patterns on the sides.  I can’t tell from these videos – but I suspect the easiest way to 3D print this box would be to do so in big flat panels.  At the point you’re just trying to turn filament into 2D panels, why even bother printing it when you could lasercut it in a fraction of the time?

Let’s look at a few stills of the lamp.

This slideshow requires JavaScript.

Now, for my quick mockup I just used a simple square shape – but you can definitely see the same features as in the lamp in the video stills.  The head, the crossed sword tips at the left, the jagged edges on the bottom right, the floating sword on the right.

Common structural features circled

Given that the theory feels intuitive and sound and that my quick mockup proof of concept seems to have the same structural features as the lamp in the video… this seems like it would work.

If this quick mockup works, then why restrict ourselves to simple boxes?  For a mass produced thing you just want to stamp out, a simple box just makes sense.  You could lasercut the panels, slap them together, and churn them out all day long.  But, the thing that you use to block the light and form the shadow could be any arbitrary shape.  It could be a triangle, star, or something far more complex.  Here’s another quick sketch:

This slideshow requires JavaScript.

Obviously, this would be a support structure nightmare.  But, for a one-off project and a cool enough idea, I think it could definitely work!

  1. His work has been stolen and slapped on so many dropshipped things that it was very difficult to find the original artist! []

Inception and Exorcisms

Out!

I have found that if I have an idea, it will keep swirling around my brain unless I get it out in some way.  In a way, I’m exorcising myself to prevent these ideas from plaguing me further.  It’s not so bad having ideas pile up in my brain, it’s just that as long as they’re floating around, I’m not able to adequately devote sufficient brain cycles to other tasks.  I don’t know the reason for this – but my sense is that my brain will keep returning to these ideas, circulating and cycling them, because I don’t want to forget about them – and it can only truly relax once it knows the idea is somewhere it can’t be lost / forgotten.

A while back I had suggested the only good way I had to deal with these recirculating ideas was to either act on them (building / blogging) or killing them (organizing / bookmarking).  This wasn’t exactly true.

But, first, a digression.  Many years ago Bre Pettis and Kio Stark created a “cult of done” manifesto, a short set of ideas about how to consider things “done,” written in 20 minutes since that’s all the time they had to write it.  I think about this manifesto and this one particular poster implementation of it often.

James Provost’s Cult of Done Poster

I’m not sure what appeals to me so much about this manifesto.  I don’t know that I agree with each element – but for something generated in 20 minutes, it’s pretty good.  I guess the reason it comes back to my mind today, of all days, is that I happened to be looking back through my many blog posts with my eldest kiddo and was reminded of all the blogging I did here and at MakerBot.com and was reminded of those earlier, perhaps simpler and sillier, times.

Here’s how I actually exorcise / done-ify things:

  • Build the idea
  • Blog (and publish) the idea
  • Bookmark the page and sort that bookmark
  • Write the idea down in a note app
  • Write it down or sketch it in a notebook / sketchbook
  • Send the idea to someone

Sometimes I can accidentally let years go by without talking to a friend.  It’s not a good quality – but at least I’m able to recognize this personality trait.  My way of keeping in touch with people is that when I see something that reminds me of them, I’ll send it to them.  This isn’t so unusual … but sometimes I do this same thing with a slightly less pure motive.  Sometimes when I have an idea or see something interesting, I don’t just store it in a bookmark or by writing it down… I consciously make an effort to store it in a friend’s brain.

Yes, I’m sharing a thing with a friend as a way to connect, offer something to them that I know they’ll be interested in, perhaps to give us something to talk about, but I admit that I also consciously share it with them in order to further store the same data within their brain and in our communication channels.1 Again, not my finest quality, but it’s not an entirely selfish quality either.2  The hilarious thing about this last way to done-ify something is that you could even store the data in the brain of someone you hated!  Heck, you could rage-tweet it to someone.  And, the stronger your reaction to them, the stronger the connection you would have to the memory of the thing!

Taking all that into consideration, here’s how I probably actually exorcise / done-ify things:

  • Implement: Build the idea
  • Externalize:  Publish the idea
  • Memorialize:  Write down, bookmark, sketch,
  • Incept:  Store the idea in someone else’s brain
  1. Texting, messaging apps []
  2. Though, I suppose “not entirely selfish” isn’t exactly a resounding exoneration. []

Weakness

🤦‍♂️

I just wrote a very large blog post about kicking frontier LLM’s to the curb.  The problem I’m facing is that running a useful scale LLM on my extremely modest PC is not just slow, it’s difficult.  I don’t mind waiting 30 minutes or even an hour for it to work on a small piece of a bigger project, but to come back after an hour and realize it made things worse or stopped after 5 minutes means I have figure out how to kick start it.1

My PC isn’t fancy.  It’s about 3 years old, has 32GB of RAM of which 16 GB is “shared VRAM”, meaning that it’s basically using half of it’s RAM as if it were VRAM.  The result is a machine that’s decent for most work tasks2 but would have poor performance for games, video editing, big 3D model rendering / editing, and… LLM use.  If I had unlimited time and patience, I could probably flog Qwen 3.5 9B with a 4-bit quantization into working well enough over a long enough timeline using my current PC.

I’ve looked into what it would cost to either build a stand-alone system or an entire secondary machine just for these kinds of tasks plus home LLM inference use.  None of these options are particularly attractive at this time.  Single board computers like the Raspberry Pi, Orange Pi, Jetson Nano and others would probably cost in the range of $500 and probably not crack 5 tokens per second.  A GPU in an external enclosure would probably cost around $700 for 16GB and could possibly run up to 40 tokens per second.  However, it would probably be kinda loud and take up desk space.  A Mac Mini with 16 GB of unified memory could probably reach 10-15 tokens per second for $600 or so, which would be a lot slower than a full external GPU but also silent.

Is that too much to ask?

Honestly, none of these options are super attractive right now.  I wouldn’t mind building a DIY rig with an SBC, but that’s a lot of money for not a lot of speed.  I wouldn’t mind getting a Mac, but while it would likely be easier to set up than a Raspberry Pi and could run larger models, it wouldn’t work much faster than the Pi’s.  The benefit of either a SBC or Mac Mini is I could set them up and put them in some unused corner of the house.  Even if the GPU enclosure route is more power and speed for less money, it would need to be both loud and tied to my PC at all times.

None of these solutions are perfect, but pretty much all of them are some combination of expensive with a modest increase over current computing abilities.

Anyhow, I broke down and gave $10 to OpenRouter.ai.

This is not an endorsement – it’s just what I settled on using after poking at various other options.  I’d looked into getting a plan through Alibaba’s Qwen, Kimi AI, Groq3 , Deepseek, and other LLM API aggregators like Togther.AI.  OpenRouther.ai doesn’t charge for 50 daily API calls to a few of their “free” models, but if I carry a $10 credit balance I can have 1,000 calls per day and use more models.  It was easy to kick the tires on their free plan, find it could work well enough for my purposes, and hand them $104 , and want to have access to 200x more API calls per day.

If I’m going to use an LLM and still determined to avoid OpenAI/ChatGPT, Anthropic/Claude, Elon/Grok, Google/Gemini, and their ilk, I have to turn to other models.  I need something that’s better than modern baren StackOverflow but doesn’t need to be a giant evil LLM either.  I’m having a fair bit of success with GPT-OSS 120B, MiniMax M2.5, and Qwen models.

I’m not doing anything groundbreaking.  I’d restarted the virtual assistant project from scratch a few weeks ago and just working on getting the pieces operational.  These skills aren’t anything wild – control over my PC’s media functions, modest automated regular downloading of files, communication over the Matrix protocol, etc.  Even the wakeword, STT5 , and TTS6 systems aren’t very new.  The only “new” thing I’m trying to do is tie these pieces together with a little bit of personality from an LLM.

Even without groundbreaking innovations, it’s interesting to see the “cost” of this inference.  Yesterday I used approximately 12 million tokens, largely with GPT OSS 120B.  Right now Claude is about $1/M tokens for Haiku, $3/M tokens for Sonnet, and $5/M tokens for Opus. 78 It looks like the going rate for GPT OSS 120B is probably about $0.04/M tokens.  Having now used Claude models last month and GPT OSS now, I can say Haiku is very useful, but their other models aren’t 3x and 5x more useful.  But, more importantly, there is no way Haiku is 25x better or that Opus is 125 times better than GPT OSS 120B.  I don’t doubt these models might cost that much more to develop and run, but I’m just not seeing a jump utility that justifies these costs.  I’ll admit that Haiku could probably have done the job in half the tokens, but even so it feels like there’s an upper limit to how useful an LLM could be.  Or, rather, an upper limit to how useful and LLM could be to me.

I just read an interesting blog post / article specifically about Anthropic’s recent publicity blitz / stunt regarding their “Mythic” model.  They are supposedly not releasing the model to the public because it is so smart and dangerous.  Suffice it to say, the author makes a convincing case Anthropic’s claims are smoke and mirrors.  One particular section struck a chord with me:

[W]hat am I getting for $25 per million input tokens that I cannot get from the open-weights ecosystem for more than two orders of magnitude less — roughly 227× cheaper, at eleven cents per million?

What, indeed?

As much as I like to fiddle with little gadgets, make and tinker with things, and even like the odd new shiny toy, I’m not a fan of shoving email/push notifications/cloud/crypto/NFT/blockchain/wifi/mesh/AI into every damn thing.  I don’t need push notifications from my toaster, don’t need to preheat my oven before I get home, don’t want to have an AI analyze the mustard collection in my fridge and offer recipes.

If an LLM like GPT-OSS 120B released in August of 2025 can handle meaningful coding tasks swiftly, what more do regular people really need of an LLM?  I’m not sure regular people really do.  I do think large corporations, data brokers, and governments are probably already licking their lips at the idea of being able to build better profiles for consumers.91011

Perhaps one day I’ll try to bolt on some features that require some novel problem solving – like the ability to research things on the internet, check emails, draft email replies / queries, maybe even do some light scheduling or administrative work.

Software Development with LLMs
  1. Series Plugin Test for Illustrative Purposes Only
  2. ChatGPT WordPress Plugins
  3. Coding with an LLM Sidekick
  4. Python Practice with an LLM
  5. Not Team AI
  6. Never Stop Breaking Up
  7. Weakness
  1. What a funny phrase “kick start”.  I wonder if people mostly think of the crowdfunding platform rather than it’s original usage? []
  2. It does get bogged down in very large PDF’s and spreadsheets []
  3. NOT Grok.  Groq is, as best as I understand them, a chip company that builds devices that can run inference on medium sized LLMs very quickly []
  4. Plus credit card processing fees []
  5. Speech to text []
  6. Text to speech []
  7. These are the “input” $/M token prices.  Claude’s “output” generation $/M token prices are 5x the input cost.  I’m just trying to keep their pricing plan information simple/streamlined for ease of reading and reference []
  8. For the curious, ChatGPT’s pricing is $0.20/M tokens for their 5.4 nano model, 5.4 mini is $0.75/M tokens, and their flagship 5.4 model is $2.50/M tokens. []
  9. I was going to say “users”, but really, the regular people here aren’t the “users” – the companies and governments are.  I may very well need to start calling people “usees”. []
  10. Use-ees? []
  11. It sounds good in my head, but doesn’t seem to track properly when typed []

Never Stop Breaking Up

Just wasn’t meant to be

About two months ago1 I signed up for a frontier LLM / AI subscription. It was the lowest plan at Anthropic so I could use Claude Code. I have a small website business2 that had a lot of stuff broken for a while. Although I had paid a few hundred dollars to a few different developers and even tried to hire several more to help, I wasn’t able to get anyone to help out or write a single line of code. It’s not that fixing the various code problems within a WordPress plugin are beyond me3 but more that tracking down and fixing a bazillion little problems would have been extremely time consuming4 and I just didn’t have the time.

Okay, enough justifications –  I signed up for Anthropic at $20/month and honestly, it was fantastic. I have built out two or three big projects, easily a dozen medium projects, and I have no idea how many minor items. I could go from idea to description to implement so much faster than I could have alone, it’s not even funny.  I’m confident I will keep using several of the things I’ve built for a very long time.  The $20/month plan has it’s limitations – you have a limited amount of amorphous compute you can use during 5 hour stretches as well as a limited amount you can use during a weekly period.  During “non-peak” hours you have more amorphous compute.  I know you get a ton more compute with the $200/month plan, and honestly it’s almost certainly worth it to a full time developer, but I have so many misgivings about funding companies whose value proposition involves boiling oceans of drinking water, slurping up energy, enabling surveillance states, and allowing computers to make decisions in wartime.

Anyhow, I cancelled my subscription today just before it was about to renew for the second time.  I’ve given Anthropic $40 of my money and gotten well more than that in value, so I’m fairly content with that transaction.  But, now that my bigger projects are done I don’t have a need for continued use and can make due with either free options or roll code by hand.

I was tempted.  I’m still tempted.  If I paid several hundred dollars to real humans and received nothing, I could absolutely find a way to spend $240/year to enable me to build more complicated things faster.  Even without these justifications5 I can absolutely afford $20/month.6  But, much like an evil ring that grants you some modest powers, I’m pretty sure the hidden costs just aren’t worth it.

I wondered when I started using a paid LLM again7 how long I would keep paying for it.  I probably got value out of ChatGPT for about two or three months and after that I mostly kept it out of convenience, inertia, and make stupid pictures.8  I stopped using it because I wasn’t getting steady value out of it and I didn’t like continuing to fund OpenAI.  Would I keep the Claude subscription for months longer than I was really using it – out of the convenience of having a frontier LLM on tap?

It didn’t hurt that it felt like Claude was steadily getting less intelligent and helpful.9 If I were a more paranoid or cyclical person I would believe cell phone manufacturers make their phones slow down just as the new flagship phones are released and frontier LLM companies dumb their models down when the newest pricier models come out.

… but maybe slightly tempted?

As frugal as I am, I’m willing to pay for a frontier model because they’re incredibly helpful in realizing .  However, I don’t want to support most of the frontier companies10 , their evil alliances11 , or side quests to block other AI companies from developing, devour the earth’s energon cubes, and boil the oceans.

I mean, why can’t I just do this on a small scale at home?  Part of the problem is that even trying to get my hands on a very small PC is becoming unnecessarily expensive.  At the time I’m writing this, the Raspberry Pi 5 16GB12 is going for $305, closing in on triple the initial MSRP of $120.  Adding a case, some cables, the AI HAT+ 2, a heat sink / cooler, and beefier power supply would probably bring the cost to $600.  I could buy a whole extra brand new desktop PC for that price.  Or just use my current desktop to run an LLM in the background.

Which is what I’m doing literally right now.

I’m running LM Studio on my modest PC13 to serve up small LLMs to VS Code and Cline, to go through some small Python codebases to help me with some projects.  After quite a lot of trial and error, I’ve basically settled on Qwen 3.5 9B using a 4-bit quantization as the best model I can run on my machine that can actually help.  It is punishingly slow… but it does work.  Something that might have taken a frontier model 5-10 seconds to do takes my machine probably an hour.  Some light web research suggests that a frontier model is probably operating around 50-100 tokens per second while my machine can manage a blazing 1-2 tokens per second.

The man has a point…

Since I’m rambling here anyhow…  I’m going to backtrack slightly, just so I can give a little context.  Sometimes I’ll find myself stuck in a cognitive loop of frustration and rabbit holes and decision paralysis.  Writing these things down lets me excise exorcise14 these thought-demons at the cost of inflicting them upon my legions of loyal readers.  I find jotting things down in a semi organized fashion means I don’t have to keep all the little pieces of ideas swirling around in my brain.  I can finally relax, knowing they’ve been realized… somewhere.  This is why I’ll jot down some sketches, create some scraps of code, or tuck a note away in Standard Notes.1516 Well, Working with frontier models makes me hate their rate limits and everything they stand for, which makes me want to build my own.  Where was I?

Right.  I’ve been swirling around the vortex of working with a frontier LLM’s, getting sick of paying and/or supporting them, try some free API resources, bump into their free tier limits, fall down a rabbit hole investigating what it would cost to build a machine of my own, get disgusted at the cost and figure I’ll just run them on my current machine, get slightly frustrated at the time it takes to do anything meaningful, and wonder about maybe throwing a few dollars at a frontier LLM … just to get this project finished.  But, I don’t need a frontier LLM right now and I don’t need to get things done fast … especially when I should be doing the work I perform in exchange for the money I use to pay my mortgage.

¿Por que no los dos?

In some ways, having a very slow LLM at my disposal is actually helpful.  Yes, it does mean I have to listen my little PC’s fan hum to itself for an hour to accomplish something kinda basic.  But, then again… it’s busy working on something, freeing me up to do other things.

Like write blog posts.

He’s got a point…

Plus, there are some possibly realistic uses for this kind of super low cost basic research / experimentation.  I’ve been using this cobbled together system of various LLM’s, frontier and local, plus my modest Python skills, to try and create a semi-useful virtual assistant.  I’ve connected to a few very small LLM’s so it can act as a human-ish interface for useful scripts17 , connected it over the Matrix protocol so I can talk to it securely from a phone even when I’m not home, and now that I know which kinds of models would work for some simple Python code generation, I could have a useful slow coding helper wherever I need it.  Frankly, the main use of the coding assistant for me right now is building deterministic scripts that help me on a daily basis.  There are other directions I could imagine taking this project from here.  By adding a Meshtastic node to my home set up and carrying a small Meshtastic device with me, I could still stay in touch with my very slow and low bandwidth PC wherever I was.  With a solar panel or power supply, I could even run all this entirely off grid.  Going completely off grid isn’t something I’m super into, I like having easy access to broadband and grocery stores, but it sure would be neat and a good excuse to buy a few small Meshtastic devices.

Of course, once I start spinning around the idea of a Meshtastic node, I’ll want to bundle it with a Raspberry Pi 5…

Software Development with LLMs
  1. Series Plugin Test for Illustrative Purposes Only
  2. ChatGPT WordPress Plugins
  3. Coding with an LLM Sidekick
  4. Python Practice with an LLM
  5. Not Team AI
  6. Never Stop Breaking Up
  7. Weakness
  1. You know, before our latest war and revelations AI companies were helping power the county’s military. []
  2. Very boring []
  3. I’m kinda decent at plugin dev for someone with zero training []
  4. Cue meme of Don Draper yelling “That’s what the money is for!” []
  5. Forgive the humble brag []
  6. Just look at all these streaming services I pay for. []
  7. I paid for ChatGPT in 2023 and 2024 []
  8. I made several “make it more” style pictures… []
  9. I was going to find a link to support this … sense – but there were honestly too many links to too many articles I didn’t want to vet.  Suffice it to say the “vibe” I got is that as of April 2026, I’m not the only one who feels like Claude got stupider.  My impression of the consensus is that Claude got too many users, resource usage went up, and quality went down. []
  10. OpenAI, Anthropic, Grok/Twitter/Elon, Google/Evil, or even MicroSoft []
  11. billionaires, oligarchs, fascists, surveillance states, Bezos, Musk, or certain president-grifters []
  12. If you can find one! []
  13. Bought long before RAM-pocalypse []
  14. Sheesh. []
  15. I used to use plain text files, then Google Keep, but you know what – this is service is great and it’s not Google or evil []
  16. As far as I know []
  17. Downloading files automatically, setting reminders, etc []