macOS Tahoe: Black Wallpaper in Mission Control
A bug in macOS Tahoe (26.x) causes wallpapers to flash or remain black when transitioning between full-screen desktops via Mission Control.
Symptoms
When using Mission Control (Ctrl+↑) and then sliding between full-screen desktops (Ctrl+←/→), the wallpaper turns solid black during the transition. It may return after the animation finishes, or stay black until you force a refresh.
Key triggers:
- At least one app is in full-screen mode (green traffic light button)
- Navigating spaces via Mission Control (not Ctrl+←/→ directly on the desktop level, though that can also trigger it)
- More visible with Reduce Motion enabled (Accessibility > Display)
Scope
| Detail | |
|---|---|
| OS versions | macOS Tahoe 26.0 through 26.5.1 (confirmed) |
| Hardware | M1, M2, M3, M4 Macs (all Apple Silicon), also reported on Intel |
| First reported | September 2025 (26.0 release) |
| Apple status | Unacknowledged — no official fix or KB article as of 26.5.1 |
| Community volume | ~200 “Me Too” clicks on Apple Community, multiple Reddit threads, MacRumors discussions |
Root Cause
Community analyst kramola reverse-engineered the issue. The summary:
- macOS Tahoe renders wallpapers through a separate
WallpaperImageExtensionprocess, which renders images into apluginLayervia anOffscreenWindow - A
LayerMultiplexermanages these layers per space/display - When
pluginLayerbecomes stale (after sleep, display changes, or simply over time), theLayerMultiplexerfalls back toerrorLayer— which is pure black WallpaperImageExtensionthen re-renders, producing a visible black flash- With Reduce Motion ON, the transition is instant — no animation to mask the re-render. With animations ON, the ~0.5s slide hides it
WallpaperAgent invalidates the layer prematurely under certain conditions, logging: "Marking shared wallpaper as inactive. Will be purged in next resolution."
The root cause of the black flash is therefore a race condition in the wallpaper compositor pipeline — the layer goes stale and the fallback to black happens before the re-render completes.
Workarounds
1. Switch to a static wallpaper (most reliable)
Go to System Settings > Wallpaper and pick a still image instead of a dynamic/rotating wallpaper. This avoids the pluginLayer degradation entirely since static wallpapers don’t go through WallpaperImageExtension the same way.
Trade-off: you lose the dynamic wallpaper feature.
2. Disable Reduce Motion
System Settings > Accessibility > Display > Reduce Motion → OFF
The black flash still happens underneath, but the transition animation masks it visually. If you don’t mind the animations, this is a zero-effort fix.
Trade-off: you get the full Mission Control slide animations back, which may feel slower.
3. Hammerspoon auto-refresh (best for keeping dynamic wallpapers)
Install Hammerspoon — a free, open-source macOS automation tool that runs as a proper GUI app with full display session access:
brew install --cask hammerspoonAdd this config to ~/.hammerspoon/init.lua:
local wallpaperDir = "/Users/YOUR_USERNAME/Pictures/wallpapers"
local function setRandomWallpaper()
local files = {}
local handle = io.popen('find "' .. wallpaperDir .. '" -maxdepth 1 -type f \\( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.heic" \\)')
for file in handle:lines() do
table.insert(files, file)
end
handle:close()
if #files == 0 then return end
local randomFile = files[math.random(#files)]
for _, screen in ipairs(hs.screen.allScreens()) do
screen:desktopImageURL("file://" .. randomFile)
end
end
setRandomWallpaper() -- set on launch
hs.timer.doEvery(900, setRandomWallpaper) -- repeat every 15 minClick Reload Config in the Hammerspoon menu bar icon, and add Hammerspoon to System Settings > General > Login Items.
This keeps the wallpaper layer fresh by periodically forcing a rotation, preventing the stale-layer → black fallback.
4. Mission Control desktop reset (temporary)
- Press Ctrl+↑ to enter Mission Control
- Hover over each desktop and click the ✕ to remove it
- Click the + icon to add new desktops
- Reassign your wallpaper
This works temporarily but the bug returns after sleep or prolonged use.
Why shell scripts can’t work around it
macOS Tahoe intentionally blocks background processes from accessing the display session:
Could not switch to audit session: Operation not permittedThis breaks all approaches via cron, launchd, or shell AppleScript that try to change wallpapers from a non-GUI context. Hammerspoon works because it’s a proper GUI app that stays in the correct audit session.
What was ruled out as broken:
| Approach | Result |
|---|---|
launchd + osascript (System Events) | FSFindFolder error -43 |
cron + osascript (Finder) | Audit session blocked |
launchd + osascript (Finder) | Audit session blocked |
defaults write com.apple.desktop | macOS Tahoe ignores this plist (uses com.apple.wallpaper instead) |
cron + Swift (NSWorkspace.setDesktopImageURL) | Audit session blocked |
Monitoring
A weekly automated check monitors Apple Community, Reddit, MacRumors, and tech press for either an official fix from Apple or new workarounds. Updates are delivered to this page if anything changes.
References
- Apple Community: Wallpaper becomes black when swiping between full-screen apps
- Apple Community: Wallpaper disappears when switching desktops
- MacRumors: macOS Tahoe 26.4.1 — is the black wallpaper bug fixed?
- MacRumors: macOS Tahoe 26.5 RC — Bug fixes, changes, and more
- Mac Observer: Fix Black Wallpaper During App Transitions on macOS 26 Tahoe