What It Does

Point Save Cannes at your own films — a single file, a folder of them, a whole library of folders, or a live stream — and when the Mac goes quiet it covers every display and starts playing. Move the mouse or press a key and it goes.

It is a tribute to Save Hollywood by WhiteBox, the much-loved saver that did exactly this until macOS broke it. Same idea, rebuilt from scratch on the modern Jorvik screensaver pattern.

Sources

Add as many as you like, of three kinds, mixed freely. Each has a switch, so a source can be set aside without being forgotten — it stays in the list, dimmed, with its count still showing so you know what you are switching back on.

KindBehaviour
FolderWalked recursively, so a library organised one-folder-per-film needs no flattening. Hidden files are skipped and bundles aren’t opened up.
FileA single video, played on loop when it is the only source.
StreamA URL handed straight to the player — an HLS .m3u8 or a direct MP4, over http or https only.

A stream has to be something the player can open by itself, not a web page it would have to scrape — which rules out YouTube and the like by design rather than by omission.

The chevrons at the left of each row move a source up or down, which is how you say “this folder first” in sequential order. The magnifying glass shows a source in Finder — worth a click before you walk away, to be sure the saver is pointed where you think it is.

Nothing is ever moved or altered on disk. Save Cannes only ever reads.

Streams Known to Work

StreamNotes
NASA+Live, 24/7, Earth and space footage. The best fit for a screensaver.
DW EnglishLive, 24/7 news.
Apple’s sample streamOn-demand, so it ends — useful for testing hand-over to the next source.

The exact addresses are in the README, along with how to ask NASA for a current one when theirs rotates.

A live stream never hands over. It has no end, so once a display lands on one it stays there until you dismiss the saver — a playlist can’t advance past something that never finishes. That is inherent rather than a fault, but it does mean a live stream mixed into a folder of films will eventually take that display for the rest of the session.

Photographs

Photographs play too, alongside the videos in the same folder — JPEG, PNG, HEIC, TIFF, camera RAW, anything macOS knows as an image. Each is held for a few seconds before the next one. Turn them off if your film folders have cover art or downloaded posters in them that you would rather not see.

A folder of photographs plays through as a collection: once the first comes up the rest follow, and only then does the next film play.

Playback

OrderDescription
RandomShuffled across everything from every switched-on source, and reshuffled each time it works through them, so you don’t get the same running order twice.
SequentialEach source in turn, in the order listed, and each source’s files in path order — so a folder’s contents stay together rather than interleaving with another library.
Size on screenDescription
Full screen, cropped to fitFills the display; whatever overflows the long edge is cropped away. The default.
Fit to screen, no croppingThe whole frame is visible, letterboxed or pillarboxed on black.
Original sizeOne video pixel to one screen pixel, centred on black. Anything larger than the display is scaled down to fit.

Multiple displays each get their own window and their own playback. Sequential order always plays the same video everywhere, in step — starting each display at a different file would make the ordering meaningless, so the per-display toggle is switched off and greyed out. Random order lets you choose: a three-monitor desk can play three different films at once, or all three can share one shuffle.

Sound is off by default — a screensaver that starts talking to an empty room is nobody’s friend. With more than one display it plays on the main display only, since each display runs its own playback and the alternative is the same soundtrack two or three times over, a few frames apart.

Titles

A caption low in the corner tells you what is playing: fades in, holds a few seconds, fades out. Never, as each video starts, or repeatedly every 1–60 minutes for a screen people wander past rather than sit in front of.

The text is the file’s own embedded title when it carries one, and its filename without the extension when it doesn’t. Never the full path — nobody wants their folder structure projected on a wall. Captions are drawn with a soft shadow, because a video screensaver can’t know what it is drawing over and white-on-white is otherwise a real possibility on the wrong shot.

Screenshots

Set a hotkey under Settings → Capture and press it while the saver is playing. The frame is written to ~/Pictures/Save Cannes/ as a PNG.

The frame is pulled from the video file rather than grabbed off the screen, so you get the whole frame at the video’s own resolution — a shot taken in full-screen mode isn’t cropped to the shape of whichever display it happened to be on. That also means a live stream can’t be captured: there is no file to seek into.

Configuration

Click the film-strip menu bar icon and choose Settings…. Everything persists immediately — there is no Save button and nothing to restart.

Auto-Update

Save Cannes uses Sparkle 2.x for auto-update, checked daily. Updates are EdDSA-signed, so your copy will only ever install genuine Jorvik Software releases. There is a Check for Updates… item in the menu if you would rather ask yourself.

Privacy

This app reads your films and looks at your photographs, so it is worth being precise about what it does with them.

Installation

Two formats on every release — both signed and notarised, pick whichever suits:

Or install it with Homebrew: brew install --cask perpetualbeta/jorvik/savecannes

A small film-strip icon appears in the menu bar — that is your only touchpoint. Open Settings… and add a source before anything will play.

Unlike its siblings, Save Cannes does register itself for launch at login on first run, because a screensaver that isn’t running isn’t a screensaver. Turn that off in Settings → General if you would rather start it yourself.

Why an App, Not a .saver

Save Cannes is a screensaver-style product that ships as an ordinary app. The deciding reason is file access. A .saver runs inside Apple’s legacyScreenSaver host process, which owns the permission identity — a hosted saver can never hold a file-access grant of its own, so it could never reliably read the folder you chose.

Save Hollywood hit this wall first, and its author’s own account is worth reading, because it is the same wall: “In macOS Catalina, Apple completely broke the standard open panel APIs when invoked from a screen saver.” Choosing a file is the entire interface for a saver like this, and from inside the host process there was no longer a supported way to offer it.

Save Cannes puts the picker, and the file access it grants, in an ordinary app where both still work — and gets the configurator, hotkeys and lock-screen integration a saver bundle can’t reach. This is the default shape for Jorvik screensavers, established by Rainy Day and followed by ASCII Saver.

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.

Uninstalling

Quit Save Cannes from its menu bar icon and drag Save Cannes.app to the Trash. If you installed it with Homebrew, brew uninstall --cask perpetualbeta/jorvik/savecannes instead.

Building from Source

Save Cannes 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:

  1. Clone the repo: git clone https://github.com/PerpetualBeta/SaveCannes.git
  2. Local build, signed with the Jorvik Developer ID: gmake dev-build
  3. Run the freshly-built copy: gmake run
  4. Signed, notarised, stapled .zip + .pkg ready to ship: gmake release

Requirements

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