I've wanted this for so long, for innumerable reasons:
- A feed of all of my own new photos is super valuable for making cool apps
- A feed of all my OLD photos is also super valuable
- As is being able to query them all
- And google photos DOESN"T OFFER THIS!!!
- The only thing you can do is use google takeout to get a full local copy! That's insane.
- https://www.youtube.com/@productbugs5374 Long ago I made this channel to document some of the bugs in the UI. Nearly all of them are unfixed, lo, these 5 years later!
How do you do it?
Well, there's a cool app available through the (non-standard) F-Droid app store (free) called Exaile. This one is simple: you pick folders, they get sent to an s3 host. That's not just aws; s3 is a protocol and lots of companies implement it. It's very cheap, and is used for long-term storage and of serving images. Pre-AI I had never quit gotten this standardized to use within my projects but it is nice since it's universally available and doesn't take up disk on your actually-online servers.
But, android goes very very far out of its way to strip GPS from photos for some reason
I'm not sure why. I guess in the name of privacy, fine. But it goes FAR.
Even the default Exaile, which seems to have raw disk access, is actually being given the STRIPPED images with exif data removed! So to get it, I had to fork Exaile into a new version, Exaile-gps and reinstall it. You install the app, set up the folders and how they are synced, set up your bucket where they'll be received, and there you go; when it can (wifi, power, whatever) it'll do the uploads and keep your s3 updated.
What does this enable?
Imagine running programs which see every new incoming image or file you send from your phone. They'll be able to modify the file, or at least send in a new
On your phone you can still have a stream of photos available locally; in the old world it was always a pain deciding when to "free space" since once they were in gphotos they were SO much harder to get at; but now that'll be done, I think. Any edits made by my programs can be sent back in to appear again as on-phone images, easily usable in any app.
They can do things like:
- Automatically detecting screenshots and cropping them; This always seemed fun, to just crop out the garbage like power levels, notifs from other apps, etc. Or to crop IN strange values too like 0% power, notifs from nonexistent software.
- Automatically reflowing bad aspect ratio text screenshots. You know when someone screengrabs something but it's super short and super wide and a huge pain to read? AI can just automatically make a twitter-shaped portrait version of this so it reads perfectly. And it'll basically be letter perfect. Until twitter does it automatically, we can do it for them.
- Automatic annotation of images - if you have a class
- Automatic classification and removal - i.e. I often take photos of receipts; they hang around in my main gphotos stream weirdly. I am doing this because I knew the day would come that all kinds of awesome stuff would be doable. Now, I'll create a processor which'll iterate through every old photo looking for them; and form then on, only sometimes be called on new photos; if it's a receipt, it'll nicely put it in its own album, not in the main historical flow anymore, and also OCR it and fit anything it finds into spending tracking software.
- Tons of things like this; splitting them into screenshots/my actual photos/downloaded things/etc using tons of actual intelligence, and also choosing how they show up again (do or don't) for searches, browsing my photos by day, etc. So photos just another useful type of datastore.
IT isn't just photos.
It's also videos, mp3s, wavs I record. Which can be sent to processors to transcribe them and look for whatever, notes, diary entries, etc in them.
A later step, I can set up local caches (a disk with all/some checked out, and with some analysis already preemptively done) and this would expose an API which live requests can call; i.e. my general web chat w/claude or local claude chat can interface with /searchMyDocs(type: PHOTO, dateStart: null, dateEnd: null, subject: "cute puppy") in any way, and with any of many many more parameters than this.