# Feature catalog — immich-app/immich

> Canonical page: https://codevetter.com/unpack/immich/feature-catalog

# Feature catalog — immich-app/immich

Scanned commit d6d094738366aaf4d2fcefdfe2702f50c72ba5b0 (2026-09-22). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

Feature surface is primarily ~45 Nest controllers registered in controllers/index.ts covering assets, albums, sharing, people/faces, search, libraries, jobs, sync, auth, and admin management. Background processing is expressed as JobName jobs on QueueName queues (thumbnails, metadata, video conversion, face detection/recognition, smart search, OCR, duplicates, library scan, backups, notifications, workflows). Auth supports password login, OAuth/OIDC with backchannel logout, API keys, sessions, PIN codes, and shared-link access. A WASM plugin system (extism) plus user-defined workflows are newer extension-oriented features.
- Asset upload/download/thumbnails: AssetMediaController exposes POST /assets (multipart, Permission.AssetUpload, sharedLink allowed, optional x-immich-checksum sha1 dedupe header), GET /assets/:id/original, and GET /assets/:id/thumbnail. — [server/src/controllers/asset-media.controller.ts#L43-140](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/asset-media.controller.ts#L43-L140) [server/src/dtos/asset-media.dto.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/dtos/asset-media.dto.ts)
- Albums, partner sharing, shared links, stacks, and activities each have dedicated controllers and services (album, partner, shared-link, stack, activity) wired through controllers/index.ts. — [server/src/controllers/index.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/index.ts) [server/src/controllers/album.controller.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/album.controller.ts) [server/src/controllers/shared-link.controller.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/shared-link.controller.ts)
- Search features split into metadata search and smart (CLIP) search via SearchController + SearchRepository backed by pgvector/VectorChord embeddings produced by the ML service. — [server/src/controllers/search.controller.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/search.controller.ts) [server/src/repositories/search.repository.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/search.repository.ts) [server/src/repositories/machine-learning.repository.ts#L40-44](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/machine-learning.repository.ts#L40-L44)
- People/facial recognition is a job pipeline: JobName.AssetDetectFaces and FacialRecognition run on QueueName.FaceDetection/FacialRecognition and call the ML service's facial-recognition detection+recognition pipeline. — [server/src/enum.ts#L815-835](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/enum.ts#L815-L835) [server/src/services/person.service.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/person.service.ts) [server/src/repositories/machine-learning.repository.ts#L61-74](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/machine-learning.repository.ts#L61-L74)
- Video features include transcoding (fluent-ffmpeg in media.repository.ts, transcoding.service.ts) and HLS session-based streaming coordinated through Hls* events in the EventMap and hls.service.ts. — [server/src/repositories/media.repository.ts#L423-450](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/media.repository.ts#L423-L450) [server/src/services/hls.service.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/hls.service.ts) [server/src/repositories/event.repository.ts#L98-104](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/event.repository.ts#L98-L104)
- External libraries support filesystem watching via chokidar and scanning jobs (LibrarySyncAssets/LibrarySyncFiles/LibraryScanQueueAll); watching is locked to a single microservice instance via a database lock. — [server/src/services/library.service.ts#L41-85](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/library.service.ts#L41-L85) [server/src/enum.ts#L877-885](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/enum.ts#L877-L885)
- Auth features: password login with bcrypt + constant-time dummy-hash compare, OAuth/OIDC with backchannel logout token validation, API keys, sessions with lock/invalidate, and PIN code setup/reset/change. — [server/src/services/auth.service.ts#L60-180](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/auth.service.ts#L60-L180) [server/src/controllers/oauth.controller.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/oauth.controller.ts) [server/src/controllers/api-key.controller.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/api-key.controller.ts)
- Admin surface: user-admin.controller, system-config.controller, job.controller/queue.controller for pausing/resuming/cleaning BullMQ queues, database-backup.controller, integrity-admin.controller, and notification-admin.controller. — [server/src/controllers/index.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/index.ts) [server/src/services/queue.service.ts#L106-135](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/queue.service.ts#L106-L135)
- Delta sync for offline-capable clients is implemented by sync.controller.ts + sync.service.ts + sync-checkpoint.repository.ts (SyncCheckpointRepository), which mobile uses to reconcile local drift DB state. — [server/src/controllers/sync.controller.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/sync.controller.ts) [server/src/services/sync.service.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/sync.service.ts) [server/src/repositories/sync-checkpoint.repository.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/sync-checkpoint.repository.ts) [mobile/pubspec.yaml](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/mobile/pubspec.yaml)
- Notifications and email: notification.service.ts + email.repository.ts render react-email templates from server/src/emails and send via nodemailer; jobs like NotifyUserSignup/NotifyAlbumInvite/NotifyAlbumUpdate run on the notifications queue. — [server/src/services/notification.service.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/notification.service.ts) [server/src/enum.ts#L891-895](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/enum.ts#L891-L895) [server/package.json#L64-65](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/package.json#L64-L65)
- A WASM plugin system loads plugins through @extism/extism with a generic-pool of plugin instances in PluginRepository; exposure is gated by env vars IMMICH_PLUGINS_INSTALL_FOLDER and IMMICH_ALLOW_EXTERNAL_PLUGINS, with a @immich/plugin-sdk workspace package for authors. — [server/src/repositories/plugin.repository.ts#L1-45](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/repositories/plugin.repository.ts#L1-L45) [server/src/dtos/env.dto.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/dtos/env.dto.ts) [packages/plugin-sdk/package.json](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/packages/plugin-sdk/package.json) [server/src/services/plugin.service.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/plugin.service.ts)
- Workflows (user automation) exist end-to-end: workflow.controller.ts, workflow.repository.ts, utils/workflow.ts (isMethodCompatible for plugin methods), QueueName.Workflow, and a web /workflows route. — [server/src/services/plugin.service.ts#L30-35](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/plugin.service.ts#L30-L35) [server/src/utils/workflow.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/utils/workflow.ts) [server/src/enum.ts#L832](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/enum.ts#L832)
- Web routes cover photos, albums, favorites, archive, locked folder, map, memories, people, places, partners, search, sharing, shared-links, tags, trash, user-settings, utilities, workflows, plus admin and auth route groups. — [web/src/routes/(user)/photos](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/web/src/routes/(user)/photos) [web/src/routes/auth/login/+page.svelte](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/web/src/routes/auth/login/%2Bpage.svelte)
- Memories, timeline buckets, map clustering, trash auto-empty, duplicate detection, and OCR are first-class jobs/controllers (memory.controller, timeline.controller, map.controller, trash.controller, duplicate.controller, ocr.service). — [server/src/controllers/index.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/controllers/index.ts) [server/src/services/ocr.service.ts](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/services/ocr.service.ts) [server/src/enum.ts#L826-834](https://github.com/immich-app/immich/blob/d6d094738366aaf4d2fcefdfe2702f50c72ba5b0/server/src/enum.ts#L826-L834)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
