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. If you started it by hand, it waits for the pointer to stop before movement counts, so carrying on to move your hand away does not close what you just opened.

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, unless “Auto dismiss after” is set, which ends the activation on a clock whatever is playing.

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.

Each display can also be configured on its own. Choose Configure… beside a display and give it its own set of sources and its own size-on-screen mode. That is the setup for a desk where an ultrawide panel holds 21:9 films and the laptop screen holds something else entirely. Displays are identified by the hardware rather than by their position in the list, so a configured monitor still knows its own settings after a dock or a cable change.

Displays you never configure keep the global settings. A display you have configured plays exactly what you ticked for it, whether or not those sources are switched on in Sources: the include switches there decide what an unconfigured display plays, and a configured display has already been told. Configuring a display starts it with every source ticked, so untick the ones you do not want on it.

Or play on just one. With more than one display, the menu bar icon’s menu lists Play on for each of them. Choose one and that display plays on its own while you carry on working on the rest: it takes no keyboard focus, ignores the idle timeout and runs until you click it, or choose Stop from the same menu. Stopping it never locks the Mac. With “Displays have separate Spaces” off, the main display has no row, since it holds the only menu bar and the Dock.

Sound is off by default — a screensaver that starts talking to an empty room is nobody’s friend. With All displays 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. All displays and one single screen also gives sound to the first display you start on its own. A second one stays silent, for the same reason.

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.

You can switch it off for a while. Click the menu bar icon and choose Suspend, and Save Cannes stops activating on its own for as long as you like. The icon changes while it is off, so it cannot quietly stay that way for days without you noticing, and the setting survives a relaunch. Play now, from the menu or its keyboard shortcut, still starts the saver immediately either way: suspending only ever affects the automatic, idle-triggered kind.

It stays out of the way during a call. A video call, a film or a presentation holds a power assertion asking macOS to keep the display awake, and Save Cannes honours it. Sitting still through a meeting looks exactly like an empty desk if the only thing you measure is the keyboard. When whatever it was finishes, the idle countdown starts again from zero rather than firing the moment it ends.

It stops when something covers it. The lock screen, macOS’s own screen saver, or the display going to sleep: Save Cannes pauses the picture and the sound, so nothing plays behind a locked screen. When you come back it is dismissed as usual, locking first if you asked it to.

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.