Play videos, GIFs, and YouTube streams as your desktop wallpaper — including the lock screen.
No subscription. No account. No tracking. Just your Mac, looking alive.
- Live desktop wallpaper — MP4, MOV, M4V video files play seamlessly on your desktop, behind all your icons and windows
- Animated GIFs — Frame-accurate GIF playback using native CoreAnimation, zero CPU overhead
- YouTube URLs — Paste any YouTube link and it streams directly as your wallpaper (no download, no yt-dlp)
- Lock screen / screen saver — Ships with a
.saverbundle so the same wallpaper plays when your Mac locks - Multi-display — Each monitor gets its own independent wallpaper
- Menu bar app — Lives quietly in your menu bar with no Dock icon
- Auto-pause — Pauses automatically when your display sleeps or screen locks
- Launch at Login — Optional, one toggle in Preferences
- Zero dependencies — No Electron, no frameworks, no package manager. Pure Swift + AppKit.
| Download | Description |
|---|---|
| Aura-1.0.dmg | Main app + screen saver bundle |
System requirement: macOS 13 Ventura or later (Apple Silicon & Intel)
First launch note: Aura is not signed with an Apple Developer certificate (that costs $99/year — this app is free). On first launch, macOS will block it. To open: right-click → Open → Open.
- Download
Aura-1.0.dmgfrom the link above - Open the DMG and drag Aura.app into your Applications folder
- Launch Aura — a ✦ sparkle icon appears in your menu bar
- Click it → Set Wallpaper… and pick any
.mp4,.mov, or.gif
- Inside the DMG, open the
AuraSaverfolder - Double-click AuraSaver.saver — macOS will ask to install it
- Go to System Settings → Screen Saver and select Aura
- The same video you set as wallpaper will play on your lock screen
Click the ✦ icon in your menu bar to access:
| Option | Description |
|---|---|
| Set Wallpaper… | Open file picker — MP4, MOV, M4V, GIF |
| Pause / Resume | Toggle playback on all displays |
| Preferences… | YouTube URL input, launch-at-login, mute |
| Quit Aura | Stop wallpaper and exit |
- Open Preferences → Displays
- Paste any YouTube URL into the field (supports
youtube.com/watch,youtu.be, Shorts, embeds) - Click Apply — the video streams directly as your wallpaper
Supported URL formats:
https://www.youtube.com/watch?v=dQw4w9WgXcQ
https://youtu.be/dQw4w9WgXcQ
https://www.youtube.com/shorts/abc123
- macOS 13 Ventura or later
- Xcode 15 or later
- XcodeGen (
brew install xcodegen)
git clone https://github.com/tathagat22/aura-wallpaper.git
cd aura-wallpaper
# Generate the Xcode project from project.yml
xcodegen generate
# Open in Xcode
open Aura.xcodeprojIn Xcode, set your Development Team in both the Aura and AuraSaver targets, then press Cmd+R to run.
Note: The
.xcodeprojis not committed to git — it's generated fromproject.ymlby XcodeGen. This keeps diffs clean and avoids merge conflicts in the project file.
# Build both targets
xcodebuild -project Aura.xcodeproj -scheme Aura -configuration Release \
CODE_SIGN_IDENTITY="-" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO build
xcodebuild -project Aura.xcodeproj -scheme AuraSaver -configuration Release \
CODE_SIGN_IDENTITY="-" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO build
# Package into DMG
PRODUCTS="$(xcodebuild -project Aura.xcodeproj -scheme Aura -showBuildSettings \
-configuration Release 2>/dev/null | grep ' BUILT_PRODUCTS_DIR ' | awk '{print $3}')"
mkdir -p /tmp/AuraDMG/AuraSaver
cp -R "$PRODUCTS/Aura.app" /tmp/AuraDMG/
cp -R "$PRODUCTS/AuraSaver.saver" /tmp/AuraDMG/AuraSaver/
ln -sf /Applications /tmp/AuraDMG/Applications
hdiutil create -volname "Aura" -srcfolder /tmp/AuraDMG -ov -format UDZO ~/Desktop/Aura-1.0.dmg
rm -rf /tmp/AuraDMGAura uses 100% public Apple APIs — no private frameworks, no hacks.
An NSWindow is created for each display with its level set to CGWindowLevelForKey(.desktopWindow) + 1. This places it above the macOS desktop background but below Finder's icon layer. The window is borderless, ignores mouse events, and joins all Spaces.
window.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.desktopWindow)) + 1)
window.collectionBehavior = [.canJoinAllSpaces, .stationary]
window.ignoresMouseEvents = trueAura ships a .saver bundle built with ScreenSaver.framework. Installing it in System Settings → Screen Saver makes it play when your Mac locks. Both the app and saver share config via an App Group (group.com.aura.app).
No yt-dlp, no external tools. Aura calls YouTube's internal Innertube API directly to fetch a stream URL, then hands it to AVPlayer. The video streams without downloading.
Aura/ ← Main app target (menu bar agent)
├── App/
│ ├── AppDelegate.swift ← System sleep/wake observers
│ ├── MenuBarController.swift ← NSStatusItem + menu
│ └── main.swift ← Entry point
├── Wallpaper/
│ ├── WallpaperWindow.swift ← NSWindow positioned at desktop level
│ ├── WallpaperView.swift ← NSView hosting playback layers
│ └── WallpaperManager.swift ← One window per display, screen change handling
├── Playback/
│ ├── VideoPlayer.swift ← AVPlayer with infinite loop
│ ├── GIFPlayer.swift ← CAKeyframeAnimation from GIF frames
│ └── YouTubeExtractor.swift ← Innertube API → stream URL
├── Preferences/
│ ├── PreferencesWindowController.swift
│ └── PreferencesView.swift ← SwiftUI: General + Displays tabs
└── Utilities/
├── LoginItemManager.swift ← SMAppService launch-at-login
└── PowerMonitor.swift ← IOKit battery/AC detection
AuraSaver/ ← Screen saver bundle (.saver)
└── AuraSaverView.swift ← ScreenSaverView + AVPlayerLayer
Shared/ ← Compiled into both targets
├── AppGroupConfig.swift ← Shared UserDefaults wrapper
└── MediaSource.swift ← Enum: localFile | gif | youtube
project.yml ← XcodeGen project spec (source of truth)
Contributions are welcome! Please read CONTRIBUTING.md before opening a PR.
- Bug reports → Open a bug report
- Feature requests → Open a feature request
- Pull requests → Fork → branch → PR against
main
- Pause on battery power
- Per-display independent wallpapers (UI)
- Playlist / shuffle mode
- Signed & notarized release build
MIT — see LICENSE for details.
Made with ♥ on macOS · No Electron was harmed in the making of this app
