As written into Immich β unrated shrinks as scoring passes run.
photos
videos
motion clips (not rateable)
Ask for an album
Plain English. It knows every person, place, camera and date in the library.
πΌ photo attached
This week across the years
Fresh from the engine
Albums the engine makes appear here β and in Immich.
Recent adventures
Events appear after clustering runs.
Engine at work
Wish list
Nothing waiting. Ask the chat for something fancy!
Collage maker
Find photos, tap the ones you want, and build a print-ready collage. Nothing touches the library unless you say so.
Your collage
Photos you pick appear here β tap one to remove it.
Growing up
One person's face, held in the same place on screen, from their first photo to their latest β one photo a fortnight as a baby, one a month after. Preview the picks first; rate a bad pick one star in Immich and it's never chosen again.
Make it a different film: ages, dates, a place, a theme, who else is in it
Tap a pick to leave it out of the film. Marks are remembered on this device.
Same spot, years apart
The castle over seven trips, the front door every Christmas: photos taken within a few metres of each other in different years that look alike, shown then | now. Needs GPS on the photos.
Then | now. Tap a pair to leave it out of the film.
Create a memory video
Pick albums, photos and clips, choose the feel, and the engine computer renders a 4K film straight into Immich's Videos album.
Nothing picked yet.
Settings
Rendering runs on the engine computer and can take a while for long videos β watch progress in the wish list on Home.
Shareable slideshows
Each slideshow lives at a secret link that works anywhere with no login β perfect for kiosk screens, photo frames, or sending to family. Anyone with the link can see those photos, so share thoughtfully.
New slideshow
Pick as many albums as you like β album slideshows are live, so new photos join the loop by themselves.
Where we've been
scroll or pinch to zoom Β· drag to move Β· tap a dot to see its photos
Loading your travelsβ¦
Add the selection toβ¦
Travel stats
Loadingβ¦
Fun facts
Loadingβ¦
Travels video
Render a 4K film of your journeys: an animated map hopping between trips, with your best photo from each. Runs on the engine computer.
Hub β this NAS: always on, never looks at pictures
The hub keeps the Engine's copy of the library in step with Immich, holds the queue for the engine computer, applies what you approve, and takes the phones' uploads. Anything that looks at pixels β scores, faces, duplicates, screenshots, videos β waits for the engine computer.
Asks Immich to look for photos added to the library since it last looked (the same as Scan on its External Libraries page), waits while Immich reads their dates and makes their thumbnails, then brings them into the Engine and queues the engine computer's follow-up work (scores, faces, names). Holds off while the NAS or Immich is busy. Import only β nothing is changed or deleted. Runs by itself
Pull Immich's current view of the library into the Engine's index without asking Immich to scan first: use it after changing dates, places or albums in Immich itself. Fetch new photos does this too, after the scan; the overnight sync does it as well.
Pulls the latest code from GitHub and rebuilds the hub, the same as running update-nas.sh over SSH. The page goes away for a minute or two while it builds and comes back on its own; the engine computer then updates itself to match.
checkingβ¦
Library safety β what the hub guards, and the repair buttons
After every sync the Engine's copy of the library is held against Immich's own count. While the two disagree β or the copy shrank by a fifth since last time β nothing automatic runs: no timeline rebuild, no live albums, no follow-up work after a fetch, no faces named by themselves, and the engine computer is handed no jobs. A copy of the database is taken before every full pass (backups/, next to it), every change to Immich is capped at the size you approved, and hand-placed outings, split marks and hidden cards that a rebuild ever left behind are brought back from the nightly copy.
Hub log β the last lines the hub printed (why a job failed, without SSH)
Engine computer β does the heavy work while it is awake
No engine computer has checked in yet β run StartPhotoEngine on one.
The last 7 nightsβ did it wake up, and what did it run
Loadingβ¦
Why it might not be waking β what the hub sees and what the engine says about its power settings
Ask it to (queued; it runs when the computer is next awake, and the wish list on Home shows it):
Quality-score any new photos: what they show, sharpness, exposure, and a star rating. New photos need this before search and stars know about them; a fetch queues it by itself. Safe to re-run β already-scored photos are skipped.
Measure smiles, open eyes and how big faces are in every people photo. Makes the stars people-aware (a great smile beats a sharp lamppost) and powers "cutest ofβ¦" wishes. Safe to re-run.
For times the family was split between places (a work trip, say): matches each untagged photo to a place by what and who is IN it, compared against the tagged photos from the same days. Results appear under Places as approvals β nothing writes without your say-so.
Finds photos whose camera clock was wrong (stuck on 1970 or 2000), matches them to the real trip by what and who is in them, and proposes shifting each camera's batch as one piece β order and spacing preserved. Approvals with contact sheets appear under Tidy up; genuine old photos are never touched.
Build (or refresh) a "Best of 2023"-style album for every year: around 500 of the year's best, the same picture counted once (duplicates, near-twins and bursts), spread across the months with a cap per day and per holiday, in date order. Re-run any time β the albums update in place as scoring improves.
Write the Engine's star ratings into Immich where the whole family sees them. Never overwrites a rating anyone set by hand, and every change is journaled so it can be undone.
Phone uploads
Photos from the phone, over the air, with no duplicates. The Photo uploader app on the phone asks this hub which of its photos and videos the library already has (by name and size, then by checksum) and sends only what is missing β nothing is ever uploaded twice, whichever way it reached Immich before.
How to set it up (once, about five minutes)
Phone: open the latest APK (signed in to GitHub), download image-fun-uploader.apk, open it, allow installing from the browser.
Phone: open Photo uploader. Hub address = the address you use for this page (). Pairing code = the one above. Press Pair; allow Photos and Notifications.
Phone: plug it in and press Scan now. The first pass asks about the whole camera roll β thousands of questions, not gigabytes: a file the library already has is never fingerprinted or sent. From then on it scans itself every hour (Wi-Fi only, battery not low).
Phone: Settings β Apps β Photo uploader β Battery β Unrestricted, or Android skips the hourly scans.
Keep Synology Photos backup and the Immich app's backup off, so there is one path in. Each phone that pairs appears below with what it sent.
Away from home the app needs the hub's address to work from outside (the HTTPS one, if set up under NAS.md β "Remote access"); on home Wi-Fi the plain address is enough. The older route β FolderSync copying files into a shared photo-drop folder β still works and is written up in NAS.md β "Phone drop".
Undo
β the last ten things the Engine changed
Every change the Engine makes in Immich is written to its journal first, in batches: a place put on an outing, dates fixed, stars, photos hidden, faces named. Undo puts a whole batch back the way it was, in Immich and here. The newest is at the top.
Nothing changed yet.
Which is better? β tap one. Every pick teaches the one model that chooses the best photos everywhere
β¦
Nothing to pick from yet.
β β pick Β· β skip Β· β both awful Β· the next pair is already loaded. No wrong answers.
What it's learning β the one model behind every "best"
How the learning works
Every photo the engine has measured carries thirty-odd named axes: sharp on the subject, well exposed, faces lit, everyone's eyes open, a good smile, family in it, several people, subject on a thirds point, breathing room, striking light, unlike the rest, and what kind of moment it is. Each pick you make is one comparison: the axes of the photo you chose minus the axes of the one you didn't. The model is the set of weights that best explains all your comparisons at once, pulled gently towards a recommended start so a handful of picks can't swing it. Alongside, a second half learns a direction in the picture model's space from the same picks, which covers photos not yet measured. Both are retrained from scratch every ten picks and every photo in the library is rescored in seconds; nothing you taught earlier is ever stuck in it.
Your weights, against the recommended start
Each axis: your weight as the bar, the recommended start as the mark. Grouped by what the axis is about.
As you play
Measure a stretch of dates now
The engine measures the axes for the whole library by itself, best candidates first. For a holiday you want fully measured sooner, give it the dates.
Take the data away
One JSON file: every answer, every photo in one with its facts, faces, axes and picture vector, both halves of the model and the history.
Your last picks, and what each one said
Who's who
The engine names faces; Immich only finds them. Every face is compared with each person's photos from the same age, and named by itself only when it is clearly them, the age fits, and the person has enough photos on enough days. Close calls wait here as questions; strangers are left alone. Someone appears as new only when they turn up on several dates spread over weeks, so a crowd on one afternoon never becomes a person. Every change goes through Immich's own people calls and is undoable.
Named by itselfPeopleSomeone new?SplitsTidyRules and settings
Changing the model empties the face index and rebuilds it on the next run (an overnight). The rules also decide which unnamed people are junk for the tidy-up.
People check
Two people Immich mixes up β brothers as babies, twins. The engine looks at every face labelled as either, and lists the ones that are really the other one: certain from the dates first, then by likeness. You decide per sheet; each change goes through Immich's own reassign and is undoable.
Places β locations written into Immich, journaled, always undoable
How the Engine decides
A photo with no GPS can be placed three ways. By its outing: when the rest of the trip clearly knows where it was. By time: a phone's fixes before and after vouch for the camera's shot between them. By its subjects: for days the family was in two places at once, what and who is in the picture is compared against the tagged photos from the same days. Each lands here as a proposal with its confidence; nothing is written until you approve, per outing, and whole outings with no fix and nothing to match against are yours to place by hand.
Location fixes, waiting for your yes
Photos with no GPS whose outing clearly knows where it was.
Location matches, waiting for your yes
Placed by time or by their subjects. Match is the confidence; each photo gets its own spot.
Only you know where these were taken
Whole outings with no GPS at all and nothing to match against. Search a place, check the photos, stamp the lot.
Nothing waiting for you here. "Match locations" on the engine computer's card and "Find more by time" below look for more.
Where we've been β how much of the library knows where it was taken
loadingβ¦
Claude connector β let Claude read this hub and press its buttons
Make a key, then in claude.ai go to Settings β Connectors β Add custom connector and paste the URL below. Claude can then read the status, the log, the jobs and the game's learning, and queue work, from any chat. The URL is the whole secret: a new key stops the old URL at once.
Device tokens β read-only keys for screensavers and photo frames
A token can view photos and album lists, nothing else. Paste one into the device once; revoke it here any time.
Screenshots β hidden into Immich's Archive, never deleted, always undoable
How the Engine decides
The picture decides: the engine computer looks for text over a flat image, and only that is hidden by itself. "Screenshot" in the name is a strong hint that still needs the picture to agree β a screenshot that is mainly an image (the estate agent's photos of the house) is kept whatever it is called β and missing camera details are no hint at all. Everything the Engine ever hid as a screenshot is listed under "Hidden by itself", with who decided and why: tap any to mark it, then bring the marked ones back (they stay visible for good), bring back everything automatic, or undo a pass.
Hidden by itself
Waiting for your yes
Tap the ones you want to keep visible, then approve the rest.
Nothing waiting for you here.
No preview in Immich β photos Immich lists but gives no picture for
Nothing waiting for you here.
Duplicates β spare copies to Immich's trash, recoverable, always undoable
How the Engine decides, and which copy it keeps
Re-exports and re-imports of the same photo are found by comparing every picture with every other, then checked pixel by pixel. Nothing happens on its own. Each sheet shows the copy to keep (β) and the copies to trash; tap another one if you'd rather keep that (press and hold to see a picture large). Approved copies go to Immich's trash after their albums, favourite, rating and location are carried over to the keeper. A RAW file is never trashed and a motion photo never loses to a plain copy.
The keeper is the copy with the most pixels, then the bigger file of the same pixels; camera date, place, star and favourite are carried over before a copy goes, so they never decide. Every decision ever made under the old rule (which put EXIF first) is re-checked under "Earlier decisions" and put right while Immich's trash still holds the better copy; where Immich has already emptied its trash of an external-library file, the file is still on the NAS: a library scan re-imports it and the swap finishes with the re-imported copy. Only an upload into Immich's own store is truly gone.
Same picture twice
Exact copies
Byte-identical photos imported more than once. The best copy stays visible; the spares are archived.
Earlier decisions, re-checked under the current rule
checking recent decisionsβ¦
Photographed documents β archived, not deleted, always undoable
Waiting for your yes
Letters, pages, whiteboards, receipts. Look carefully and keep anything that matters, like certificates and recipes.
Nothing waiting for you here.
Wrong dates β re-dated in Immich, journaled, always undoable
Waiting for your yes
Camera batches with a wrong clock, matched to their real trip.
Nothing waiting for you here. "Fix wrong dates" on the engine computer's card looks for more.
Hidden proposals β the ones you put away with "Hide"
A hidden proposal stays out of Places, Tidy up and People until you restore it here; then it comes back where it was.
Where was this?
Tap the map, drag the pin, or search. Layers (map / satellite) top right.
When was this taken?
Journaled and undoable.
Person
Headshot β tap the face that should stand for them in Immich (their clearest faces, spread over the years):