[PR #2466] [MERGED] feat(server): xmp sidecar metadata #9563

Closed
opened 2026-02-05 14:06:55 +03:00 by OVERLORD · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/immich-app/immich/pull/2466
Author: @alex-phillips
Created: 5/18/2023
Status: Merged
Merged: 5/25/2023
Merged by: @alextran1502

Base: mainHead: xmp-sidecars


📝 Commits (10+)

  • df6df1a initial commit for XMP sidecar support
  • 8ed2003 Added support for 'missing' metadata files to include those without sidecar files, now detects sidecar files in the filesystem for media already ingested but the sidecar was created afterwards
  • 50454e9 didn't mean to commit default log level during testing
  • 5732251 new sidecar logic for video metadata as well
  • c33eaf9 Merge branch 'main' into xmp-sidecars
  • 5e3ab35 Added xml mimetype for sidecars only
  • f9920ee don't need capture group for this regex
  • 1803ec5 wrong default value reverted
  • 84602b7 simplified the move here - keep it in the same try catch since the outcome is to move the media back anyway
  • bda9918 simplified setter logic

📊 Changes

35 files changed (+371 additions, -48 deletions)

View changed files

docs/docs/features/img/sidecar-jobs.png (+0 -0)
docs/docs/features/img/xmp-sidecars.png (+0 -0)
docs/docs/features/xmp-sidecars.md (+13 -0)
📝 mobile/openapi/doc/AllJobStatusResponseDto.md (+1 -0)
📝 mobile/openapi/doc/AssetApi.md (+4 -2)
📝 mobile/openapi/lib/api/asset_api.dart (+12 -3)
📝 mobile/openapi/lib/model/all_job_status_response_dto.dart (+11 -3)
📝 mobile/openapi/lib/model/job_name.dart (+3 -0)
📝 mobile/openapi/test/all_job_status_response_dto_test.dart (+5 -0)
📝 mobile/openapi/test/asset_api_test.dart (+1 -1)
📝 server/apps/immich/src/api-v1/asset/asset.controller.ts (+9 -2)
📝 server/apps/immich/src/api-v1/asset/asset.core.ts (+2 -0)
📝 server/apps/immich/src/api-v1/asset/asset.service.spec.ts (+5 -1)
📝 server/apps/immich/src/api-v1/asset/asset.service.ts (+10 -3)
📝 server/apps/immich/src/api-v1/asset/dto/create-asset.dto.ts (+3 -0)
📝 server/apps/immich/src/config/asset-upload.config.ts (+10 -0)
📝 server/apps/microservices/src/microservices.module.ts (+2 -1)
📝 server/apps/microservices/src/processors/metadata-extraction.processor.ts (+123 -18)
📝 server/immich-openapi-specs.json (+11 -2)
📝 server/libs/domain/src/asset/asset.repository.ts (+6 -0)

...and 15 more files

📄 Description

This PR adds support for ingesting metadata from XMP sidecar files.

  • If an XMP sidecar exists with a media file, it is assumed that the XMP file takes priority and all metadata is read from the file.
  • XMP sidecars can now be uploaded with the initial media files via the API.
  • "All" metadata scans check for the presence of new sidecar files if the media file does not have a sidecar file associated with it. This allows the creation of metadata files from third party software such as Digikam or Adobe Lightroom.
  • "Missing" metadata scans include media assets that do not have a sidecar file associated with them. It attempts to find the sidecar in the filesystem and associates that sidecar file with the asset in the future.
  • The XMP sidecar path is stored along with the media asset with a reference to its filepath.

image
image
image


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/immich-app/immich/pull/2466 **Author:** [@alex-phillips](https://github.com/alex-phillips) **Created:** 5/18/2023 **Status:** ✅ Merged **Merged:** 5/25/2023 **Merged by:** [@alextran1502](https://github.com/alextran1502) **Base:** `main` ← **Head:** `xmp-sidecars` --- ### 📝 Commits (10+) - [`df6df1a`](https://github.com/immich-app/immich/commit/df6df1a12d0760b28454b083200f4f7ec0b2fe08) initial commit for XMP sidecar support - [`8ed2003`](https://github.com/immich-app/immich/commit/8ed20033732f104eb074d44ce0aa1557860f3b30) Added support for 'missing' metadata files to include those without sidecar files, now detects sidecar files in the filesystem for media already ingested but the sidecar was created afterwards - [`50454e9`](https://github.com/immich-app/immich/commit/50454e9fe5f01722547a26092911f7fb14ab660a) didn't mean to commit default log level during testing - [`5732251`](https://github.com/immich-app/immich/commit/5732251a1f5e831b6bc95f287320d27f767e3589) new sidecar logic for video metadata as well - [`c33eaf9`](https://github.com/immich-app/immich/commit/c33eaf9321e06ffbe72e063259b56d89737270af) Merge branch 'main' into xmp-sidecars - [`5e3ab35`](https://github.com/immich-app/immich/commit/5e3ab35481e0333056bbf30d5079d84e8a448e1e) Added xml mimetype for sidecars only - [`f9920ee`](https://github.com/immich-app/immich/commit/f9920eebd070c524ed94182e845d4d56b4986149) don't need capture group for this regex - [`1803ec5`](https://github.com/immich-app/immich/commit/1803ec55f2661f166952759e9da1bb530052ac33) wrong default value reverted - [`84602b7`](https://github.com/immich-app/immich/commit/84602b7198a4ae9a6b3aeae71c9525c9b6d9c398) simplified the move here - keep it in the same try catch since the outcome is to move the media back anyway - [`bda9918`](https://github.com/immich-app/immich/commit/bda991845a7a952e381004ea2fc3205906c33c3d) simplified setter logic ### 📊 Changes **35 files changed** (+371 additions, -48 deletions) <details> <summary>View changed files</summary> ➕ `docs/docs/features/img/sidecar-jobs.png` (+0 -0) ➕ `docs/docs/features/img/xmp-sidecars.png` (+0 -0) ➕ `docs/docs/features/xmp-sidecars.md` (+13 -0) 📝 `mobile/openapi/doc/AllJobStatusResponseDto.md` (+1 -0) 📝 `mobile/openapi/doc/AssetApi.md` (+4 -2) 📝 `mobile/openapi/lib/api/asset_api.dart` (+12 -3) 📝 `mobile/openapi/lib/model/all_job_status_response_dto.dart` (+11 -3) 📝 `mobile/openapi/lib/model/job_name.dart` (+3 -0) 📝 `mobile/openapi/test/all_job_status_response_dto_test.dart` (+5 -0) 📝 `mobile/openapi/test/asset_api_test.dart` (+1 -1) 📝 `server/apps/immich/src/api-v1/asset/asset.controller.ts` (+9 -2) 📝 `server/apps/immich/src/api-v1/asset/asset.core.ts` (+2 -0) 📝 `server/apps/immich/src/api-v1/asset/asset.service.spec.ts` (+5 -1) 📝 `server/apps/immich/src/api-v1/asset/asset.service.ts` (+10 -3) 📝 `server/apps/immich/src/api-v1/asset/dto/create-asset.dto.ts` (+3 -0) 📝 `server/apps/immich/src/config/asset-upload.config.ts` (+10 -0) 📝 `server/apps/microservices/src/microservices.module.ts` (+2 -1) 📝 `server/apps/microservices/src/processors/metadata-extraction.processor.ts` (+123 -18) 📝 `server/immich-openapi-specs.json` (+11 -2) 📝 `server/libs/domain/src/asset/asset.repository.ts` (+6 -0) _...and 15 more files_ </details> ### 📄 Description This PR adds support for ingesting metadata from XMP sidecar files. - If an XMP sidecar exists with a media file, it is assumed that the XMP file takes priority and all metadata is read from the file. - XMP sidecars can now be uploaded with the initial media files via the API. - "All" metadata scans check for the presence of new sidecar files if the media file does not have a sidecar file associated with it. This allows the creation of metadata files from third party software such as Digikam or Adobe Lightroom. - "Missing" metadata scans include media assets that do not have a sidecar file associated with them. It attempts to find the sidecar in the filesystem and associates that sidecar file with the asset in the future. - The XMP sidecar path is stored along with the media asset with a reference to its filepath. ![image](https://github.com/immich-app/immich/assets/3135216/8ab61ff2-eb9b-4deb-959f-54e09a03e254) ![image](https://github.com/immich-app/immich/assets/3135216/9ffed280-28f8-45b6-9c38-cde487ecb9a9) ![image](https://github.com/immich-app/immich/assets/3135216/e8cb925a-eb64-4c21-b551-5d4cddb8018d) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
OVERLORD added the pull-request label 2026-02-05 14:06:55 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#9563