- Swift 95.1%
- JavaScript 4.9%
| docs | ||
| ProjectorCore | ||
| RemoteProjector | ||
| RemoteProjector.xcodeproj | ||
| Tools | ||
| .gitignore | ||
| CLAUDE.md | ||
| LICENSE | ||
| README.md | ||
| RemoteProjectorRelease.entitlements | ||
Remote Projector
A small macOS app that turns a Mac mini into a remotely managed video display. It connects to the SimplePlayer server, downloads the videos the server schedules for it from S3-compatible storage into a local cache, and plays them full window, in order, without anyone having to touch the Mac again after first setup.
It started as a copy of Local Projector, which plays a local folder on shuffle and still exists in its own repository. The two install side by side.
Setup, once
- Open the app. The settings sheet appears by itself the first time.
- Enter the server address and press Connect. That is the whole registration: the Mac registers under its hostname and remembers the ID the server gives it.
- Choose a cache folder. Videos are tens of gigabytes, so pick a volume with room.
- Optionally turn on "Open at login" and "Enter full screen on launch".
From then on the app reconnects, resumes downloads and starts playing by itself every time it launches. Everything else (which folders this Mac plays, its name, how much disk to keep free, skipping, sending a one-off playlist) is done from the server's admin page. Settings stay reachable from the toolbar button or ⌘,.
The server address must be https
The app has no App Transport Security exception. macOS lets it use plain http only
for an IP address, a .local name or the Mac itself (which is what development on
http://localhost relies on). Any other host name needs https, and so does the
storage host in the download links the server hands out. The settings screen says so
if you enter an address that cannot work.
What you see
- A video, when there is one to play.
- A progress bar with the file name and bytes done, while the first video is still downloading.
- Otherwise one sentence saying why nothing is playing: no server set, no cache folder, server unreachable with nothing cached, or nothing enabled for this Mac.
If the server cannot be reached, cached videos play in shuffled order until it is back.
Building
Requires macOS 15 or later and Xcode 16 or later.
cd ProjectorCore && swift test
xcodebuild -project RemoteProjector.xcodeproj -scheme RemoteProjector -configuration Release build
Without the signing team's certificate, add
CODE_SIGN_IDENTITY=- CODE_SIGN_STYLE=Manual DEVELOPMENT_TEAM= to sign ad hoc.
docs/DEVICE_PROTOCOL.md is the contract with the server. CLAUDE.md describes how the
code is put together.