Your videos. Apple’s screensaver.
macpaper is a free terminal tool that turns a folder of videos into native macOS Screen Savers (and Wallpaper aerials) — the same system Apple uses for Aerials. No floating windows. No background apps. Just System Settings.
curl -fsSL https://raw.githubusercontent.com/anantdark/macpaper/refs/heads/main/scripts/install.sh | bashThen:
macpaper register ~/Movies/MyClips --name "My Clips"Reopen System Settings → Screen Saver, pick your category, and you’re done.
Site & guide: anantdark.github.io/macpaper
Apple’s Aerial screensavers look incredible — but they’re Apple’s clips, not yours. macpaper plugs your videos into that same pipeline so they:
- Appear in System Settings → Screen Saver and Wallpaper
- Support the native unlock / stop-screensaver freeze (temporal HEVC encode)
- Need no paid app, daemon, or overlay window
Think of it as: drop a folder in, get a real Mac screensaver out.
- macOS 26 (Tahoe) or later
- Homebrew (for the one-line install)
- ffmpeg (installed automatically via Homebrew)
- Xcode Command Line Tools (one-time; macpaper compiles tiny helpers on first use)
- Download at least one built-in Aerial once in System Settings (creates Apple’s catalog file)
One-shot:
curl -fsSL https://raw.githubusercontent.com/anantdark/macpaper/refs/heads/main/scripts/install.sh | bashOr step by step:
brew tap anantdark/macpaper
brew trust anantdark/macpaper # Homebrew 6+ third-party taps
brew install macpaper
macpaper version- Put some videos in a folder, e.g.
~/Movies/MyClips - Install macpaper (above)
- Register the folder:
macpaper register ~/Movies/MyClips --name "My Clips"- Quit and reopen System Settings
- Go to Screen Saver (or Wallpaper) → find My Clips in the aerial collections
- Select a clip and enjoy
First run may take a few minutes per video while macpaper encodes them the way macOS expects.
| What you want | Command |
|---|---|
| See what’s registered | macpaper list |
| Add / refresh a folder | macpaper register ~/Movies/MyClips |
| Remove one video | macpaper unregister sunset.mp4 |
| Remove a whole folder | macpaper unregister ~/Movies/MyClips |
| Check if a file is ready | macpaper check ~/Movies/clip.mp4 |
| Reload Settings | macpaper refresh |
| Guided menu | macpaper (no arguments) |
unregister accepts a folder path, asset UUID (from list), file path, or filename.
| Option | Meaning |
|---|---|
--name NAME |
Name shown in Settings (default: folder name) |
--videos-only |
Only live aerial videos |
--images-only |
Only still-image folder registration |
--force-transcode |
Re-encode everything, even clips already cached |
--no-transcode |
Skip encode (screensaver may work; freeze often won’t) |
--quality {standard,high,max} |
Encode bitrate preset (default: high) |
--loop-to SECONDS |
Loop short clips during encode to at least SECONDS (default: 0 / off; 300 mimics Apple length — slow) |
--save-transcoded |
Also keep copies under <folder>/transcoded/ |
--dry-run |
Preview only |
Re-running register on the same folder keeps already-encoded aerials and only encodes new or changed files (source newer than cache). After unregister, ready files under <folder>/transcoded/ are reused on the next register. Use --force-transcode to redo everything.
- Encodes use VideoToolbox temporal HEVC (hardware on Apple silicon) at ~240 fps frame-hold when the source is slower
- Duration is not padded to ~300s by default; use
--loop-to 300only if you want Apple-length files (slow) - Interrupted batches: run
registeragain — finished clips stay skipped - Prefer
--save-transcoded(or answer y) so unregister → register can reuse local.movcopies without encoding again - Preview with
--dry-runto see keep / reuse / encode per file
Videos: .mp4 .mov .m4v .mkv .avi .webm .mts .m2ts
Images: .jpg .jpeg .png .heic .heif .tif .tiff .gif .webp .bmp
macpaper unregister ~/Movies/MyClips # whole folder
macpaper unregister B5F705B9-5A54-… # one video by id
macpaper unregister sunset.mp4 # one video by name
macpaper unregister-video sunset.mp4 --yesmacpaper check ~/Movies/clip.mp4
macpaper list
macpaper refreshcheck result |
Meaning |
|---|---|
| ready | Screensaver + stop → wallpaper freeze |
| screensaver only | Plays as screensaver; freeze needs re-encode |
| needs encode | Will be encoded on register |
macpaper doesn’t invent a fake screensaver. It publishes your clips into macOS’s built-in aerial catalog — the same place Apple’s Aerials live — then restarts WallpaperAgent so Settings notices.
Videos are encoded with HEVC temporal layers (required for the native freeze-as-wallpaper ramp). That’s something ordinary ffmpeg alone can’t do; macpaper uses a small VideoToolbox helper for it.
- Calm clips feel best as screensavers; freeze-as-wallpaper does not need long loops
- Encode is once-through by default (no pad-to-300s). Use
--loop-to 300only if you want Apple-length clips - Re-run
registerafter you add files — already-registered clips are kept; only new/changed ones encode - Keep
transcoded/copies (answer yes /--save-transcoded) so unregister → register can skip re-encode - Unregister does not delete
transcoded/; only Settings + aerial-cache copies go away - If Settings was open during register, quit it or run
macpaper refresh - Re-encode everything with
macpaper register <folder> --force-transcode - Stopped mid-batch? Re-run
register— completed encodes resume as kept
macpaper unregister ~/Movies/MyClips --yes # each folder you registered
brew uninstall macpaper
brew untap anantdark/macpaper
rm -rf ~/Library/Application\ Support/macpaperYour original videos are never deleted — only system copies and Settings entries.
Built for people who want custom Mac screensavers without buying another wallpaper app.