Most screensavers are loud. Cycling photographs, rolling messages, slideshows of your beach holidays. Reverie is the opposite.

Hypotrochoids and epitrochoids — the kind of curve a child draws with a Spirograph — appear one stroke at a time on a pastel canvas, rotated copies layered into a dense rosette, then fade. Underneath, a sketched wavescape rolls toward the horizon. The whole thing breathes between two ink tones; the paper drifts through twelve hand-tuned colour palettes; the page is finished with a vignette and grain so it reads as ink on paper, not pixels on glass.

There’s nothing to configure. There’s no settings panel. You just watch.

A Reverie composition: a deep-purple roulette curve drawn as a dense rosette on warm pastel-pink paper, with the faint sketched wavescape underneath.

The cycle

Each composition follows the same six beats:

  1. A pen begins drawing a curve from a single point. The path is a roulette — a small circle rolling inside (hypotrochoid) or outside (epitrochoid) a larger one — with parameters drawn from a continuously-random parameter space.
  2. When the curve closes, the pen lifts and the same shape is drawn again, rotated by a small angle. After 6 to 12 such passes (varying per cycle) the rosette is dense.
  3. The completed composition holds for a few seconds, then fades.
  4. A new curve with a different lobe count begins immediately. The recent six lobe counts are excluded from each pick so successive curves never repeat over a meaningful window.
  5. The colour pulse runs independent of the curve cycle — strokes breathe between the palette’s two ink tones over a slow four-second sine wave.
  6. Every thirty seconds the background palette begins a five-second Lab-space cross-fade to a new palette. Twelve are tuned; the canvas slowly shifts hue without any single transition catching the eye.

The curves

Roulette curves are mathematically simple and visually rich. A hypotrochoid is what you get when a small circle rolls inside a larger one with a pen attached at a fixed offset; an epitrochoid is what you get when the small circle rolls outside. The lobe count, smoothness, and reach of the curve are determined by three parameters: the closure denominator q, a coprime numerator p, and the d/r offset ratio.

Reverie picks q from {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19}, takes a coprime p, and chooses one of three rotation modes for the layered passes — symmetric (a tidy 2π / (q · passes)), golden-angle (non-resonant, never closes), or random walk. The result is that no two cycles look quite the same even when they share a base shape.

Paper, not pixels

The aesthetic isn’t accidental. Backgrounds are warm pastels, never pure white. Strokes are dark ink tones — burgundy, navy, plum, indigo, bronze — tuned in pairs so the breathing transitions stay in the same register. Cross-fades between palettes go through Lab colour space rather than RGB, so the mid-tones don’t turn muddy. A subtle paper grain rides on top, and a vignette rolls the corners toward darker. The composition wants to look like something a draughtsman would produce.

Multiple displays

macOS instantiates one ScreenSaverView per attached display, and Reverie owns its engine state per view. So curves, palettes, and pulsation phases drift independently across screens — you don’t get the cinema-multiplex effect of every monitor showing the same frame in lockstep. Each screen does its own thing.

What it doesn’t do

Installation

  1. Download Reverie.pkg from the latest release and double-click to install
  2. The installer drops Reverie.saver into /Library/Screen Savers/ — system-wide, available to every user on the Mac
  3. Open System Settings → Screen Saver and pick Reverie

If Reverie doesn’t appear in the list immediately, close System Settings and reopen it — macOS sometimes needs a restart to detect newly installed screensavers.

To uninstall: pick a different screensaver in System Settings, then delete /Library/Screen Savers/Reverie.saver.

Requirements

macOS 14 (Sonoma) or later. Universal binary (Apple Silicon and Intel).

Building from source

Reverie builds via the shared Jorvik release.mk. With the jorvik-release sibling repo cloned alongside it and GNU Make 4 installed:

  1. Clone the repo: git clone https://github.com/PerpetualBeta/Reverie.git
  2. For a fast local install (arm64-only, ad-hoc-signed): gmake dev-install
  3. For the test app harness (an NSWindow rendering the same engine the saver uses, no install required): gmake run
  4. For a signed, notarised, stapled .pkg ready to ship: gmake release