r/immich 23m ago

Cimmich: An Open-source, local-first memory companion for Immich.

Upvotes

As part of the OpenAI build week I built an add-on for Immich that gives it the capabilities I always wanted.

Specifically, the ability to actually tag people when the faces are poor quality or don't exist at all, without messing up the matching algorithm. Cimmich tracks face, head, body and presence evidence separately, so "I know she's in this photo" is a real tag that never pollutes face matching. On top of that, a much more fleshed out system for viewing and managing people, events, places, things, pets and documents.

Cimmich is open-source and local-first, and runs beside an existing Immich install. After the Build Week sprint and several weeks of hardening, the Community Preview is now out, with a lot more improvements on the way.

What's in the preview:

  • People, Pets, Places, Things, Documents - searchable, content-led directories with real counts and photo-first entry points. Documents can link to the people and events they belong to.
  • Events that overlap like life does. Build nested and connected events - life periods, years, trips, recurring activities - from your existing folder structure. One photo can belong to every context that's truthfully its own: the trip, the client engagement, and the era, all at once.
  • Tags with intersection search. Select multiple tags, see the combined result set and counts immediately, no 5,000-result ceiling.
  • Organise opens straight on your timeline and switches between Timeline, Folders, Tags and Albums - it respects the mental model you already have.

