The star ceiling I built, and the one I'm building now
I built a fiber-optic star ceiling to beat the price of a kit, hit a wall six LEDs couldn't get past, and ended up designing the thing the market didn't sell.
I have a star ceiling in my basement theater. People look up and say “Wow,” or “I’ve always loved star ceilings.” Clients mostly don’t say anything, because they don’t know to ask for one.
Why a fake sky works
There’s a field of research that helps explain why people react to a star ceiling the way they do. It’s called biophilic design, and it looks at how natural patterns and cues affect stress and wellbeing indoors.
The study everyone starts with is Roger Ulrich’s, published in Science in 1984. He compared patients recovering from surgery whose hospital windows looked out on trees with patients whose windows faced a brick wall. The patients with the view of trees had shorter stays, took fewer strong painkillers, and had fewer negative notes in their charts.
In 1993, Ulrich and two colleagues tried it with pictures instead of windows. Heart surgery patients who were shown a photo of trees and water reported less anxiety and were more likely to step down to weaker painkillers than patients shown abstract art or nothing at all.
A 2026 review of biophilic design in hospitals lands in the same place, with a fair caveat. Real nature does the most. Simulated nature, including virtual nature, still produces moderate reductions in anxiety, just weaker ones. And the evidence for long-term effects is still limited.
A star ceiling is a pretty literal version of that. It isn’t the night sky, and everyone under it knows that. But the pattern is natural enough, and the room is dark and quiet enough, that some of the response seems to happen anyway.
Theme parks have worked this way for decades. Disney’s designers use environmental cues to make you feel something before anything moves. Forced perspective is the famous example: Cinderella Castle uses it to look taller than it actually is. You know it’s a trick, and your brain accepts it anyway.
That’s probably why star ceilings show up in rooms meant for rest and escape: theaters, bedrooms, spas. In a theater it does the same job as everything else in the room. It gets you settled in the dark before the movie starts.
The kit was too expensive, so I built my own
The off-the-shelf answer existed. Wiedamark sells a 4-by-8-foot fiber-optic star ceiling panel kit: $515 for 192 fibers, run off a light engine with effects you set with DIP switches.
I didn’t want to pay for the kit. I wanted to build the light engine myself and see if there was any interest in it once it worked. So I built a more cost-effective version of that same panel.
I used the same fiber the kit used, bundles of 24 strands. That kit drives eight of those bundles off eight LEDs. I used six bundles off six LEDs, so 144 fibers. My panel was a 4-by-8 sheet of 2-inch pink XPS foam wrapped in black velvet. We didn’t drill the fiber holes. We poked them through the foam with toothpicks, three of us, about 2 hours to route all the fibers. Then we sealed every hole with Elmer’s glue to hold the fibers and keep them from sliding back through, and let it cure overnight.



The morning it lit up
The next morning my wife and a friend were with me when I powered it up. It landed the way I’d hoped, and it was a lot brighter than I expected. Which is when I realized the code still needed work.
The control board was an ATmega328P I programmed in Arduino, with DIP switches to select effects: a slow twinkle, a fast twinkle, fades. I’d fabbed a real PCB for it through JLCPCB after starting on a breadboard and moving to a proto board. I wanted it done properly, and I wanted to see if it was a product.





I never gave that board a way to connect USB serial. So every time I changed the code, I had to pull the ATmega328P chip off the board, move it to an Arduino Uno, flash it, and move it back to the light engine to test. Compile, flash, pull, seat, power up: about 2 minutes a round trip. I did that somewhere around 200 times.
And what was I chasing, 200 times? A few hundred milliseconds. A star flashing instead of flickering. A fade that ramped down in visible steps instead of dissolving. A twinkle a hair too bright or too long. I was trying to make a light look like a star.

Six LEDs can’t fake a sky
I got it going in the right direction. But it never looked realistic, and the problem was the architecture, not the code.
With 144 fibers and six LEDs, that’s 24 fibers hard-wired to each LED, so 24 stars twinkle as one group whether you want them to or not. We tried deliberately scattering each bundle’s fibers across the panel so the groups wouldn’t clump. Didn’t matter. It’s noticeable. It’s clearly not random. No twinkle routine fixes a sky where a sixth of it blinks in lockstep.
So I shelved it. Life got in the way, since I have two jobs and I’m a dad, but the real reason is I’d hit a wall I didn’t know how to get past.
What I actually wanted wasn’t for sale
When I looked at what was on the market, the closest thing was Wiedamark’s SkyMax RGB+white kits: color, an app, and twinkle effects. They were cost-prohibitive for me. And they still work the way my board did: fibers run in bundles off ports, a whole bundle lighting as one. More ports and color than mine, but the same bundled architecture. They weren’t extensible, and they didn’t do exactly what I wanted.
What I wanted didn’t exist. So I’m building it.
Starlight
Starlight is the version that gets past the wall. It has 110 fibers, but 70 individually addressable RGBW LEDs instead of six single-color ones. Each LED has PWM, pulse-width modulation, which just means switching the LED on and off faster than your eye can see, so it reads as a dimmer level instead of fully on or fully off. That’s what makes fades smooth and lets a star be any color and any brightness, not just white and on.

That resolution is what lets me run scenes instead of just twinkles. There’s an ocean scene where the panel sits in blues and greens and aquas and a white wave sweeps across it. You can’t do a wave when your fibers light in six fixed groups.

It’s ESP32-based now with its own app, so I update firmware over the air. No more pulling a chip. I can mount the panels, sit under the ceiling with a laptop, push a new build, and watch the effect change in real time, the exact thing I couldn’t do the first time around. It’s extensible too: a microphone, a button or switch, I2C, an IR eye, an API, and a wall controller.



The panels are built to be repeatable instead of eyeballed: 2-by-4-foot frames of 1-by-2 boards with a 1/8-inch MDF face, wrapped in black velvet, and a PDF template you tape down and drill straight through so the layout is the same every time.
The first ceiling was one 4-by-8 panel in a theater I meant to finish with two or three more and never did. So I’ve never actually demonstrated it to a client, and most of them don’t know to ask. Starlight is me finally building the thing I wanted when I started poking fibers through foam with a toothpick.