// macOS APP

Luminary

luminary.sh
screenshot.png
Luminary
performance_metrics.log
0
Window architecture
0
GPU-accelerated
0
Cost to church
0
Compliant lyrics
/* |

Church projection software like ProPresenter and EasyWorship is expensive (£500+/year), complex, and designed for professional AV engineers rather than church volunteers. Most small churches can't justify the cost and end up using PowerPoint, which is clunky, unreliable, and not designed for live worship.

// |

A fully native macOS app with a dual-window architecture: an Operator Window for the volunteer running the service and a Projector Window for the external screen. The operator sees a preview of what's on screen, a song cue list, and a Bible verse lookup. The projector shows clean, rendered output with GPU-accelerated transitions.

=> |

A volunteer-friendly projection app built with Apple's hardware-accelerated frameworks, providing a lag-free experience at no cost to the church.

$ list features

# 6 features found

+Dual-Window Architecture

The Operator Window shows the control interface and preview. The Projector Window displays the output on the external screen. Both update in sync with zero latency.

+Worship Lyrics Display

Songs are stored in a local library with verse/chorus/bridge structure. The operator cues each section with a single click; the projector renders with smooth Metal transitions.

+Bible Verse Lookup

An integrated Bible lookup by book/chapter/verse. The operator can display any verse on the projector with one click, with automatic line-length optimisation for readability.

+Metal Transitions

Slide transitions use Metal-accelerated rendering for GPU-smooth crossfades and wipes, no dropped frames even on older MacBook hardware.

+Media Playback

AVFoundation handles video and audio playback directly on the projector output. Background worship music and announcement videos play without leaving the app.

+CCLI Compliance

The song library displays CCLI song numbers alongside lyrics, making it straightforward for churches to remain compliant with their CCLI licence.

$ npm list --depth=0

package.json · dependencies

$ git log --oneline

$ debug --issues

FIX:

The operator clicks a cue and the projector must update within one frame (~16ms). I solved this using a single source-of-truth ObservableObject published on the main actor, so both windows react to the same state change in the same run loop iteration.

FIX:

Early versions had too many controls visible at once. Through volunteer feedback sessions, I progressively disclosed advanced features (template editing, media management) behind a separate settings area, leaving the live operation panel clean and unambiguous.

LET'S BUILD SOMETHING TOGETHER

I'm always open to discussing new projects, partnerships, or just a good idea.