Created Thursday 01 July 2021
Recently I migrated our family off of Amazon Prime Photos after many years of use. I found the cost to maintain videos prohibitive, and had also become increasingly concerned by how difficult getting things out of Prime Photos was becoming. Plus, like, privacy and stuff.
My original plan was to develop my own minimal management software, so that I wouldn't be subject even to open source software churn. Since I plan on maintaining this photo archive for the rest of my life, I figured it made sense to double down on technique. After some prototyping I realized I'd bit off more than I could chew, despite the number of great libraries for working with media and metadata that there are. I was fortunate to then run across PhotoPrism, which does what I'd hoped to do, and more, and seems to be very well designed. And, they're working on face recognition, which is the only thing I really miss from Prime Photos.
I run PhotoPrism on Fedora on my old Lenovo T430s laptop with a 1TB SSD. I was able to import some 185gb of content - ~15,000 photos and ~300 videos - in about a day, with laptop fans blasting and all cores saturated. In addition, we're now running:
- PhotoSync on Android and iOS to sync photos from devices to PhotoPrism.
- Docker to run PhotoPrism in docker-compose, as a systemd unit (tutorial).
- Tailscale VPN so photos can be accessed and uploaded even while mobile.
- Duplicity in cron (via flock) to back up regularly to AWS S3 Glacier Deep Archive. This is currently the cheapest way to store things in AWS long term. I started with this tutorial but ended up making my own Dockerfile and using a newer duplicity/requirements.txt:
- I really like the look of tarsnap but I find it a little too expensive for this use case. As far as I can tell, the killer feature it offers (beyond encryption) is incremental deletion. I hope to use it for system backups in the near future, though. I think it would also be good for storing recent security camera footage from ZoneMinder, once I get that set up.
- healthchecks.io for heartbeats on the cron job.
Getting this all going took a few hours and required a decent amount of Linux and Docker knowledge. For less effort, you might consider a Synology NAS. I've heard good things about Synology from various nerds I respect. Other options I'm aware of for running "home cloud" software on commodity hardware include ownCloud and Unraid.
In the future, I look forward to working with PhotoPrism more, and maybe even getting involved with its development. I'm interested in adding OCR indexing and full text search to navigate the many documents I photograph with my phone. In my prototype I had some success with Tesseract and SQLite FTS 5 for this purpose. I would also enjoy a more powerful textual search language.
A local healthcheck service would be nice too. I'd like to see a ESP8266 or something somewhere in my office with a green LED glowing to know everything is fine™.