The best cloud photo storage service

This is a subject I've been wanting to tackle for a while, but I never got to it. I figured that with all the new releases from Microsoft, Google and Yahoo, cloud photo storage is back in the spotlight and I'm hoping that someone gets it right this time. To me, this is one of those things that many have tried, some have failed and none have entirely succeeded at. Over a few years, I've fully migrated my photo collection to and from plenty storage services: Flickr, Bitcasa, Google Plus Photos, Dropbox and OneDrive. Besides those, I've also tried more obscure solutions such as Shoebox, Streamnation, Picturelife, Cozy Cloud and Camlistore. However, I've never been completely satisfied with any of the mentioned apps/services. What follows is a set of features that I think the ideal photo storage service should have.

Easy, reliable way to add data

This one is pretty obvious - in order to have all my photos in the service, it should make it really easy for me to add new photos, whether it is from a mobile device or from a desktop PC. I'd say a mobile app and a web client are enough, but a PC client wouldn't hurt. While indeed obvious, this part is not necessarily easy. It happened to me more than once for a mobile app to miss syncing some photos and to think that is has synced everything. Also, there are corner cases such as the following: on iOS, I have iCloud Photo Share enabled; this means that all the photos I take with my phone are available on my tablet. When I installed the OneDrive app on the tablet, it decided it should upload all the photos that were added to the tablet via iCloud, which led to duplicates.

Fast download speeds, at least for thumbnails

Except for Google, all the other services I used were annoyingly slow. And this wasn't caused by my Internet connection, but probably because of data locality (most providers generally only have US data centers). Of course, it would be great for photos to be available in multiple resolutions and have them load in an instant, but I'd expect at least the thumbnails to be fast to load, in order to make exploring the photo collection bearable.

Smart organization

I've seen different attempts at solving this problem. Some apps only have a huge (searchable, or not) timeline of photos - Carousel, Shoebox. Others have only folders. Others have both folders and albums. I'd like to see a simpler and more consistent solution - like having only albums that are virtually backed by folders. That means when I upload folders, they show up as albums. When I create a new album, I can download them as folders. And when I use a photo in multiple albums, it shouldn't take more out of my storage quota than if I used it in only one album

Bulk download

Having mentioned downloading albums as folders, this leads me to the ability of exporting all your data. If for some reason you want to fetch a copy of all your photos, you should be able to do this with no hassle. This is something that Flickr (to give an example) has missed for years - I know they support this with the new version.

Tagging faces + search

I don't know about you, but I have a lot of portraits and group photos. I would like a way to tag the faces in my photos and then be able to search my photos by people's names. This is something that Google Photos almost gets right, in my opinion. They have a nice way of manually tagging faces after bulk uploads, and the app does a great job of grouping the same faces so that you can quickly tag them in bunches. The only downside is that the people that you tag have to have a Google+ profile (or you need to add their email address) and then the album is automatically shared with them. Basically, Google is trying to kind of make a social network out of Google Photos, and I don't want a social network. I feel Flickr does a similar thing.

Discovery / exploration

I keep a lot of photos and there are plenty that I take and I never get to see. This is why I'd like a way to explore and [re]discover my photos. Apps like StreamNation and Shoebox do the "this day last year" thing, which is a good start. Another way to do this would be showing random sets of photos that the user hasn't viewed in a long time.

Smart search

This is a hot topic right now with all the new releases in the photo storage solutions. Besides searching by people, I want to be able to search by location, attributes of the photo (portrait, panorama etc.), custom tags (that I can add either at upload time or later) and, if possible, even by contents (at the moment, Google, Microsoft and Flickr have this feature).

Stability

I'd like to have a certain amount of confidence that the service will still exist 2 years from now. It seems that photo storage is a niche that's not that profitable, at least with the current business model. Maybe it would help to only have paid subscriptions. Or really small free offerings that don't add fortunes to the AWS bill. Or make the software open source and let people host it themselves. I don't know.


If you know a service that has all the above features or comes close, I'd love to hear about it! I certainly wasn't able to find one. Meanwhile, I've been thinking about what it would take to build such a service, or at least an extensible core that could get to all the features above. Here are some raw ideas:

  • bring your own storage (Dropbox, Google Drive, OneDrive, S3 etc.)

    • keeps the biggest cost (storage) down
    • have a dead easy way to "log in with dropbox" or something like that and just use the user's storage for actually storing the photos
    • only keep metadata (albums, photo attributes etc.) on the "server"
  • back of the envelope architecture

    • pipeline of services (similar to Camlistore)
      • importer
      • indexer
      • storage
      • they would communicate through something like Kafka
    • API server
      • ingests photos through the importer
      • finds photos using the indexer
      • serves photos from the storage
  • every component inside a Docker container, orchestrated using something like docker-compose or Kubernetes

  • every user has their own deployment (similar to Ghost)

    • containers for the services above
    • data container for SQL (albums + metadata) and thumbs
    • privacy (metadata isolated from other users and photos stay in the user's provided storage)
  • open source

    • 1 user = 1 deployment model makes it easy to hack on
    • easy to try out -- prebuilt image for DigitalOcean or such
    • possible monetization from hosted service with extra special sauce for deployment/orchestration/maintenance (again, like Ghost)
  • smart image content indexing using something like Caffe

    • Google Brain is definitely cool but there sure are working open source alternatives!

I'm really curious about any thoughts on this - feel free to get in touch!