The kind of photo i like displaying on my Netgear Meural Canvas II. Image Anthony Nelzin-Santos.
Antwerpen (BE), 2026.08.

MeuralManager: i wrote a CLI so i never have to open the Meural app again

The Netgear Meural Canvas II digital photo frame is one of my favourite devices i own. Its 21.5″ display offers adequate colour reproduction and superb viewing angles. Its design is nothing to write home about, but combined with the matte coating that prevents most if not all glare, it doesn’t read as ‘i’ve put a glaring display on the wall’. It turns on in the morning, it turns off in the evening1, and in between, it’s a subtle reminder of holidays, events and moments. It’s just plain nice… if it weren’t for everything else about it.

Until Netgear silently rewrote their authentication flow a few months ago, their app would disconnect immediately after i connected, a bug that’d been going on for years. They designed their website to discourage you from uploading your own pictures and push you towards their subscription service. Their backend is slow and unreliable, you can’t delete multiple items at once, deleting a playlist silently leaves its contents behind, and moving items from one playlist to another is torture. You can disconnect your Meural Canvas from Wi-Fi and use SD cards, but you most definitely won’t, thanks to their insane list of requirements.

Trying — and failing — to upload the photos from my trip to Antwerpen and my visit to the Apple Museum was the last straw. I broke down and spent a few hours writing MeuralManager, a command-line interface for the Meural API. It fixes almost all of my pain points with their app and website:

  • it can list every playlist with an item count;
  • it can identify orphaned items;
  • it can upload photos in a new or an existing playlist;
  • it can move photos between playlists without re-uploading them;
  • it can delete photos and playlists.

Unfortunately, it doesn’t make Netgear’s backend faster and more reliable. MeuralManager can resize your photos before uploading them, saving on both transfer times and server-side processing. When the upload times out, which happens fairly often, it waits for 4 seconds before retrying. If it still times out, it backs down to 8, then 16 seconds, before a new attempt. If that still doesn’t work, or if the upload is interrupted, re-running the same command will continue from where it left off without creating duplicates.

As a safety precaution, write commands default to a dry run. You have to pass the --execute argument to expressly authorize them to change things in your library. In addition, deletions require typing DELETE at the prompt to confirm the operation. The export command allows you to back up your photos before doing anything destructive. (Don’t ask me why i’ve added these safeguards.)

Netgear, like many others, moved their authentication gateway behind bot-detection middleware that signs each login request with headers generated by obfuscated in-page JavaScript. In effect, usernames and passwords (and every older script that still uses them) are now useless. MeuralManager doesn’t scrape your authentication token on your behalf2: you have to paste it from your browser’s developer tools.

Thanks to MeuralManager, i’ve been able to completely reorganize my playlist and upload my latest photos in a few commands. It’s not fast, but that’s not my fault, and it’s much more reliable than Netgear’s own app and website. As it was debugged and documented with the help of Claude Code, i’m dedicating it to the public domain under the CC0 1.0 Universal licence. I hope it’s useful! You can download MeuralManager and read its complete documentation on GitHub.