A featherweight macOS menubar app that keeps your desktop fresh with stunning wallpapers β powered by the free Pexels API.
β¬ Download Latest DMG Β· Get Free Pexels API Key Β· Report a Bug Β· Request a Feature
| Feature | Details |
|---|---|
| π₯ Menubar-only | Lives quietly in the menu bar β no Dock icon, no window clutter |
| π· 6 Built-in Categories | Nature Β· City Β· Minimal Β· Abstract Β· Space Β· Architecture |
| βοΈ Custom Categories | Add any keyword you want β cyberpunk, anime, forest rain, anything |
| β‘ One-click wallpaper | Fetch and set a new random wallpaper in seconds |
| π Browse grid | Preview a scrollable grid of photos, click any to set it |
| β± Auto-change timer | Automatically change wallpaper every 5 / 10 / 15 / 30 / 60 / 120 minutes |
| β³ Live countdown | See exactly how long until the next auto-change |
| π Launch at login | Starts automatically when you log in |
| π Minimal resources | No background polling β barely registers in Activity Monitor |
| π¦ Zero dependencies | 100% Swift + SwiftUI + AppKit, no third-party packages |
| π Completely free | Powered by Pexels β free API, no credit card, no rate limits for personal use |
-
Go to Releases
-
Download
PersonalWallpaperEngineLite-x.x.x.dmg -
Open the DMG and drag Personal Wallpaper Engine Lite to Applications
ββββββββββββββββββββββββββββββββββββββββββββββββ β β β [ π· App ] βββββββββββΊ [ Applications ] β β β ββββββββββββββββββββββββββββββββββββββββββββββββ -
Launch from Applications β a π· icon appears in your menu bar
-
Click the icon β Settings tab β paste your Pexels API key
First-launch Gatekeeper warning? The app is unsigned (no Apple Developer account needed to distribute). Right-click the app in Finder β Open β Open β you only need to do this once.
Prerequisites: Xcode 15+, macOS 13+
# Clone the repository
git clone https://github.com/devShakib015/personal_wallpaper_engine_lite.git
cd personal_wallpaper_engine_lite
# Open in Xcode
open PersonalWallpaperEngineLite/PersonalWallpaperEngineLite.xcodeprojPress βR to build and run. Or build a local DMG:
brew install create-dmg
./scripts/build-dmg.sh 1.2.0
# β outputs to ./build/PersonalWallpaperEngineLite-1.2.0.dmgPexels is completely free β no credit card, no paid tiers.
- Go to pexels.com/api
- Click "Get Started" and create a free account
- Your API key is shown immediately on the dashboard
- In the app: click the π· menu bar icon β Settings β paste the key
That's it. You're ready to go.
π· Menu Bar Icon
βββΊ Home tab
ββ Toggle category chips (built-in or custom)
ββ Click "Set Random Wallpaper"
π· Menu Bar Icon
βββΊ Home tab
ββ Click the [+] button next to "Categories"
ββ Type any keyword: "cyberpunk", "anime", "rainy forest"...
ββ Press Enter or click "Add"
Custom chips appear with an [Γ] to remove them anytime.
π· Menu Bar Icon
βββΊ Browse tab
ββ Click [β»] to load a photo grid
ββ Click any thumbnail to preview it
ββ Click "Set as Wallpaper" in the preview
π· Menu Bar Icon
βββΊ Settings tab
ββ Toggle "Enable auto-change" ON
ββ Pick an interval: 5 min / 10 / 15 / 30 / 60 / 120
ββ A countdown timer appears in the Home tab
π· Menu Bar Icon
βββΊ Settings tab
ββ Toggle "Launch at login" ON
PersonalWallpaperEngineLite/
βββ PersonalWallpaperEngineLiteApp.swift @main β accessory app (no Dock icon)
βββ AppDelegate.swift NSStatusItem + NSPopover setup
β
βββ Models.swift PexelsPhoto, PhotoSrc (Codable)
βββ WallpaperCategory.swift 6 built-in categories with SF Symbols
β
βββ UnsplashService.swift Pexels API client (URLSession only)
β βββ fetchRandomPhoto([String]) Random photo from active categories
β βββ fetchPhotos([String]) Paginated search for Browse grid
β βββ downloadImage(urlString) Download full-res image data
β
βββ WallpaperSetter.swift NSWorkspace.setDesktopImageURL
β Applies to all connected screens
β
βββ WallpaperViewModel.swift @MainActor ObservableObject
β βββ selectedCategories Built-in preset chips (UserDefaults)
β βββ customCategories: [String] User-defined keywords (UserDefaults)
β βββ activeQueryTerms Merged preset + custom for API
β βββ autoChangeEnabled / Interval Timer settings (UserDefaults)
β βββ fetchAndSetRandomWallpaper() Full fetch β download β set flow
β βββ resetTimer() Native Timer.scheduledTimer
β βββ applyLaunchAtStartup() SMAppService (macOS 13+)
β
βββ MenubarPopoverView.swift 340Γ460 popover root (3 tabs)
βββ HomeTabView.swift Quick-set + category chip grid
βββ BrowseTabView.swift LazyVGrid + full-screen preview sheet
βββ SettingsTabView.swift API key Β· timer Β· login item Β· quit
Every version tag triggers the GitHub Actions workflow to:
- Archive the app with
xcodebuild - Package a polished
.dmginstaller withcreate-dmg - Publish a GitHub Release with the DMG attached and auto-generated changelog
git tag v1.3.0
git push origin v1.3.0The workflow handles everything. You can also trigger a manual build from Actions β Build & Release DMG β Run workflow.
- No telemetry β the app never phones home
- Network access β only to
api.pexels.comandimages.pexels.comover HTTPS - Local storage β API key and all preferences stored in
~/Library/PreferencesviaUserDefaults - Temp files β wallpaper image written to
NSTemporaryDirectory(), cleaned up by macOS - App Sandbox β disabled, which is required for
NSWorkspace.setDesktopImageURLto work outside the Mac App Store - URL safety β all query parameters encoded via
URLComponents, no raw string interpolation
"Pexels API key is missing" on first launch
Click the π· menu bar icon β Settings tab β paste your API key from pexels.com/api.
macOS says the app is from an unidentified developer
The DMG is unsigned. To open it:
- Right-click the app in Finder
- Click Open
- Click Open again in the dialog
You only need to do this once.
Wallpaper doesn't change
- Make sure at least one category chip is active (highlighted in blue)
- Verify your Pexels API key is correct in the Settings tab
- Check your internet connection
"Launch at login" toggle has no effect
macOS may require manual approval: System Settings β General β Login Items β enable the toggle next to Personal Wallpaper Engine Lite.
Build fails in Xcode: "No account for team"
In Xcode β Target β Signing & Capabilities β set Team to your personal Apple ID (free accounts work for local builds).
| Minimum | |
|---|---|
| macOS | 13.0 Ventura |
| Xcode (to build) | 15.0 |
| Swift | 5.9 |
| Pexels API key | Free β pexels.com/api |
- App icon design
- Notarized & signed release
- Favorite / save wallpapers locally
- Per-monitor wallpaper (different image per screen)
- Wallpaper history with undo
- Custom Pexels collection support
MIT License β see LICENSE for details.
Made with β₯ using SwiftUI Β· Powered by Pexels Β· Zero external dependencies Β· macOS only