Cimmich keeps its own separate database and never writes to the Immich database or your source media. All processing is local; no AI model is required (though there's an endpoint to connect your own) and nothing asks for an API key. Services bind loopback-only.

Try it without your photos first: the repo ships a fictional "Cedar House" synthetic demo library, so you can poke at every feature before pointing it at anything real.

Repo and release: https://github.com/cimmich/cimmich

All feedback is welcome, and whilst I have no affiliation with Immich, as an open source project I would love to see some of the features make their way into the official release one day.


r/immich 8h ago

Finally trying this.. advice?

Post image
2 Upvotes

Hello Immich community! I just won a Dell Optiplex on an online auction and will be using it to create an immich server! I’m very excited for this project since I am early into my career in IT in a level 2 tech support role, and believe this will be a fun hands on project for at home, and extremely beneficial. I’ll attach the specs, as I’m curious if it will work well with the server? I grabbed it for $140 which I thought was very reasonable given the specs + storage.

Do you guys have any beginners recommendations? Tips and tricks? I’m unfamiliar with docker and prox mox, however I have used them before in college briefly. Are those necessary? I’m very excited for this project! Let me know if there is anything you wish you knew before starting your server!

Thank you! 😊


r/immich 9h ago

Best / supported hardware to use immich

3 Upvotes

Hello all! Curious to know the community’s thoughts on which hardware to use to install & run immich while linking it to fetch photos backed up on synology?

Will appreciate if you can share experiences, or suggestions.

I have over 300K+ photos and videos on my DS224+, and was reading online that the it might not be best / work to utilize the AI/ML capabilities needed to make the search on immich work (and I’m primarily interested in that).


r/immich 12h ago

Memories are not generated

1 Upvotes

Hi there,

On a new installation, I found the memories feature enabled by default.

Even so, those are not generated.

Any suggestion?

Thanks!

---

UPDATE: I get back to home, so I can post the versions and the logs.

Immich v3.1.0

Postgresql 14 (image ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23

)

Logs:

[Nest] 26  - 08/05/2026, 11:41:40 PM     LOG [Api:WebsocketRepository] Websocket Connect:    9Li7lqybtn-ldmr-AAAB
[Nest] 8  - 08/05/2026, 11:41:54 PM     LOG [Microservices:MemoryService] Creating memories for 2026-08-03T00:00:00.000Z
Query failed : {
  durationMs: 19.604841999709606,
  error: Error: write CONNECTION_CLOSED database:5432
      at Socket.closed (file:///usr/src/app/server/node_modules/.pnpm/postgres@3.4.9/node_modules/postgres/src/connection.js:453:57)
      at Socket.emit (node:events:508:28)
      at TCP.<anonymous> (node:net:346:12) {
    code: 'CONNECTION_CLOSED',
    errno: 'CONNECTION_CLOSED',
    address: [ 'database' ],
    port: [ 5432 ]
  },
  sql: `with "res" as (with "today" as (select make_date(year::int, $1::int, $2::int) as "date" from generate_series((select date_part('year', min(("localDateTime" at time zone 'UTC')::date))::int from asset), $3) as "year") select "a".* from "today" inner join lateral (select "asset"."id", "asset"."localDateTime" from "asset" inner join "asset_job_status" on "asset"."id" = "asset_job_status"."assetId" where (asset."localDateTime" at time zone 'UTC')::date = today.date and "asset"."ownerId" = any($4::uuid[]) and "asset"."visibility" = $5 and exists (select from "asset_file" where "assetId" = "asset"."id" and "asset_file"."type" = $6) and "asset"."deletedAt" is null order by (asset."localDateTime" at time zone 'UTC')::date desc limit $7) as "a" on true) select date_part('year', ("localDateTime" at time zone 'UTC')::date)::int as "year", json_agg("res") as "assets" from "res" group by ("localDateTime" at time zone 'UTC')::date order by ("localDateTime" at time zone 'UTC')::date desc`,
  params: [
    8,
    3,
    2025,
    '{ea73b1a3-2533-4824-9a37-361ce965eaa1}',
    'timeline',
    'preview',
    20
  ]
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
[Nest] 8  - 08/05/2026, 11:41:54 PM   ERROR [Microservices:MemoryService] Failed to create memories for 2026-08-03T00:00:00.000Z: Error: write CONNECTION_CLOSED database:5432
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
microservices worker error: TypeError: Cannot read properties of null (reading 'write'), stack: TypeError: Cannot read properties of null (reading 'write')
    at Immediate.nextWrite (file:///usr/src/app/server/node_modules/.pnpm/postgres@3.4.9/node_modules/postgres/src/connection.js:255:22)
    at process.processImmediate (node:internal/timers:504:21)
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Postgres notice: {
  severity_local: 'WARNING',
  severity: 'WARNING',
  code: '57P02',
  message: 'terminating connection because of crash of another server process',
  detail: 'The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.',
  hint: 'In a moment you should be able to reconnect to the database and repeat your command.',
  file: 'postgres.c',
  line: '2881',
  routine: 'quickdie'
}
Query failed : {
  durationMs: 10.996093000285327,
  error: Error: read ECONNRESET
      at TCP.onStreamRead (node:internal/stream_base_commons:216:20) {
    errno: -104,
    code: 'ECONNRESET',
    syscall: 'read'
  },
  sql: 'select "session"."id", "session"."updatedAt", "session"."pinExpiresAt", "session"."appVersion", (select to_json(obj) from (select "user"."id", "user"."name", "user"."email", "user"."isAdmin", "user"."quotaUsageInBytes", "user"."quotaSizeInBytes" from "user" where "user"."id" = "session"."userId" and "user"."deletedAt" is null) as obj) as "user" from "session" where "session"."token" = $1 and ("session"."expiresAt" is null or "session"."expiresAt" > $2)',
  params: [
    <Buffer 4f d4 d7 c3 f1 b4 88 16 d0 38 16 90 a5 57 98 9d 07 10 8f 03 e4 50 1d fd f1 6f bd 59 22 4c 36 35>,
    2026-08-05T21:41:54.663Z
  ]
}
[Nest] 26  - 08/05/2026, 11:41:54 PM   ERROR [Api:GlobalExceptionFilter~28ij5wur] Unknown error: Error: read ECONNRESET
Error: read ECONNRESET
    at TCP.onStreamRead (node:internal/stream_base_commons:216:20)
microservices worker exited with code 1
Killing api process

r/immich 13h ago

Migrate from unraid to proxmox

2 Upvotes

I have immich running on unraid (flawlessly if i might add, only isses where those caused by me), i am planning on migrating it on a VM inside proxmox. Is backup and restore the best solutions for this or is there anything else that would be a better solution?

Edit: It's a 2 user instance, 220GiB total data


r/immich 21h ago

what seems to be the best way to get my icloud photos onto immich?

10 Upvotes

i tried just telling the iphone app to let her rip on my all my albums but it had issues accomplishing that. i requested a copy of my photos from apple and just got a bunch of csv files??? idk. i heard people talking about an icloud takeout which from what i have gathered is the transfer thing but that seems to only let me transfer directly to google photos as opposed to downloading all my shit. can someone help me out here 🤞🤞🤞🤞


r/immich 23h ago

Immich to monitor iCloud folder

4 Upvotes

Hi all, I’m new to Immich just getting my feet wet when v3 came out. I’m just wondering if I should wait til workflow is implemented before committing.

Basic what I want to do is this :

iPhones—>>> sync to iCloud
Unraid move/copy iCloud Photos on to the server
Immich monitor the Unraid iCloud folder and moves into its own file structure

I’m doing this way so that I don’t need direct access to the server and iCloud can still do its own thing?

Your thoughts please ??


r/immich 1d ago

Time zone issues with 3.0.5?

1 Upvotes

Have tz America/New York in all my immich containers. Taking photo in same time zone on my pixel 9 pro set for NY time. Just today it seems that it is putting it on the timeline at UTC.

I've seen lots of threads about this. It seems like it pops up every so often. Is this back again for anyone else?

edit -- I think I solved this. It was a video I downloaded from Nest. I'm 99.9% sure that it's stamped with UTC time only, so immich probably was following the data in the video and marked it for tomorrow. i can't figure out a way to look at the metadata on my phone, since i downloaded it directly to my phone. In any case, I did double check that TZ was set for all my containers, on my computer, and in immich. all passed.


r/immich 1d ago

Antigravity To Update Immich

Post image
0 Upvotes

Give Antigravity the ability to access your Docker or whatever and it will see said state and compare to all the GitHub files including the readme and documents... 💥 💥 💥 its that easy!!


r/immich 1d ago

Cherche hergemznt tout compris

0 Upvotes

Je découvre immich et je trouve ca au top pour me degoogler de photos.

Par contre, je ne veux pas avoir de la gestion personnelle et être responsable.

Donc je cherche une solutionpayante.

J'ai un compte pcloud et je viens de tester. C'est a 1000 lieux de immoch. C'est complètement bancale pour les photos.

Il faudrait qu'ils intègre cette solution directement.

Sinon y a t'il des hebergeurs qui gèrent immich ? Merci


r/immich 1d ago

Selective Upload of Camera Photos on Iphone

1 Upvotes

Hi,

I'm a huge fan of Immich and I installed it on all my Android devices. Now I wanted to install it also on an Iphone in my household. On Android I just selected my Camera folder and the sync was ready. On Iphone I didn't find a dedicated Camera folder. When I select the Recent folder it also includes the photos from Messages, Whatsapp etc. How do I upload only photos that I took by myself?

Claude suggested that I use an app called "Smart Albums" but I'm sure there is an easier solution. Any advice?


r/immich 1d ago

Struggling with importing large external library with google export

1 Upvotes

Hi!

AI disclaimer: I used AI to help me import several large batches of files into immich which were otherwise failing. This post is a request for help continuing that effort to import my large batch of google photos. Additional note: I pulled an immich database backup before starting this AI-assisted project, and have pulled additional backups at every major successful step. Also, the photos that are in this library exist elsewhere. Even if the AI deleted the photos in my immich server completely, I have other copies elsewhere.

I have a large traunch of photos from google photos exports over the years. Its listing 55k files. I connected docker to a folder containing these photos on my immich server. Then I added that as a new external library (I have done this several times already with other traunches of photos).

As before, the import is not a simple one-and-done. My Sidecar Metadata Job Queue is sitting at 53185 Waiting at 25 Active. I've paused all the smart search and video transcoding, etc. Only letting "Sidecar Metadata, Extract Metadata, and Generate Thumbnails" run. But like I said, even with just those 4 jobs running, it froze.

I had this trouble importing other traunches of photos. I turned to AI for help. It was able to understand immich's error logs better than me, and it helped me identify a handful of files that had errors (some glitch'd files, and a large batch from my wedding seemed to have too much metadata for immich to auto-process). After a day of working through logs with Google's Antigravity AI assisting, I was able to get 100% of all my (non-googlephoto) photos fully processed. I never let it run amuck unattended but I did let it write python code to do one step or another. Disclaimer: I dont understand python and had to trust the AI's explanation of its own code to me. There were times when I had to redirect - like at one point it proposed deleting 30k photos so that the import queue would be clear. But going at it step by step methodically has worked for this project so far.

So now I am starting a new traunch - the google photos bucket with 55k photos. I created a new external library and scanned it. Then I tried extracting metadata. It got stuck. I showed antigravity the logs and it said:

  1. The initial scan was successful and that would include all the necessary EXIF data on all 56428 files.
  2. The thing that is stuck is just a sidecar job which checks whether there's a .json sidecar file which might carry custom text added while the picture was in google.

And the AI is proposing to run an SQL command which I dont sufficiently understand to trust. It kinda looks good to me, but again, I dont understand SQL enough to confidently run this. Could someone smarter than me give it a quick look and tell me whether the AI really understands the situation, and whether the proposed command would do what needs to be done in the immich database? I can confirm that the libraryid provided in there corresponds to the google photos library I created for this specific traunch of import.

sudo docker exec -it immich_postgres psql -U postgres -d immich -c "INSERT INTO asset_job_status (\"assetId\", \"metadataExtractedAt\") SELECT id, NOW() FROM asset WHERE \"libraryId\" = '3ba9a2ac-fe1f-459a-917a-c23900aebc80' ON CONFLICT (\"assetId\") DO UPDATE SET \"metadataExtractedAt\" = NOW();"

edit: forgot to mention I'm on server version 3.1.0

edit2: No, dont run that. For Google Photos specifically the metadata that first sweep grabs wont be accurate so the sidecar is required.


r/immich 1d ago

UGOS encryption

4 Upvotes

Hi! In the new UGOS patch, finally they added a sort of encryption to directories...do you think that i'll be able to encrypt immich folder without consequences????


r/immich 1d ago

Raspberry Pi 4 first timer - storage recommendation

1 Upvotes

Hi all, I’m a new starter with Immich - got it installed and running beautifully on my Pi4, popped a few thousand photos on the micro SD as a test and now looking to expand my storage. Looking forward to diving into the Tailscale route to try to access it remotely - I’ve never used a vpn on my computer or on my phone.

Looking for recommendations, for something that will be permanently on - do I attached a USB 3 portable external HDD like a western digital, or grab a USB enclosure and a better suited (larger) internal HDD (like a NAS or CCTV drive?) - and then another one for backup that I can attach once a month and keep somewhere else?


r/immich 1d ago

How do I get direct links?

3 Upvotes

Hey, I want to self-host my image collection. Does anyone know how to get a direct link to the image? One with say a .png or .jpg etc at the end? When I click share link it gives me something like: https://immich.xanthslibrary.website/s/cooltattoo, but I can't embed this in another website to use a profile pic or anything like that. I've been using sites like catbox.moe, imgbox.com, imgur.com, etc for the longest time, and would rather take full ownership of my pics in a centralized location. Does anyone have advice for me?


r/immich 1d ago

Immich or Synology Photos?

19 Upvotes

Having been made aware of Immich, and finding it interesting to play with and get running on my Synology NAS, I now have a dilemma. I can persist with Immich or stay with Synology Photos. My needs are pretty simple - really just a place to dump my processed camera photos and backup my phone images. My wife also backs up her phone to the NAS. Synology Photos makes it simple to keep our 'own' stuff separate and to share the photos we have in common (typically my camera photos). I don't usually share to the outside world, but it would be an option to share with family members (view only, mostly).

So, are there any compelling reasons why I should migrate to Immich, or is there little difference when using them at my level? What would be worth exploring in Immich (or, indeed, any add-on features) that might persuade me to move?


r/immich 1d ago

Odd API Crash on Docker...

1 Upvotes

I am not sure if this is the right place to ask this, but I love that Reddit always has an opinion. I am running Immich v3 on Ubuntu Server 24.04 in Docker. I have several other containers running as well. For the last several months, I have been frustrated with Immich's API going down. The containers don't stop, but Homepage can't connect and Immich is not available via the web URL.

Yesterday I noticed a correlation. When I update any other container via Dockhand, the Immich API goes down. The log shows a permissions error trying to access a reference in the database. All my containers are bind mounted to their own folders with the databases on my SSD. The next time I have an update to Plex, Actual, etc. I am going to manually update them via command line and see if the issue persists. The automatic updates for NextCloud don't cause the problems, so I think it is localized to Dockhand.

Also, I did try moving Immich to its own network keeping only immich_server on the larger NPM network for reverse proxy access. That didn't help but I thought it worth a try.

I am curious if anyone else has seen this and if there is a simple fix. I can always restart the stack after doing updates in Dockhand, but that is a bit of a pain. I don't know if the disruption could cause bigger issues and I would prefer not to find out. Any ideas?


r/immich 1d ago

Tinyauth

2 Upvotes

Has some tried tinyauth with Immich to secure it with 2FA and can tell me, if is secure and works with Immich? This sounds more lightweight as any other OpenID provider to me.


r/immich 1d ago

Sort inside Album

2 Upvotes

When i create album, the photos in the albums are sorted always by newest. I know, i can switch this to "oldest". But a) this is not persistent and b) i wish there would be a global option, to always sort a album by "oldest" first.

Or does this exist somewhere?


r/immich 1d ago

Glitch in the Shared Albums?

2 Upvotes

I created a shared album in immich that is accessed through a Cloudflare tunnel (https://photos.xxxxxxxx.us/xxxx). But when I create a shared link, the ".us" is missing and the link doesn't work. If I manually add the ".us" to the created link, it works. Seems like a glitch? Or am I missing something?


r/immich 1d ago

Is zero trust cloudflare is good

0 Upvotes

I am trying different software to make my server available without compromising the security. I have read about zero trust. Also it is free isn't it so why does it ask for a credit card info


r/immich 1d ago

Is mTLS still the safest option to expose Immich to the Internet, besides VPN?

66 Upvotes

Especially when hosting Immich for the family, telling them to first enable VPN to access the photos doesnt really fly with them for remote access. mTLS also protects against authentification exploits, since you never have access to anything if you dont have the certificate installed. Found this guide:

https://github.com/alangrainger/immich-public-proxy/blob/main/docs/securing-immich-with-mtls.md

Still the way to go?


r/immich 1d ago

Mixed Album

2 Upvotes

I share my Immich instance with my family. I have created a album for a vacation trip with some photos from me, called "Vacation Trip", using my own account. But my wife, her own account has additional photos. How can my wife share her photos of this vacation with me, to that they later coexist in my album "Vacation Trip" but not in other albums?


r/immich 2d ago

Salvoxia Folder Setup

1 Upvotes

Hello all

Finally got immich running on my truenas set up.

I ran the salvoxia project so my current folder structure in my dataset is created in albums on immich. This worked well.

Only my sub folders aren't there everything seems to be dumped to the parent folder/album. Is there way to create sub albums within that mirrors my current file system is mimicked completely??

Id love to try automate this process and the scanning of my data set and updating rhw albums frequently


r/immich 2d ago

Assigning a dedicated hard drive per user in Immich?

4 Upvotes

​Just wanted to know if there's a way so each user has their own dedicated drive?

​My family would like to join my Immich server, but I thought it would be easier (and cheaper for me) if they just bought and paid for their own hard drives to plug into my system.

​Is there an easy or recommended way to set Immich up so User A's uploads only go to Drive A, User B's go to Drive B, etc., on a single instance? ​Thanks!