i love me some more displays, especially when i can customize them. wallpaper engine is something i've been running for YEARS now, usually on some nostalgia-core or ascii wallpaper that's not too distracting.
i found one called neofetch terminal that looks really nice, but i couldn't get it to fit nicely on the little "status" monitor i have, with is about 9x3 inches at 1920x480px res. the OP even made a horizontal mode after i requested it - but i still wasn't satisfied.
wallpaper engine has custom wallpaper types created in it's own editor, but some wallpapers are actually "web" wallpapers - which run in a chromium browser, so we have access to javascript and some specific framework functions exposed from wallpaper engine, like getting user media data (spotify for instance).
since this is a workshop download, you can browse the files and edit them. i made a copy and set off to make some changes with the help of claude code. i did spend some time rifling through the files, but i realized that claude could super easily digest the format and make the same changes in a fraction of the time.
optimizing the layout
since i only care for horizontal layouts, i opted to put the album art in its own column, with the music in the next column. from there, i could add whatever i pleased
i changed the renderer for the current song's seekbar, and claude added the cherry on top with the ability to change the style via different ascii characters. since the old layout had a lot more space, i stripped out any unnecessary layout and compacted the information.
the album art was tricky, because the wallpaper has a setting for character/font size, and since this is all text it would change the size of the album art which also has its own resolution. higher res = more characters, so the higher res and higher font size meant the album art would take up a lot more space. luckily, i had claude find the best approach, which was to calculate the character size independent to the rest of the app so that it would maintain its resolution, but also scale to the height of the layout.
server status
as i am now running a mac mini for my magicmirror display, i thought it would be really handy to have a server status display to show basic stats. i wrote a little python/flask server that runs on boot of my server that will send over basic stats, and are then displayed. since we can natively fetch in js, it can't get any simpler to setup a polling interval to fetch and display this data. super simple.
the companion program
i wanted to get more complicated, and since WE (wallpaper engine) uses javascript and a chromium browser, there's a lot of limitation for what kind of information we can get from the host machine.
in order to get discord status, i needed to have a companion program run in the background that sends data via websockets to my app. discord has a discord-rpc package for node that can authorize using a discord developer app, and can then act as an actor/listener of discord's status on the current machine.
i opted to display them in simple icons like if the program is connect, if i'm in an active call, muted and/or deafened.
now that we have a companion program, we can piggy-back right off it to get more information and features. the original wallpaper uses text inputs in the settings to fill in the computer specs, but i decided to use the "bridge" to fetch that and more, like all the mounted disks and their sizes.
lastly is probably the coolest yet, which is a live microphone input waveform. i dreamt it up, and claude just destroyed it. it spit out some crazy C# that runs to capture and send microphone levels. again, the most fun part for me was that it created different styles to choose from.
the outcome
i used to be so terrified of letting ai do the work - and i still am going to remain skeptical because i think that's important. but as i continue to have aspirations to do cool things, i actually seem to lose energy to do them. i start soon after all the interest fades because it becomes WORK, i now have to suddenly dive deep and learn about this random knowledge to overcome a task - which is fun most of the time, but when you already lack energy it becomes wayyyyy too difficult. so the outcome is to let ai do all the boring stuff. it's better to make something exist and get things done as long as you still do the fun parts.