A macOS screensaver that screenshots your desktop the moment it starts, then swallows it: your windows bend, magnify and mirror around a geodesic-traced Schwarzschild black hole with a relativistic accretion disk.
After Eric Bruneton's Real-time High-Quality Rendering of Non-Rotating Black Holes, via the single-pass adaptation from blackhole_ghostty. Each pixel's null geodesic is integrated numerically in one Metal fragment pass — everything the camera sees falls out of that integration rather than being painted on:
- the shadow — rays with impact parameter under b₍crit₎ = (3√3/2) rₛ spiral into the horizon (your windows really are gone, not faded)
- gravitational lensing — escaped rays are projected back onto the desktop "sky" plane: the screenshot bends, magnifies, and mirrors inside the Einstein ring
- photon ring — rays winding near the r = 1.5 rₛ photon sphere
- accretion disk — a thin Keplerian disk the ray may cross several times (the far side arcs over and under the shadow); blackbody color from a Shakura–Sunyaev temperature profile, shifted and beamed by the relativistic Doppler factor
- starfield — a lensed sky, shown when the desktop can't be captured
- macOS 14 (Sonoma) or later
- Any Mac with Metal (Apple Silicon recommended)
- Download
BlackHoleSaver.saver.zipfrom Releases and unzip it. - Double-click
BlackHoleSaver.saver— it installs to~/Library/Screen Savers/. - Select BlackHoleSaver in System Settings → Screen Saver.
- Grant the Screen Recording permission (next section) — without it the saver shows a lensed starfield instead of your desktop.
Releases are Developer ID signed and notarized. If macOS refuses to open a copy that traveled through some other channel, clear the quarantine flag: xattr -dr com.apple.quarantine BlackHoleSaver.saver.
Build from source instead
brew install xcodegen
git clone https://github.com/s0xDk/blackhole_screensaver_macos.git
cd blackhole_screensaver_macos
xcodegen generate
xcodebuild -project BlackHoleSaver.xcodeproj -scheme BlackHoleSaver -configuration Release build
cp -R ~/Library/Developer/Xcode/DerivedData/BlackHoleSaver-*/Build/Products/Release/BlackHoleSaver.saver ~/Library/Screen\ Savers/
killall legacyScreenSaver 2>/dev/null; trueCapturing the desktop requires the Screen Recording permission, and third-party savers run inside Apple's host process legacyScreenSaver — so the permission must be granted to that, not to the saver bundle. The "+" picker in Privacy & Security won't help: it only accepts regular .app bundles, and legacyScreenSaver.appex is an app extension inside a system framework. Drag-and-drop is the way:
-
Open System Settings → Privacy & Security → Screen & System Audio Recording.
-
In Finder, choose Go → Go to Folder… (⇧⌘G) and paste:
/System/Library/Frameworks/ScreenSaver.framework/PlugIns/ -
Drag
legacyScreenSaver.appexfrom that Finder window and drop it onto the app list in the Screen Recording settings, then make sure its toggle is on. -
Run
killall legacyScreenSaverin Terminal (or log out and back in) so the host relaunches with the permission.
Run the screensaver — your desktop falls into the hole.
System Settings → Screen Saver → BlackHoleSaver → Options…:
- Preset — Inferno (default), Gargantua, M87* Donut, Face-on Ember, Quasar, Blazar, Pure Lens (no disk, pure geometry + starfield), Zen.
- Hole size — apparent shadow radius; the visible footprint spans ~1.5% of the screen at the minimum to ~12% at the max.
- Drift speed — how fast the hole wanders (0 = static centered).
- Warp reach — how far out the desktop visibly bends, in hole radii; the top of the range warps essentially the whole screen.
- Quality — render scale. Auto (default) caps the render at 1800 rows, which is indistinguishable in motion and keeps 5K/6K displays fast; Full / 75% / 50% are manual overrides.
BlackHoleTimer.app is an optional menu bar companion: set a timer, and when it runs out the screensaver is forced on — a break reminder where the break actually happens, because your work falls into the hole.
- Presets from 5 to 60 minutes, or Custom… for any duration; while running, the menu bar icon becomes a live countdown.
- Repeat re-arms the timer after each break.
- Launch at Login keeps it around.
- Show Black Hole Now starts the screensaver immediately, no timer needed.
- If the Mac slept past the deadline, it skips firing on wake instead of ambushing you the moment the lid opens.
Install: download BlackHoleTimer.app.zip from Releases, unzip, drop it in /Applications, open. It works by launching Apple's ScreenSaverEngine, so it starts whatever saver is selected in System Settings — with its usual permissions intact.
Building from source: same steps as the saver, with -scheme BlackHoleTimer; the product is BlackHoleTimer.app.
- Eric Bruneton's black hole shader — the rendering approach.
- blackhole_ghostty — the single-pass numeric adaptation and disk model this shader is ported from.
