My ridiculously robust photo management system (Immich edition)
(jaisenmathai.com)268 points by jmathai 4 days ago
268 points by jmathai 4 days ago
> My favorite feature is being able to setup a container on my Linux desktop that has a GPU access and can run ML workloads for image processing whenever I turn the computer on, as my NAS (where Immich resides) is a low power machine without a dedicated GPU
Okay, sold. This is also my setup and I was being held back by thinking that the experience would be bad due to it. But this will work for me!
Interesting. How did it work getting your photos off of iCloud? Does Apple give you a good way to get an archive of all of your photos? That is, the original quality photos, without manually downloading them individually? (I currently have 446 GB of photos in iCloud…)
Immich iOS app supports backing up photos directly from iCloud in original resolution, with the all EXIF data included. I had 230 GB of photos myself, and I left the phone on the charger overnight with the app running in the foreground and screen locking disabled. In the morning everything was imported.
Some people have instead set Photos app on a Mac to download original photos from the iCloud library and then moved the files directly into the server. I have not personally tried this method though.
> Immich iOS app supports backing up photos directly from iCloud in original resolution
wait that is just crazy!!! Dang my dad is going to flip out when I tell him about this. He's got like 1.5 TB of photos in iCloud and has been searching for a way to get them off. And we're so close to our family storage limit that he gets mad at me when I text him pictures hahaha
There is a community-supported CLI program called immich-go that directly supports reading in iCloud and Google takeout archives, as well as local directories. It works great, and has gobs of import options to set up albums and tags. [ https://github.com/simulot/immich-go ]
iCloud Photos Downloader isn’t user friendly or pretty, but I finally managed to rip my entire collection without having to install any apple software.
i havent seen anyone else mention it so i will. privacy.apple.com lets you export your apple data similar to google takeout
That's the worst service I've ever seen. It asks you the size of each zip file and I said 50G at first. And I couldn't download it because the connection was so unstable. No way to resume it and every 20~30 mins, it failed in the middle. Chrome, firefox, safari were all the same. I tried from a GCE VM as well to see if that's my network problem but didn't help.
I had to request again with 2G and I was able to download files finally. But only one by one. And after download 3~5 files, I had to login again as their login expires so frequently.
I had to do that for days and the download got expired. Oh my god. I had to request it again. And you know what? Their file list wasn't deterministic. I had to download from the beginning. lol
I finally made it and I swear I will never use any cloud service from apple.
How does selecting or uploading photos work on iOS if you don't have any in Apple Photos? Not all apps let you choose to upload from the files app where you can select the provider, e.g. uploading an image to Facebook in Safari always opens the picker for Apple Photos.
Edit: wait I'm dumb, I just checked mobile Facebook and the upload button shows a pop up with choices for "Photo Library", "Take a Photo", or "Files".
Additionally, there‘s a difference between Apple Photos the app and Apple Photos the system component (in lack of a better name, maybe someone knows the correct one). Even if you uninstall Apple Photos the app, iOS still retains its basic functionality, for example when viewing photos in the Camera app. The folders where photos are stored don’t change. You just use a different app to view and sync them.
Check out the guide on their website:
You run a Docker container on another machine and configure Immich to point to its IP address. I do that when I have to add a lot of photos or reingest all the photos with a different model, so I point to the "gaming" that has a 3060.
It's just a feature of immich. Administration > Settings > Machine Learning Setting and set the remote ML address.
Obviously you need to setup the ml client on the other computer
You can do this easier with Wake on LAN. See https://danielpgross.github.io/friendly_neighbor/howto-sleep... for prior art.
any pointers on how it works with immich on the NAS and your desktop “contributing” processing power?
I found this page: https://docs.immich.app/guides/remote-machine-learning
I recently set up Immich as a backup to Apple Photos, but the mobile app had trouble with my library (120,000 images and 4,000 videos, about 1.6 TB).
I've stumbled on Immibridge which solved my exact problem perfectly, and uploaded the images overnight
Habe you tried nextcloud + memories app? Every metadata is stored in EXIF and the directory structure on disk defines the directory structure in the app (and vice versa). When you want to move your tooling or just do things manual again, grab the disk and your are ready.
People are really sleeping on nc memories, does all the good things but none of the "I decide how your images are stored and nothing else should touch them" that immich does.
When I checked half a year ago memories (with the nc ecosystem) was still ahead in terms of features (gallery specific), albeit object tagging is rather crap in nc (faces better)
I'm very happy with Memories.
I store my pictures on a NAS jail. That directory is mounted read-only on another jail with NC and Memories. I like the guarantee that my gallery app cannot alter my files.
Also, many gallery apps don't allow browsing a directory tree. You have one level of "albums" and that's it. Memories support it. I have pictures 5-6 directories deep, following a system that makes sense to me.
I used memories for a while but Immich is much better. I use an external library because I export images from Lightroom Classic and that's where I throw them in YYYY/MM directories. I could import them directly into Immich but I had problems with the Lightroom plugin I used. Especially when exporting hundreds of images at once.
Any chance you’re doing this for film photography? I also use a plugin (Negative Lab Pro) for negative inversion of film scans that keeps me stuck on Lightroom Classic. It would be great to get a pipeline beyond Classic but with the ability to jump back and re-edit. Curious if you have more details on what you do/don’t connect into Immich from Lightroom.
what would you say: which features from Immich are better / not available in nc memories?
> Have you tried nextcloud + memories app? Every metadata is stored in EXIF and the directory structure on disk defines the directory structure in the app (and vice versa).
Ouch. One feature I love with Immich is that I can run it as Docker containers (I think it requires four containers) and pass the drive/volume with my photos as read-only, so I'm sure Immich cannot possibly modify my files.
The last thing I want is the latest solution du jour modifying my files.
I sync my photos with an old Raspberypi 3 with Syncthing, then have my own very basic web photo gallery: https://github.com/dariosalvi78/simple-gallery which supports permissions and thumbnails. If you have a sensible folder structure, for example by year/event you don't need anything else. I am also working on face recognition and geo location, but the hardware limitations are challenge (a fun one to solve tho).
Also came to say this - I love what TFA has done, but for me everything is already stored, dated and grouped, so I was thinking I could just add Syncthing on top of that and call it a day.
Doesn't solve fancy things like facial recognition, etc, though of course.
Immich is genuinely good.
I run it on a credit sized intel N100 board with a few spinning disks. There was nothing to do, it all just worked right away.
Everything is fast and smooth. The AI indexing and search just work™ and it is faster than google photo ever was. And there is no censorship on the AI search terms.
I also like that I can configure the filesystem hierarchy I prefer.
What kind of indexing and searching can you do ? I've found Google sometimes struggles with certain things (surprisingly) like searching for a date range if I don't specify the date in the ideal format. For other stuff like "stars over trees" or similar it can work quite well.
Search by date, OCR, AI context, people's face, location, by map, and I probably forget some. And from any result you can then jump to its location in the timeline. Back history navigation works properly to boot. And all of that is very pleasantly fast. I am very sensitive to latency, and Immich is one of the rare software that actually feels fast. Google photo is trash in comparison.
I honestly think that the search feature of Immich is better than Google Photos.
Maaaybe AI-based searches like "cat on a red car" are better on Google (but I wouldn't bet my life on it), but Immich applies the exact filters that I want (Google is too fuzzy).
Also, unlike Google, Immich doesn't censor your searches, so I can look up for naked pictures or photos of gorillas, and actually see the results.
Relying on EXIF is a good thing. But if you limit yourself to ONLY using EXIF, you can't group images, make one image in a group the primary image, assign common metadata to the entire group, etc.
All turned out to be essential in my photo archives, especially as I started scanning old pictures. You get the front and back side of a photo, or you scan a large-format drawing in 16 scans and store them alongside the merged one, etc.
Aperture used to handle it pretty well, but Apple dropped it. I learned my lesson, and now I'll be doing things differently.
I solved the "one photo in multiple albums" EXIF problem by using Keywords. Each album is a Keyword.
But yes, there are some other limitations that would be much harder to solve. But it's a tradeoff I've decided to make - if I can't figure out an EXIF-based solution then I'm not going to invest time using it because it will likely be lost in 5-10 years.
> Aperture used to handle it pretty well, but Apple dropped it.
If you still miss it, note that Nitro (macOS, iPad, iPhone) is Aperture's spiritual successor, created by its former Sr. Director of Engineering. https://www.gentlemencoders.com/nitro-for-macos/
Use sidecar files instead. I believe the professional tools all use them as well.
It is amazing how usable Immich is with so little hardware. I run it off a Proxmox VM with a caddy container as a reverse proxy and it just works so well. The hardest part is figuring out how to safely expose it so you can share albums with others, but Immich Public Proxy[0] is great for that.
All I want is to automatically periodically backup my Google Photos to some S3 compatible storage like B2. I want to do that in case Google nukes my account one day for whatever reason.
I have not found any way to do that until today.
In addition, my local network is slow and I don't have much storage I am limited to solutions that are cloud-to-cloud.
If anyone has any idea, please help me out
Presumably you take your photos on your phone, so can you sync from there?
You could manually do it with Google Takeout -> <S3 backed service> before letting your phone sync handle it going forward if that’s a big backlog.
For example, I use Apple and Google on my phone to do this, I think you’d just need to find some app/service combo.
Google ripped away the functionality to access your original Google Photos files via any programmatic method vs the manual Google takeout.
This was the biggest reason I also had to move away from Google Photos when all I really wanted was protection from getting my account accidentally G-structed with zero way to contact a human to get my files back.
I am very much aware of rclone, but don't see how it solve the problem I mentioned
Maybe I’m misunderstanding what you’re looking for. Rclone has a Google Photos backend and an S3 backend. I haven’t used it but assumed you could simply copy from Google Photos into S3.
"From March 31, 2025 rclone can only download photos it uploaded"
Also, it still requires to use my bandwidth or to have a VPS running and using it's own bandwidth
I went down the same rabbit hole recently, and there are basically no good options except to periodically do a full Google Takeout of your images. There were tools that used to work, but Google broke them.
One of the many reasons I finally moved off Google Photos.
After going through 25 years of changing software every few years on this front I can’t be bothered. Files on disk. Nothing over the top. Immich is just another thing to maintain. Another problem which will result in a wholesale migration down the line.
If someone wants something I email it to them or upload it to a directory on a web server and send them the link. If I want something on my phone I’ll zap it over with localsend.
Photography is a hobby for me and I have a large family so I have a lot of photos. And a lot of editing to do. Currently moving from Lightroom to Darktable because again Lightroom tries to hammer me with library management and lock me into things.
That's cool, but when a friend died last summer, Immich allowed me to find all the digital photos I had of him, even out of focus in the background. I get many requests from friends for old pictures, "do you remember that night when we all did a group photo, etc etc?" and the search facility in Immich allowed me to in a minute what sometimes took years to find, when scouring folders in spare time.
For me, there's nothing like being able to search for "brown dog" and get all the photos of my dog back. Not to mention all the other things Immich has that make managing a library pleasant.
I not only urge you to try it, but to buy the "supporter" pack, Immich really deserves it.
I had a bunch of photos in Apple Photos which did that sort of thing. As a library management tool it's probably the best out there.
But when you search for brown dog it'll bring back different coloured goats, horses and cows too. This is a problem in a large library.
A problem, but also way better than the solution “just look at every photo” you had without that image search feature.
I think these manual tools tend to prefer recall (“make sure you return all the photos asked for”) over precision (make sure you only return photos asked for”) because of that.
(Likely with exceptions for search terms such as “gorilla”, where surfacing photos of people with black skin is a big no-no)
Same here, although one thing that's difficult with this is things like finding "that one photo we took 5 years ago which grandma used as a phone background". So now I gotta find the right external hard drive to plug in and fortunately the folders are by date but still it's a drag. So I'm considering looking into immich if it can just function as a server that shows thumbnails on some terabytes of date-sorted photos and videoes, no need for the machine learning stuff. Though I feel like there must be a less "heavy" solution than immich for this.
This is exactly what I do. I have Immich as just a viewer and keep everything in external libraries. This is the major failure of Immich as far as I am concerned. I really don't like "black box" style of photomanagement. I also find that NextCloud has a very good photo viewer as well, which is almost as good as immich.
I'm like you, and a big fan of Pigallery2 precisely for its simplicity. But it turns out that Immich does support external libraries, so you can keep your manual file management in your filesystem and still use Immich for efficient indexing, face recognition, quick picture retrieval by year, location, people etc...
I'd recommend you try Immich (there's a docker compose version) and if you don't like it, you can just remove it and move on.
> After going through 25 years of changing software every few years on this front I can’t be bothered. Files on disk. Nothing over the top. Immich is just another thing to maintain. Another problem which will result in a wholesale migration down the line.
I've got the solution to this. I'm like you: files on disk. But I also use Immich: and here's the kicker... I pass the drive/volume with my photos to Immich as read-only (I use containers so it's easy: the drive itself is read-write, but Immich only has read-only access to it).
When I'm pissed off by Immich or something better comes along, I destroy the Immich containers and it's gone.
And I still my files on disk (with checksums as part of the filenames, moreover, seen that family JPG pictures aren't files that happen to change a lot and if they change, they can be renamed).
I tried this but didn’t have luck. Intel NUC 13 i7 with 16gb ram, Immich in a docker container. Photos on my NAS. The moment I open chrome or Firefox to Immich and get past the onboarding, it just locks up. Maybe 50,000 photos in the library. Disappointing because I really wanted to like it, and have moved pretty much everything else to self hosted.
Check you don’t have a circular import on your NAS. I had similar issues because I had my photos at /nas/photos and my Immich metadata folder configured as a subfolder of that. So it kept reindexing its own metadata.
Very strange. I've got roughly 40k photos and Immich runs just fine on i5-6xxx old minipc with 8 gigs of ram. Migrated to Immich a couple of years ago from Photoprism (which was fine as well, I just prefer the UI of Immich).
I host immich inside a Linux VM on FreeBSD, with 6 GB of RAM. Fourth generation Intel processor. The initial jobs to parse metadata took a day or two, but now it’s perfectly snappy and useable.
Do you have WebGL disabled or is WebGL not working?
Some time ago I configured Photostructure on my Synology (with the amazing help of the author, @mceachen) and the most paindful part was rescuing my 1.5TB of photos from Google Photos. Takeout was very cumbersome to use and download 100+ files of 4gb, so ultimately resorted to paying a higher tier at Google Drive, using takeout Google Drive option and the sync to the NAS. I still don’t have a good method to keep everything in sync as Google Photos does not offer a viable option for a cloud-to-premises sync.
I wrote some tips and tricks that I've found to help coax Google Takeouts into working: https://photostructure.com/faq/takeout/
Also: you should try out the latest build! https://photostructure.com/about/v2026.1/
FWIW all of these projects rely on ExifTool (which people should donate to!) and my open-source node.js wrapper (that adds concurrency, does a ton of extra parsing work, and makes things a bit more ergonomic to live with): https://github.com/photostructure/exiftool-vendored.js
For what is worth, google takeout can export in 50GB tgz.
Downloading the takeout files is miserable through, the download link is only valid when being downloaded via human interaction in a web browser.
There is a silly trick. Start the download, pause it. Get the cookies from the page (only need to do that once for the session). Then copy the download link. Now you can curl on your server. When the file is downloaded, you can then cancel the download in your web browser. And do the same for the next file. One at a time.
Warning: google will cancel downloads if you run more than one or two at a time. After 3 download (failed or not) of a file google will delete the whole takeout.
The amount of engineering they must have deployed to purposefully crimple takeout with plausible deniability must be significant.
do you mean it loses the original fps rate, or just that you can’t easily view it?
From what I was reading immich should preserve your original media. I saw this bug report[0] but it’s not clear if it’s an app upload bug, iOS bug or maybe depends on the device??
I don’t use immich (yet) but this is the kind of stuff I worry about. I’m planning to use it in read only mode though and sync my photos using PhotoSync rather than rely on the app.
I was running Immich for a while until the iPhone client app on my wife’s phone completely stopped syncing photos. So I ended up vibe coding my own photo management software in .NET using PostgreSql/Redis and React front end (PWA). Has face recognition too (used the same models Immich uses from huggingface). Works perfectly, photo library scanning/face recognition/thumbnail creation/etc performance is WAY better than Immich (uses .NET background jobs and lots of parallelism and hardware acceleration on my Mac mini server). Turns out if you only care for the thing to work on your own gear you can optimize the code for it quite a bit. It took 2 weekends and Claude code. And with tailscale, it’s hosted on my Mac mini at home and accessible from anywhere through https. I have around 40k+ photos+ phone videos, and the server is a base Mac mini previous gen (8GB ram). Oh, and forgot to add, the app supports downloading/moving photos from iCloud through the undocumented CloudKit APIs behind the iCloud.com web app, complete with 2fa.
Agree with this strongly. It's nice to have thousands of photos, but if what you're trying to do is preserve memories, you do that best by interacting with the photos.
Choosing the photos to include, plus doing the scrapbooking bits to decorate the photos, and including all the bits and bobs you might have acquired from whatever even you're memorializing, this locks the memories in far better than a carefully architected storage system that, in the end, is just a giant wad of binary data.
This goes double (or triple) when you have young children.
By all means maintain some kind of digital storage, but make your primary physical.
Lovely idea. You got a photo printer model you like? I've been meaning to get a photo printer, but I'm scarred by experiences with inkjets back in the day.
If they are printing 100 or more prints a month even they are probably absolutely fine - inkjets die when not used because ink dries on the jets or other places.
What kind of photo printer technology? Inkjet is expensive and fades. Dye sub and laser are usually better.
Personally I've avoided using any Synology-specific functionality. It's not as transparent and seems kind of brittle. I feel like that's going to pay off because after a couple of years I'm pretty sure I'm going to switch to an open source solution instead, and I won't have to look for alternatives to systems I'm already using.
seems like he missed the mark. why not sync to side-car files? What about videos?
I did say it was robust…
I include video [1] and audio (.m4a) [2] files via EXIF.
For text files [3], I add a JSON block at the top to mimic EXIF.
I don’t want to deal with an additional sidecar file per asset. The risk of losing one during a transfer between systems is too high. It’s a conscious decision and not an oversight.
[1] https://github.com/jmathai/elodie/blob/2645bf25b81c63f65d6f1...
[2] https://github.com/jmathai/elodie/blob/master/elodie/media/a...
[3] https://github.com/jmathai/elodie/blob/master/elodie/media/t...
This specific plugin was purely written by Claude Code, correct. The prior 10k lines of python were not.
Without Claude Code, the plugin would probably only exist in my imagination.
I don’t personally care who writes the code. There’s plenty of contributors already.
I wish I could just get photos out of iCloud. The iCloud app ok windows doesn’t work period. Authentication issues, taking up CPU but not actually doing anything, and creating empty files that are just shells for what’s in the cloud.
It is so absolutely terrible that I think it is purposeful. But if I could get it all, I could consolidate into something else. Either way, it’s frustrating enough that I’ve stopped buying apple.
Check out icloudpd. It’s a bit fiddly but it definitely does work once you have it set up.
But the how do I get the remaining latest files that aren’t in it? Manually from the iCloud website?
Also do they include all the variants in that export like the edits, filters, etc? I get the feeling those may be a proprietary Apple only thing.
I migrated from Apple Photos to Immich a couple of months ago, removing the iCloud subscription, and couldn’t be happier. It was the most hassle free piece of self-hosted software I’ve had so far. Very easy to install and everything just works. Context and OCR search are amazing. Mobile apps could be better, but they are constantly being improved.
My favorite feature is being able to setup a container on my Linux desktop that has a GPU access and can run ML workloads for image processing whenever I turn the computer on, as my NAS (where Immich resides) is a low power machine without a dedicated GPU. They even have ROCM support, so it works even without an Nvidia GPU. Being able to spread such workloads over your local network feels like a magic that has been forgotten in an era of blackbox cloud providers.