Another approach is to create a window at desktop level. It can even display a web page with a system web view — you probably want to opt the window out of receiving mouse events, too, to avoid interfering with drag selection on the Desktop.
I do that at home with a local HTML file to randomly generate a desktop background at startup, and I’ve tried dynamic content (like a countdown clock). Code here: https://github.com/s4y/Dash
But for an app like this, you could do native, animated transitions, and avoid touching the desktop background settings.
Edit: you could even create a smaller interactive window (also at desktop level) with a link to the source, a button to advance to the next wallpaper…
Similar, but targeted more at desktop widgets is Ubersicht [0]. It provides a transparent, desktop-level browser window that lets you load and display widgets that get their input from CLI commands.
I recently looked into doing this for my Windows laptop, but found that it halved the battery life. Is this also a problem with running stuff like this on Macs?
Heh it's incredible hearing about someone _trying_ to do this one Windows (and Mac) - I have very vivid memories of Active Desktop on Windows 98 that let you set an HTML page as your 'wallpaper'/on your desktop https://en.wikipedia.org/wiki/Active_Desktop
I remember that some system crashes would cause it to disable itself, with a hyperlink to reenable it. I also remember being obsessed with converting movie clips into animated gifs, and setting those as my background.
Negligible energy consumption. I wrote a desktop timelapse wallpaper app for Mac that creates a below-the-desktop window containing a movie player and then plays the movie stretched over 24 hrs. Energy impact was small, something like 0.1 in Activity Monitor.
If your app/web page isn’t doing work in the background and doesn’t receive mouse events, the energy impact should be close to nil — it should sit solidly at 0.0% CPU usage in Activity Monitor, else something isn’t right.
Neat! Do you know if this works well across Spaces? I went with the wallpaper approach because I figured it was likely to be the least error-prone, especially across OS updates.
I'd point out, however, that when I first made Artpip (https://www.artpip.com/) I rendered backgrounds using a desktop level window but the performance overhead was too high when compared to just setting the backgrounds natively, so I ended up switching over to that instead. Artpip is made with Electron though, so if you do everything natively then maybe you'll see different results.
…that should give it roughly the same behavior as the system desktop window. If you want to have things like different windows for each space, that might require the brittle hacks you’re talking about :-).
By the way, I meant to say that your approach is super cool too, and the blur and shadow effects look great.
Creator of Artpip here. Came to suggest it as an alternative. Happy to answer any questions!
Also @OP - you might want to take a look at the wallpaper-macos[0] lib that I developed for Artpip. It uses the nodobj node wrapper but it should be a useful reference. You don't need to read from the sqlite DB or deal with restarting the dock. You can reliably get the current wallpaper like so [1]. Also you might want to check out how [2] it handles setting backgrounds on multiple spaces, should you want to support that.
Thanks for the links! desktopImageURL works if you're manually cycling your wallpapers, but it won't give you the correct result if you're relying on the native macOS cycling functionality. (It only returns the source image directory URL.) Hence the private functions and Dock restarting.
I suppose I envisioned the app as something that simply slotted on top of the native system behavior and wouldn't break anything when closed. Less hassles, less maintenance, and the user doesn't have to worry about automatic processes changing their system settings.
As a consequence, you can set the wallpaper for each Space to a different image or directory in System Preferences, and the app will only expose its "gallery management" features when it can match the current wallpaper with an image in its assigned Source directory.
Just downloaded your app, as I was looking for a more curated solution that what OP provides (I don't know enough about art to make my own selection).
One quick question I had was if it is possible to have Artpip only apply a background to one screen. I have an external monitor and I'd prefer if the two didn't always show the same wallpaper. Additionally, I have one personal wallpaper I particularity enjoy, and would like if I could keep that permanently on one monitor, while simultaneously running Artpip on the other.
Unfortunately no, not at the moment. This is a commonly requested feature though, so I'll definitely be adding support for different options for multi-monitor setups at some point.
I've setup a second monitor on my desk. I rarely use it, because I'm away so much, so it just shows art or whatever I'm into at the moment.
I also threw a folder onto Google photos and then linked that up with a Chromecast on one of the office TVs. Perfect for art. I think the original tool could work great in both cases.
This is a cool app, but isn't the idea to integrate it somewhere you end up looking already, rather than have to think to look at it and click the shortcut? I have the same problem, I always cmd+tab between windows so I never see my desktop.
In the past I used a chrome extension called tab.pics that shows a new landscape image pulled from reddit on every blank tab. It was kinda buggy though, it rarely shows the caption of what I'm looking at, and the source material isn't always that interesting or high enough resolution and sometimes doesn't load at all.
Just an idea, but if you converted BackgroundifierBuddy to a chrome extension I would totally use it.
I collect Maps of the World in a Dropbox folder, and tell Windows auto rotate to use this folder. So I see a different perspective or interpretation of "The World" every 10 minutes.
Some are just regions - USA, Europe, China, etc. Most are actual maps - places listed by Google searches or names translated from their native tongue, etc. A few are visualizations of the tallest mountains or longest rivers.
Very nice! Request: art gallery-like legends next to the artwork, with title/artist/date (I imagine this would only work with a curated source of art, but if I ever used something like this, I'd like to learn something too).
That was one of my original goals as well, but unfortunately there aren't many (any?) sources of downloadable art tagged with metadata. Hence, just the filename in the pop-up menu.
I realised the same thing when building Artpip and built up a database of ~25000 images and ~5000 artists via wikimedia's extremely unfriendly API.
I've thought about creating an open dataset that is free to use/download (everything is in the public domain anyway). The thing is, I have around 250GB of images (all images available in 4k) and I'm put off by the cost of hosting. If I were to just serve 2K images then the set would only be around 20GB.
Any suggestions for how to serve such a big file from a website?
I could just make it available as a dat (https://datproject.org), but it's not exactly a widely used technology yet. Maybe I should just make a torrent? Ideally I would be able to update the dataset in the future.
If you ever get around to doing that, it would be super great! That's some excellent cataloguing work! (And DAT would be really neat to try out — I've been reading a lot about it recently and it seems like a very exciting new technology.)
I see these kind of projects often, and I’m not sure how I feel about them. Art is more than just something nice to look at. By turning these pieces of art into wallpapers, it feels like the meaning, context, and significance are being stripped away. And you are missing the entire point. I could be entirely wrong as I’m no art expert.
I've recently been entranced by the late works of Wayne Thiebaud[1], to the point of checking out his collections at the library and meticulously scanning them in at home. Reading about the context and inspiration behind some of his pieces was illuminating, sure; but I still get the same feeling looking at his art even with this new information as I did when it first caught my eye at SFMOMA.
To me, the aesthetic and emotional impact of the art comes first, and everything else is just a value-add.
I agree with you on the point that aesthetic and emotional impact of the art is important, but I feel like having it as a wallpaper kind of takes that experience away. I think one has to be in a particular mood and mindset to really take that in. But having art as a wallpaper... I guess I am skeptical that the times between switching apps is the right time to take that all in.
Thank you for sharing that link! I remember seeing his work before at de Young museum and it brought back some memories :)
I guess I don't really see it as a wallpaper anymore, but an on-demand art gallery that just happens to be built using the wallpaper cycling functionality of macOS. My desktop is covered by windows 99% of the time anyway!
Yeah it's like putting music on in the background while you're doing something. You won't actually be paying attention to the lyrics or the notes that much compared to actively listening to a song.
Preview.app doesn't allow you to start off with a canvas of a specific size, and then start doodling though. I really think they should add this feature, because the Markup functionality in Preview is really good. What surprises me is that a lot of people don't know that Preview is very powerful.
Yes, I even cite it as an inspiration for making Backgroundifier! I loved the idea and execution, but I wanted to use my own art folders. It no longer appears to be for sale, unfortunately.
I was just hacking on something like this a few weeks ago. I was using Imagemagick and a bash script. In the end I wasn't to happy with my results and figured I was spending too much time. This looks great, I'm going to try it out.
I do that at home with a local HTML file to randomly generate a desktop background at startup, and I’ve tried dynamic content (like a countdown clock). Code here: https://github.com/s4y/Dash
But for an app like this, you could do native, animated transitions, and avoid touching the desktop background settings.
Edit: you could even create a smaller interactive window (also at desktop level) with a link to the source, a button to advance to the next wallpaper…