TL;DR — Wallnetic 1.4 makes the wallpaper look after itself: playlists, a matching lock screen, a per-display watchdog that recovers playback after two stalled 5-second samples, and new pauses for screen lock and user switching. The candid part — a SwiftUI reactivity bug kept two schedulers from starting, and macOS 26 window buttons took two fixes.
Since late June, Wallnetic has shipped three releases. 1.4.0 went out only as a GitHub DMG, so Mac App Store users went from 1.3.1 straight to 1.4.1, then 1.4.2. This is part 1 of our product notes — what changed in Wallnetic and Blink AI since our last posts, shipped work only.
What changed for users
- Playlist and shuffle. The wallpaper rotates on an interval you pick, from 5 minutes to once a day, shuffled or in order, from the library, favourites or one collection.
- A matching lock screen. The lock screen and Mission Control show a still frame of the current video, not an unrelated picture.
- Self-healing playback. A stalled wallpaper recovers on its own.
- Smarter pausing. On top of display sleep, fullscreen apps and Low Power Mode, Wallnetic now pauses for screen lock and fast user switching, and the screen-saver pause finally fires. Since 1.4.2, a pause you asked for survives lock, wake and the screen saver.
- Window controls on macOS 26 Tahoe. Close and minimise buttons are back.
- Revised Dynamic Island and top bar. Hover, inline rename and first clicks now respond.
- Library and import fixes. Concurrent imports no longer collide, and opening links or importing downloaded wallpapers no longer crashes on malformed input.
- Checksummed direct downloads. The 1.4.2 GitHub DMGs are built from the same source and version as the App Store build, with SHA-256 checksums.
Why the playlist never started
The playlist merged with a green test suite and never rotated. Its settings were @AppStorage properties inside an ObservableObject, where @AppStorage does not fire objectWillChange. The view never re-rendered, the toggle’s .onChange never fired and no timer was scheduled; the tests covered which wallpaper comes next, not the toggle. We caught it on a real Mac before release and moved the settings to @Published properties persisted in didSet. Time-of-day switching had used the same pattern since 1.1.0 and got the same fix. The pattern survives elsewhere in the codebase, so we do not call it solved.
Lock screen and display identity
macOS draws the system wallpaper, not our video window, on the lock screen and in Mission Control. Our old lock-screen video window could never appear there, because the lock screen runs in a separate secure session — it only kept a decoder busy. We deleted it. The replacement extracts a frame with AVAssetImageGenerator and applies it as each display’s system wallpaper through NSWorkspace.shared.setDesktopImageURL(_:for:options:).
The same change keyed windows and renderers by CGDirectDisplayID instead of NSScreen. macOS recreates NSScreen objects on sleep, wake and hot-plug, so lookups silently missed and, in per-display mode, the main display often stopped updating.
Watchdog and smarter pausing
The watchdog samples each display’s playback clock every 5 seconds; two consecutive samples without progress count as a stall, and only that display is nudged back into playback. The pure function behind it, PlaybackWatchdog.isFrozen, never calls a wallpaper frozen while it is meant to be paused. The screen-saver pause had never fired: its observers listened on NotificationCenter.default for cross-process notifications that only arrive on DistributedNotificationCenter. On every resume, Wallnetic now re-reads lock and session state from the window server rather than trusting notifications to arrive in pairs.
What was hard
- Tahoe, twice. A transparent window removed the material macOS 26 draws the buttons against — fixed by making it opaque. A later report still showed no buttons, so 1.4.2 switched to a native title bar.
- A regression we shipped. New resume paths in 1.4.1 revived wallpapers the user had paused — fixed in 1.4.2 by resuming only pauses we caused.
- Actor reentrancy. Our import gate trusted actor isolation, which admits a second import whenever the first awaits — fixed with an explicit permit and wait queue.
- Panels that are never key. SwiftUI’s
onHoverrelies on the key window, which the Dynamic Island panel never is — fixed with an.activeAlwaysAppKit tracking area.
What this buys
Most of 1.4 is invisible when it works: the wallpaper rotates, recovers and steps aside on its own. We chose this over a second macOS product, which went on our Q3 no list. Next in product notes: how Blink AI now plays SCORM and H5P content it did not write — safely.
Frequently asked questions
Why doesn’t my live wallpaper show on the Mac lock screen?
Because macOS draws the system wallpaper on the lock screen and in Mission Control, and an app’s video window cannot appear above the lock screen, which runs in a separate secure session. Since 1.4.1 on the App Store, Wallnetic sets a still frame of your current video as the system wallpaper, so those surfaces match your desktop.
How do I make Wallnetic shuffle wallpapers automatically?
Turn on the playlist in Settings, or choose Shuffle Wallpapers from the menu bar. Wallnetic then changes the wallpaper on an interval you pick, from 5 minutes to once a day, shuffled or in order, from your library, your favourites or one collection. Turning it on switches off time-of-day switching, so the two never compete.
Working on something similar?
T-Square architects, builds and operates production systems for learning, AI and custom software products. Talk to a senior engineer for a second opinion.