One of my favorite D&D YouTubers, Ginny Di, releases a calendar every year as one of her main projects. This year’s theme, DungeonDolls, features her turning various cosplay photo shoots into fake advertisements for D&D-themed Barbie dolls (a spin-off of some of her more popular recent videos where she turns actual Barbies into D&D characters). When this was announced, I quickly purchased the deluxe edition, which came with a bunch of digital files. For each month, there’s header art with text, header art without text, and an image meant to be used as a desktop wallpaper that includes a monthly calendar.
I immediately tried using the calendar version as my background, but I ran into a snag: I have three monitors with vastly different aspect ratios. Between my MacBook Pro (16:10), a vertical 4K monitor (9:16), and an ultrawide monitor (21:9), the art just didn’t fit. The vertical monitor—the one most likely to actually have enough empty space for me to see the wallpaper—ended up with massive blank gaps above and below the art, which I ended up filling with widgets and windows.
This month, Barbara and I are heading to Disneyland to celebrate our 20th wedding anniversary (that’s right, I’ve been married for nearly 2 decades now). Our actual anniversary is in July, but we're taking the trip a couple of months early to take advantage of the cooler spring weather and beat the summer school-out crowds. As the month kicked off, I was so excited that I opened up an image editor and manually added our upcoming trip to the calendar. Every day, I’d go back in and put a red "X" over the days that had passed.
It looked really good, but… I’m a Software Engineer. Making me do a repetitive manual task every single day was going to get old real quick.
So, I fired up Google's Antigravity IDE and started vibe coding. I built a TypeScript script that takes a simple JSON config file and a folder full of images, automatically detects the aspect ratios of all connected monitors, generates perfectly sized images for each, and sets them as the desktop backgrounds. It even generates and installs a scheduled task on macOS or Windows to keep the wallpapers updated continuously.
Right now, I’m running this with a folder of Ginny Di’s art and a config file loaded with my events. The script runs automatically whenever my computer boots up, and if I happen to be online at midnight, it runs then too—automatically X-ing off passed days and updating the screen with any new events I've added to the config.
I didn't stop there. I also added support for pulling in public ICS calendar URLs, along with a bunch of nifty date-processing features to handle holiday rules like "Last Monday in May" or "Day after Fourth Thursday in November."
Here is the generated equivalent of the manually created calendar from before (with a few of the extra features tacked on):
One of my favorite features is that the script actually analyzes the colors of the selected image and automatically generates matching background and accent colors. For example, Ginny's April art is a rather dark theme with a teal accent, so the script matched that. But May has a much brighter image with a vibrant teal background and brown accents. When the month flips from April to May, the entire generated UI will update its color palette accordingly.
Here is what the calendar on my non-wide monitor will look like on May 1st (unless I add more events before then, of course):
To give you an idea of how easy it is to configure, here is a snippet of what the JSON config file looks like:
I’m releasing this on my GitHub under an MIT license in case you find it useful and want to set it up yourself. I haven’t tested it on Windows yet (I plan to later this week), but it works flawlessly on macOS. Note: Because I don’t own Ginny Di's art, the repo doesn't include her calendar files—you’ll have to populate the folder with your own images.
I hope some of you find this as incredibly useful as I have. I’m honestly pretty proud of it for just a short evening's worth of work!