What It Does
ASCII Saver captures your live camera feed and renders it in real time as ASCII characters on your screen. Leave the Mac idle past your chosen timeout and it takes over every display; move the mouse or press a key and it goes.
The camera is opened when the saver appears and released the moment it dismisses — sitting in the menu bar, the app holds no camera session at all. Nothing is recorded, written to disk, or sent anywhere. See Privacy for the detail.
Colour Filters
| Filter | Description |
|---|---|
| Classic | Warm parchment-style ASCII — the default look |
| Matrix | Bright green on black with glow effect |
| Amber | Warm amber terminal aesthetic with glow |
| Raw Feed | Tinted grayscale camera image (not ASCII) |
| Silhouette | iPod-style person outline with cycling colours, using ML person segmentation |
Effects
| Effect | Description |
|---|---|
| Scanlines | Semi-transparent horizontal lines for a CRT look |
| Phosphor Persistence | Previous frame lingers as a fading afterimage |
| Glitch | Random pixel offsets for a corruption effect |
| Interference | Random static bands and tear lines |
Configuration
Click the menu bar icon and choose Settings…. Changes apply immediately to a running saver — there is no Save button and nothing to restart.
- Permissions — camera status, with a button to grant it or to open System Settings if you’ve previously declined
- Activation — idle timeout, and a global “Activate now” hotkey
- On dismiss — lock the screen automatically when the saver dismisses
- Capture — a global hotkey that saves the current frame as a PNG to
~/Pictures/ASCII Saver/ - Picture — colour filter, invert, character size (4–32 pt), frame rate (5–60 fps)
- Orientation — rotation (none, 90° right, 90° left, 180°) and horizontal/vertical mirroring
- Effects — scanlines, phosphor persistence, glitch, interference
- General — Launch at Login
Auto-Update
ASCII Saver 2.0 uses Sparkle 2.x for auto-update, checked daily. Updates are EdDSA-signed, so your copy will only ever install genuine Jorvik Software releases.
Version 1.x had no update mechanism at all — a .saver has no process of its own in which to run one. This is new.
Privacy
This app looks at your camera, so it is worth being precise about what it does with it.
- The camera runs only while the saver is on screen. It is opened on activation and closed on dismissal. Idle in the menu bar, the app holds no camera session at all.
- It is released the instant the screen locks, if you use lock-on-dismiss. There is no path by which frames are captured behind a lock screen.
- Nothing is recorded, written to disk, or transmitted. Frames pass from the capture callback to the renderer in memory and are overwritten by the next one. The one exception is the screenshot hotkey, which writes a PNG only when you press it.
- No telemetry and no network traffic beyond Sparkle’s appcast fetch.
- Person segmentation runs on-device, via Apple’s Vision framework, and only when the Silhouette filter is selected.
Installation
Two formats on every release — both signed and notarised, pick whichever suits:
- Installer (
.pkg) — recommended for first-time installs. Double-click to run; macOS Installer placesASCII Saver.appin/Applicationswithout quarantine or App Translocation. - Download (
.zip) — unzip and dragASCII Saver.appto your Applications folder.
Or install it with Homebrew: brew install --cask perpetualbeta/jorvik/asciisaver
Then launch it once, grant camera access when macOS asks, and a small camera-viewfinder icon appears in the menu bar. That’s your only touchpoint — choose Activate Now to see it immediately, or leave the Mac idle. It won’t add itself to your login items; turn on Launch at Login in Settings if you want that.
Upgrading from 1.x
Version 2.0 is the same screensaver, delivered differently. It used to be a .saver bundle with a separate camera agent beside it; it is now a single ordinary app. Three things change for existing users:
- You’ll be asked for camera access again. The bundle identifier changed, and macOS keys permissions to the identifier — there is no way to carry a grant across, so the prompt is unavoidable.
- It no longer appears in System Settings → Screen Saver. It isn’t a screensaver bundle any more. Launch the app instead; it takes over on idle exactly as before.
- Your settings carry over. Colour filter, character size, frame rate, rotation, mirroring and all four effects are migrated on first launch.
The old install isn’t removed for you. Delete ASCIISaver.saver from your Screen Savers folder and ASCIISaverCameraAgent.app from Applications when you’re ready.
How It Works
A background app with no Dock icon polls system idle time and, past your threshold, opens a fullscreen window at screensaver level on every display. One shared camera session feeds them all.
- Capture — AVFoundation at 320×180, downsampled to greyscale before it reaches the renderer
- Render — a CVDisplayLink-driven
NSViewmaps luminance onto a character ramp - Silhouette mode — Vision’s on-device person segmentation, with temporal smoothing and an aggressive confidence curve
- Dismissal — any mouse or key event tears down every window and closes the camera
Until version 2.0 this took two processes. A .saver runs inside macOS’s screensaver host, which owns the privacy permissions, so the saver could never hold camera access of its own — a separate agent had to own the camera and pass frames across through shared memory. Becoming an ordinary app removed the restriction and the entire apparatus with it.
Uninstalling
Quit ASCII Saver from its menu bar icon and drag ASCII Saver.app to the Trash. If you installed it with Homebrew, brew uninstall --cask perpetualbeta/jorvik/asciisaver instead.
Building from Source
ASCII Saver is free and open source, and builds via the shared Jorvik release.mk. With the jorvik-release sibling repo cloned alongside it and GNU Make 4 installed:
- Clone the repo:
git clone https://github.com/PerpetualBeta/ASCIISaver.git - Local install, signed with the Jorvik Developer ID:
gmake dev-build - Run the freshly-built copy:
gmake run - Signed, notarised, stapled
.zip+.pkgready to ship:gmake release
There is no Xcode project — the two-target one went with the camera agent.
Requirements
macOS 14 (Sonoma) or later. A built-in or external camera.