Apple - How to set a custom dynamic wallpaper in Catalina?

There are 4 solutions to this problem.

  1. Easiest

    • select Catalina wallpaper (System Preferences->Desktop & Screen Saver)
    • make sure the popup button has selected Dynamic item
    • close the System Preferences
    • locate your wallpaper, right click on it and select Services->Set As Wallpaper enter image description here
  2. Mid (requires tools) Remove Still images from dynamic wallpaper

    • recreate dynamic wallpaper without still images (remove appearance metadata)
    • dynamic wallpapers without still images will cause only one menu item to be present and it will automatically get selected
    • Dynaper has the Remove Still Images Helper tool enter image description here
  3. Hardest (but best). Place dynamic wallpaper into System/Library/Desktop Pictures/

    • disable SIP
    • reboot
    • open terminal and make System partition writable sudo mount -uw /
    • copy wallpaper with root sudo cp path/to/wallpaper System/Library/Desktop\ Pictures/
    • OPTIONAL: copy custom thumbnail (same name as wallpaper) with root sudo cp path/to/wallpaper System/Library/Desktop\ Pictures/.thumbnails/
    • enable SIP
  4. Hardcore

    • use Xcode: attach to process com.apple.preference.desktopscreeneffect.desktop.remoteservice and Debug view hierarchy
    • find the incorrect popup button address
    • pause program execution
    • run command [0xaddress setHidden:YES]
    • resume program execution
    • modify wallpaper selection to Dynamic

Explanation:

Starting macOS Catalina the system prefers Dark still image on dark appearance. Due to bug 2 overlaping popup buttons are displayed. For images inside System/Library/Desktop Pictures/ the disableCustomPlacement is set to YES (this makes the other popup to be hidden) . All other locations will have this property set to NO (this causes 2 popups to be displayed).

 Derived Properties:
     pictureChangeIsActive:  0 
     canSetBackgroundColor:  0 
     disableCustomPlacement: 0 >

Debug panel enter image description here


Copy your .heic file into /Library/Desktop Pictures. Then, you'll need to somehow get the list of pictures to repopulate. This seems to sometimes happen to me when unplugging displays, or just after waiting long enough, or, most reliably, after a restart. Then your new desktop should appear in the list of Dynamic Desktops under System Preferences:Desktop & Screen Saver:Apple/Desktop Pictures.

It seems like Apple prevents the Fill Screen/Fit Screen menu from showing up in the Apple folders, since they presume that all of them are already properly sized. This avoids the issue where they located those two menus on top of each other, which is what's preventing us from just loading the wallpapers directly.


As the Library/Desktop Pictures/ is located under /System/ (which is protected by SIP), users don't have write access in there. To workaround this, you can boot into Recovery Mode, disable SIP, restart, move pictures into the default folder, boot back into Recovery Mode, enable SIP and then restart. But all of this seems like overkill just to change a wallpaper.

There's another way to change your custom dynamic wallpaper to "dynamic". Do the following instead:

  1. Go to sys prefs > desktop & screen saver and choose the default dynamic Catalina wallpaper. Set it to "dynamic" and exit sys prefs.

  2. Open Finder and navigate to the folder where your custom wallpaper lies. Right click your custom wallpaper and choose Set desktop picture. This will change the wallpaper while also preserving the dynamic setting.

Tested on macOS Catalina 10.15.2