Inspired by a post I wrote last year, I've built something new that I'm ready to share and get feedback from the community.
After upgrading to Catalina I noted
Back in April I wrote a quick post about how I was backing up the shared iCloud Photo albums that my friends and family all use to send pictures and videos of our kids back and forth. A reader emailed me today to ask if I knew where that folder had been moved to after upgrading to 10.15. So, I looked, and, sure enough, that
sharedstreamsfolder was gone.
And with it, my ability to keep backups of thousands of photos and videos of my children that our friends and family (and their grandparents) had taken and shared with us.
Why does that matter? Scott said it best...
When I look on my Mac, I find these pictures of my kids that, to me, are absolutely priceless. In fact, I have thousands of these photos. If I were to lose a single one of these photos, it would be awful. But if I were to lose all of these photos because my hard drive died, I'd be devastated.
I never, ever want to lose these photos.
And even before the upgrade to Catalina, sure, I could backup the items themselves. But there was no way to backup the six and a half years of thousands of comments and likes that our family had posted to those albums. My family uses Apple's shared photo albums more than Facebook or Instagram. If all that historical data was lost? We'd be devastated.
And if I can go off on an even more personal tanget for just a moment...
I'm typing this after getting my kids (finally) to sleep by myself this evening because my wife is spending the night at her grandmother's house - my kids' great-grandmother. Thelma, a kind and generous woman, is going to leave us in the next day or two. And my wife volunteered to take the night shift tonight so she could be there with her.
When my son was born six and a half years ago - her first great-grandchild - Thelma taught herself how to use an iPad in her 80s. She read books, the news, and was quite possibly the most active commenter and "liker" of all the photos and videos of the kids we'd share using iCloud. Whenever I posted a new picture of the kids being silly, I knew, could almost time it to the minute, when I'd get a notification back that Thelma, home alone in her big house with coffee in hand, had tapped the like button or commented with a ❤️ emoji.
And so now I think about not just all the photos and videos - but the 65,234 comments across 16,752 items we've shared. (How do I know those exact numbers? I'll tell you in a minute.) Each one may be insignificant by itself. But combined? They represent 2,596 days of shared family history.
And when I think about losing the post she made about our newborn son in the hospital? Or the one she commented on last week? Only because there's no way to get access to that trove of data? It breaks my heart.
Fast forward to a few weeks ago, a reader emailed me to say
I really like reading your blog (are we still calling them that?). In particular, your posts on backups always give me better ideas on how I want to organize and save my family's data.
Your blog, more than any other source I can find on the web, talks about backing up iOS photos and Apple's iCloud Shared Albums. In our case, we use the Shared Albums as the exclusive place for posting photos of our 3-year-old (turning 4 on Saturday) daughter for our family and close friends. It's a great way to share photos with family that's completely outside of the typical social media engines.
So, while we have a backup (well, multiple backups) of the originals, my wife pointed out that we don't have a backup of that feed and, most importantly, our and our family's comments. We've chronicled the last four years of our life via the photos and comments and had our family comment with lots of stories and encouragement that have been a great way to stay connected.
I hadn't thought about it until my wife mentioned it, but I have no backup of those photo/comment pairings. It would take one mistake by Apple (I admit not likely) or a misclick on our part to accidentally delete that album and irretrievably lose all of that content.
Are you using your Shared Albums in that manner? If so, do you have any thoughts on backing that up or exporting everything? I'll admit I don't really have an idea of what that backup would look like.
I've even thought about taking screenshots of the photos with the comments turned on (though doing that several thousand times doesn't sound fun). I could try to automate that process, but so far I've not found any way to get Automator to interact with the Shared Albums and their comments, though I admit I'm a novice at it.
I hope this finds you and your family well and healthy.
So I thought about the problem again, and remembered a throw-away idea I mentioned near the end of my original blog post.
At the top level is a Core Data database. I thought I might get clever and explore that to see if I could extract out the metadata of the shared items and use it to help me write a "smart" backup script (that perhaps imports other people's photos directly into Photos.app) instead of just taking the brute-force approach and backing up the entire album as a dumb blob, but I haven't had enough time yet to investigate.
Enough was enough. I built it.
The app is called GrannySmith (for now) and it reaches into your Photos.app library and provides a fast, clean, native interface for browsing, sorting, filtering, and exporting all of your shared photos and videos, comments and likes. You can view a combined stream of all your shared albums, or just a single album, or even filter and see posts made by specific people.
Your images can be exported directly to disk in a date-based folder structure for easy backup.
And if Photos.app doesn't have the full-resolution versions cached locally, GrannySmith will download the originals from iCloud - even your videos. You can also generate a JSON file with all of their comments and likes - neatly tied together for you to do what you want.
One more thing.
I realize that as incredibly helpful as I find archiving my photos and videos and having all of that meta data available to me in JSON format, I'm not most people. And most people don't speak JSON.
Two months ago I released Roland - a static website generator written in Swift. Well, Roland is now embedded in GrannySmith. And that allows the app to build an actual static HTML blog out of your shared photo history.
Just like your typical WordPress website, you can browse your chronological timeline of posts - sorted by date and category. And all the original comments that friends and family posted to your shared albums are reproduced as blog comments.
You can keep the exported website as an offline copy. Or you can upload it and host it yourself. There are no dependencies - no PHP, nothing. Just plain, vanilla HTML. It even comes with RSS and JSON feeds, so your geeky friends can subscribe and get updates outside of Apple's ecosystem.
And the entire website is backed by a completely customizable template system written in PHP. So you're free to make your exported website look and feel however you want.
It's still very early days, but GrannySmith is coming along nicely. Here's a four minute preview video that walks through everything - including a full website export. It's best if you watch it in fullscreen.
Current Status and How to Download
GrannySmith works but is missing some key features I plan on adding and is also completely untested on anything earlier than 10.15.4. I'd love to know how it works for you on earlier macOS versions.
Known Bugs and Limitations
- Most egregiously, while you can export a website of your content, you can't currently export that JSON backup I mentioned. (Key feature, I know.) Mainly because I haven't settled on a final data structure for it.
- The "Dates" filter button doesn't work yet.
- Switching between albums is way slower than I want it to be.
- The website templates are currently buried in
~/Application Support/. They can be customized, but this current release will overwrite them on launch to make my debugging process easier. You'll need to live with the default theme for now.
- I happen to like using GrannySmith as a lightweight UI to view new items that friends share with me. And since it's pulling directly from your Photos.app database, it updates in real time, too. That said, to keep from destorying your bandwidth, the app will not automatically pull originals from iCloud when just browsing. You'll need to choose "Download Originals" if you want those cached locally to view. Otherwise, GrannySmith will fallback to displaying the lower-res versions that Photos.app already has.
- Building a website will build all of your albums. Ideally you need to be able to build from only the selected ones.
- Building a website will not automatically download originals. Instead, it will use your low-res cached versions. If you want orignials included in the website export, you can select and download all first, then build the website.
- Videos do not currently play in the app. But you can export and view them.
- I also want to add support for scripting the app via the command line or some other type of built-in automated task so you can have GrannySmith automatically do a backup of your latest items every night, etc.
I also want to point out that GrannySmith does not store or transmit your photos, videos, comments, etc. off your Mac. Everything is done 100% locally. I see none of your data and don't want to see any of your data. Keep all those cute kid pictures to yourself.
You can download the latest preview release of GrannySmith from here. The app will check on launch with my web server for updates and to submit crash reports.
As with all the dumb things I post to this blog, any and all feedback is very much welcome - especially on this project.