Lantern

A Mac menu bar app for Bluetooth LED bars. Match the light to your screen, pick any colour, set a white, or run an effect: straight over Bluetooth, no hub, no account.

Download for macOS Source on GitHub

macOS 14 or later · free and open source (MIT)

Same bar, six screens: the LED bar glows pink, orange, green, green, white and soft green to match the laptop

Same bar, six screens. The toad (bottom right) is the interesting one: the light matched the green background, not the toad, because that is what covers the most of the screen. Photos straight from a phone, cropped only.

Why I built it

Have you ever bought an inexpensive LED bar, set it up behind your desk, and wished it could follow your screen the way a Philips Hue setup does?

I wanted that feature without paying for the whole Hue ecosystem. Screen sync with Hue needs Hue lights, a Hue Bridge and the Hue Sync app, which comes to about A$550 in Australia. Instead, I bought the cheapest Bluetooth light bar I could find, for A$49, and decided to solve the problem myself.

The bar came with a phone app and a remote, but it had no way to talk to my Mac. I worked out the commands it understands over Bluetooth and wrote the missing piece. Lantern runs in the Mac menu bar and controls the light directly, so there is no hub, no account and no cloud service involved. The result is the expensive feature, running on a light that cost A$49.

Hue screen syncThis setup
LightHue Play gradient light tube, A$419.95MELK LED bar, A$49
HubHue Bridge, A$129.95none
SoftwareHue SyncLantern, free
Total≈ A$550A$49

The Hue prices are Philips' Australian list prices for the light tube and the bridge, checked in October 2026. To be fair to Hue, its gradient tube does more than my bar: it can show several colours along its length at once. My setup does the one thing I wanted, for less than a tenth of the cost.

It follows the screen

Lantern reads a tiny copy of your display 30 times a second and sends the colour covering the most of it to the light over Bluetooth. Change what's on screen, and the room changes with it.

Filmed on a phone; trimmed and cropped, nothing else.

What it does

Screen Sync

Sets the light to the colour covering the most of your screen, 30 times a second. A dark scene dims the bar; a strong colour still beats black. Or let it flow through the screen's top ten colours.

Colour

A colour wheel, quick swatches, and an eyedropper that grabs any pixel on any screen.

White

A warmth scale from 2700K to 6500K with presets, plus a tint control to match a real bulb.

Effects

The bar's own flowing rainbow in either direction, and Spectrum: the whole bar gliding around the colour wheel.

Calibrate

Screen colours look pastel on LEDs. Compare any colour with the bar and tune saturation, gamma and colour balance until they match.

Private

Screen frames are 96×54 pixels, reduced to a few colours in memory and discarded. Nothing is saved or leaves your Mac.

Looks like it belongs on a Mac

Lantern is built with SwiftUI and follows the macOS design language. The menu bar panel uses the system's translucent glass material, so it picks up the colours of whatever sits behind it, and the whole app follows your accent colour and dark mode.

The menu bar panel, in macOS glass
Menu bar panel
Screen Sync with the screen's palette
Screen Sync
The colour wheel
Colour
Effects
Effects

Install

  1. Download Lantern-1.0.zip from Releases, unzip it, and move Lantern.app to Applications.
  2. It isn't notarized, so macOS will say it can't check it the first time. Open System Settings › Privacy & Security, scroll down and click Open Anyway.
  3. Allow Bluetooth when asked, and Screen Recording the first time you turn on Screen Sync. Close the light's phone app first: only one controller can connect at a time.

Prefer to build it yourself? git clone https://github.com/Mayukh-D/lantern.git && cd lantern && ./build.sh

Which lights

Bluetooth lights that advertise as MELK-… or ELK-…: the inexpensive LED bars and strips sold with the Magic Lantern and Lotus Lantern style apps. Tested on a MELK-OA10 bar. They all take the same 9-byte commands on service FFF0, characteristic FFF3:

CommandBytes
Colour7E 07 05 03 RR GG BB 10 EF
Brightness (0–100)7E 04 01 BB FF FF FF 00 EF
Power on / off7E 04 04 01 FF FF FF 00 EF / 7E 04 04 00 00 00 FF 00 EF
Built-in effect7E 00 03 CC 03 00 00 00 EF (MELK-OA10: 01 rainbow, 02 reversed)
Effect speed (0–100)7E 00 02 SS 00 00 00 00 EF