Commit Graph

180 Commits

Author SHA1 Message Date
mws-weekend-projects 90a69e2ba6 feat(web): add full-path search mode to UI (#26758)
Co-authored-by: mws-weekend-projects <mws-weekend-projects@users.noreply.github.com>
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2026-05-06 15:45:40 +02:00
Aigars Mahinovs 576b1eb999 docs: update rocm installation instructions (#25434) 2026-05-06 09:30:42 -04:00
Brent Hugh 3e6d053f93 chore: enhance documentation on wildcard and exclusion patterns (#27884)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-05-06 12:36:25 +02:00
Aki Hakune be1b9a5f67 feat(server): add MPO file type support (#27963)
* feat(server): add MPO file type support

* fix(server): document description error
2026-04-20 17:45:53 -04:00
Cullen Jennings 781d568f29 fix(docs): typo 'Start rating' to 'Star rating' (#27606) 2026-04-08 18:25:45 +00:00
Ray 136bd1e2eb feat(server): Add support for .ts files (#27529) 2026-04-06 15:50:05 +02:00
Phlogi 8c6adf7157 feat(server): resolve duplicates (#25316)
* feat(web): Synchronize information from deduplicated images

* Added new settings menu to the the deduplication tab.
* The toggable options in the settings are synchronization of: albums, favorites, ratings, description, visibility and location.
* When synchronizing the albums, the resolved images will be added to all albums of the duplicates.
* When synchronizing the favorite status, the resolved images will be marked as favorite, if at least one selectable image is marked as favorite.
* When synchronizing the ratings, the highest rating from the selectable images will be applied to the resolved image.
* When synchronizing the description, all descriptions from the selectable images will be merged into one description for the resolved image.
* When synchronizing the visibility, the most restrictive visibility setting from the selectable images will be applied to the resolved image.
* When synchronizing the location, if exactly one unique location exists among the selectable images, this location will be applied to the resolved image.
* There is no additional UI for these settings to keep the visual clutter minimal. The settings are applied automatically based on the user's preferences.

* Replace addAssetToAlbums with copyAsset

* fix linter

* feat(web): add duplicate sync fields and fix typo

* feat(web): add tag sync and enhance duplicate resolution

This update introduces tag synchronization for duplicate resolution,
ensuring all unique tag IDs from duplicates are applied to kept assets.
The visibility sync logic is updated to use a simplified ordering, as the hidden status items will never show up in a duplicate set.
Album synchronization now merges albums directly via addAssetsToAlbums; as the approach with copyAsset API endpoint was ineffiecient.
Description, rating, and location sync logic is improved for correctness.
and deduplication. i18n strings were added / updated.

* feat(server): move duplicate resolution to backend with sync and stacking

Moves duplicate metadata synchronization from frontend to backend, enabling robust
batch operations and proper validation. This is an improved refactor of PR #13851.

New endpoints:
- POST /duplicates/resolve - batch resolve with configurable metadata sync
- POST /duplicates/stack - create stacks from duplicate groups
- GET /duplicates - now includes suggestedKeepAssetIds based on file size and EXIF

Key changes:
- Move sync logic (albums, tags, favorites, ratings, descriptions, location, visibility) to server
- Add server-side metadata merge policies with proper conflict resolution
- Replace client-side resolution logic with new backend endpoints
- Add comprehensive E2E tests (70+ test cases) and unit tests
- Update OpenAPI specs and TypeScript SDK

No breaking changes - only additions to existing API.

* feat(preferences): enable all duplicate sync settings by default

* chore: clean up

* chore: clean up

* refactor: rename & clean up

* fix: preference upgrade

* chore: linting

* refactor(e2e): use updateAssets API for setAssetDuplicateId

* fix: visibility sync logic in duplicate resolution

* fix(duplicate): write description to exifUpdate

Previously the duplicate resolution populated assetUpdate.description even
though description belongs to exif info.

* fix(duplicate): remove redundant updateLockedColumns wrapper

updateAllExif already computes lockedProperties via distinctLocked
using Object.keys(options). The wrapper added a lockedProperties key
to the options object, causing the spurious string 'lockedProperties'
to be stored in the lockedProperties array.

* fix(duplicate): write merged tags to asset_exif to survive metadata re-extraction

During duplicate resolution, replaceAssetTags correctly wrote merged tag
IDs to the tag_asset table, but never updated asset_exif.tags or locked
the tags property. The subsequent SidecarWrite → AssetExtractMetadata
chain calls applyTagList, which destructively replaces tag_asset rows
with whatever is in asset_exif.tags — still the original per-asset tags,
not the merged set.

Write merged tag values to asset_exif.tags via updateAllExif (which also
locks the property via distinctLocked), and queue SidecarWrite when tags
change so they persist to the sidecar file.

* docs(duplicates): clarify location and tag sync behavior

* refactor(duplicate): remove sync settings, always sync all metadata on resolve

Remove DuplicateSyncSettingsDto and the per-field sync toggles
(albums, favorites, rating, description, visibility, location, tags).
Duplicate resolution now unconditionally syncs all metadata from
trashed assets to kept assets.

- Remove DuplicateSyncSettingsDto and settings field from DuplicateResolveDto
- Update DuplicateService to always run all sync logic without conditionals
- Delete DuplicateSettingsModal.svelte and settings gear button from UI
- Remove DuplicateSettings type and duplicateSettings persisted store
- Update unit and e2e tests to remove settings from resolve requests

* docs: update duplicates utility to reflect automatic metadata sync

* docs(web): replace duplicates info modal with link to documentation

* chore: clean up

* fix: add missing type cast to jsonAgg in duplicate repository getAll

* fix: skip persisting rating=0 in duplicate merge to avoid unnecessary sidecar write

---------

Co-authored-by: Toni <51962051+EinToni@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2026-03-26 18:33:55 +00:00
Kishor Prins dd9046508d feat: ROCm 7.2 and MIGraphX support (#26178) 2026-02-26 16:52:26 +00:00
Jonathan Jogenfors 96dc4a77a0 fix: always show library scan button (#26428)
* fix: always show library scan button

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-23 21:18:23 +00:00
Timon 316f86d25e feat: add .mxf file support (#24644)
* feat: add support for MXF format in media handling

* Updated supported formats documentation to include MXF.
* Added MXF to valid video extensions in tests.
* Registered MXF MIME type in mime-types utility.

* fix: enhance MXF handling in mime-types utility

* Updated video mime type validation to include 'application/mxf'.
* Adjusted asset type determination to recognize MXF as a video container.

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-19 06:39:41 +00:00
Claudio 90d554947f docs: update ml-hardware-acceleration.md (#25755)
Update ml-hardware-acceleration.md

Invert the lines about editing the docker-compose.yml file to have users add the tag to the image first, then uncomment the extends section. This should help users follow the instructions as they flow through the YAML file.
2026-02-10 12:28:21 -05:00
Alex 57485023ae fix: free up space using small batch size to reliably work on Android (#26047)
* fix: free up space delete in small batch

* fix: free up space delete in small batch
2026-02-09 11:48:55 -06:00
Dane 9d8efe2685 fix(docs): add missing --json-output arg to CLI example (#25870) 2026-02-05 14:00:27 -05:00
Alex a244d94ac8 docs: update documentation (#25440)
* docs: beginning of the year tune up and updates

* darker dark

* backup information

* promote to table of content

* Apply suggestions from code review

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Mees Frensel <33722705+meesfrensel@users.noreply.github.com>

* restore and backup

* edit

* Apply suggestions from code review

Co-authored-by: bo0tzz <git@bo0tzz.me>

* feedback

* more information on mobile

Co-authored-by: https://github.com/aviv926

* more information on free up space
>
> Co-authored-by: jtagcat <git-12dbd862@jtag.cat>

* Update docs/docs/features/mobile-app.mdx

Co-authored-by: jtagcat <git-12dbd862@jtag.cat>

* screenshot and minor tweaks

---------

Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Mees Frensel <33722705+meesfrensel@users.noreply.github.com>
Co-authored-by: bo0tzz <git@bo0tzz.me>
Co-authored-by: jtagcat <git-12dbd862@jtag.cat>
2026-01-25 15:45:30 +00:00
aviv926 1a8671d940 feat(docs): add Free Up Space section (#25253)
* feat(docs): add Free Up Space tool section with usage details and warnings

* typo
2026-01-21 10:29:59 -06:00
aviv926 231a475a17 feat: Cleanup docs (#25223)
Cleanup docs
2026-01-12 13:50:02 -06:00
bo0tzz a2502109ab fix: use my.immich.app as url placeholder in docs (#25153) 2026-01-09 11:46:55 +00:00
Flozza eb718145c0 docs: config options for hardware transcoding (#24853) 2026-01-05 16:40:53 +01:00
Daniel Ramos edd3ab7cc9 feat(server): implement switchable logging formats (console/json) (#24791)
* feat(server): add LogFormat enum and configuration

* feat(server): add structured logging formatters

* feat(server): implement switchable logging formats (console/json)

* Revert "feat(server): add LogFormat enum and configuration"

This reverts commit 565e95ae68.

* feat(server): implement JSON logging using NestJS native support

* refactor: rename LOG_FORMAT to IMMICH_LOG_FORMAT for consistency

* docs: add IMMICH_LOG_FORMAT documentation

* chore: format environment-variables.md

* chore: format monitoring.md
2026-01-05 09:21:02 -06:00
Jason Rasmussen 45f68f73a9 feat: queue detail page (#24352) 2025-12-03 13:39:32 -05:00
luneth be15a84f9b chore: update android signing fingerprints to docs (#23361)
* Update mobile-app.mdx

Add certificate fingerprint for android releases.

* chore: formatting

* Chore: Typo

---------

Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-10-31 09:40:53 -05:00
Robin Jacobs 65f29afb0f feat(cli): add --delete-duplicates option (#20035)
* Add --delete-duplicates option to delete local assets that already exist on the server, fixes #12181

* Update docs

* Fix `--delete-duplicates` implying `--delete`

* fix the test, break the english

* format

* also ran the formatter on the e2e folder :)

* early return, fewer allocations

* add back log

---------

Co-authored-by: Robin Jacobs <robin.jacobs@beeline.com>
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-10-24 19:31:54 +00:00
Lee Peuker ca745d00ee fix(docs): cli upload json format example (#22858)
Fix cli upload json format example
2025-10-17 14:08:42 +00:00
Jason Rasmussen 3ea8d140a2 feat: move community projects and guides to immich-aweseome (#23016) 2025-10-17 10:00:28 -04:00
Joren Guillaume 4b7f851428 docs: Expand on OpenVINO WSL HW accel (#21054)
* add group/render section to openvino-wsl hwaccel

* Fix indentation for YAML

* Remove obsolete enter

* chore: formatting

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-10-17 09:05:07 -04:00
0xflotus 26e877cba7 docs: fix small error (#22890)
* docs: fix small error

* docs: fix small error

* docs: fix small error

* docs: fix small error

* docs: fix small error

* docs: fix small error

* docs: fix small error
2025-10-15 21:30:33 +00:00
luzpaz 46869f664d fix: various typos (#22867)
Found via `codespell -q 3 -S "*.svg,./i18n,./docs/package-lock.json,./readme_i18n,./mobile/assets/i18n" -L afterall,devlop,finaly,inout,nd,optin,renderd,sade`
2025-10-13 15:25:23 +05:30
Jason Rasmussen eee793bfe4 docs: add some external library notes (#22776) 2025-10-08 12:13:41 -04:00
Zack Pollard 37a3784d80 feat: docs.immich.app (#21819)
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-09-25 15:54:34 +01:00
Jason Rasmussen ef6e4f4699 docs: update tag details (#21815) 2025-09-11 10:09:18 -04:00
trommegutten 7e6cd48783 docs: improve and clarify XMP sidecar behavior (#20334)
* docs: improve and clarify XMP sidecar behavior

- Simplified and reorganized the documentation for XMP sidecars
- Clearly separated CLI import vs. external library behavior
- Clarified what metadata fields are stored in the database
- Documented filename rules and storage behavior
- Explained write-back behavior, including permission requirements

* Clarify sidecar write-back behavior for external libraries

Updated documentation to reflect that Immich does not write metadata to sidecar files in external libraries unless the mount is writable.

Mentions silent fail behavior as described in Issue #10538.

* Update xmp-sidecars.md

* Refactor section 1: clarify XMP fields Immich reads and writes

- Rewrote section 1 with a simplified 3-column table: Metadata · Writes to · Reads from
- Corrected date field logic with prioritized read order
- Clarified that Immich only updates fields that have changed
- Removed incorrect mention of dc:title

* docs: clarify tag reading priority (TagsList, HierarchicalSubject, IPTC:Keywords)

Updated the documentation for tag metadata extraction to clarify the prioritized order in which Immich reads tags from imported media:

1. digiKam:TagsList
2. lr:HierarchicalSubject
3. IPTC:Keywords

This reflects the actual logic used in the getTagList()
2025-09-11 14:00:53 +00:00
per-review 2801b0953d docs: be explicit about which container exposes metrics (#20424)
* Be explicit about which container exposes metrics

* Update docs/docs/features/monitoring.md

Co-authored-by: bo0tzz <git@bo0tzz.me>

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: bo0tzz <git@bo0tzz.me>
2025-09-10 01:39:15 +00:00
Sergey Katsubo f5954f4c9b chore(docs): Avoid /data in external library examples (#21357)
* Avoid /data for external libraries

* Remove mention of microservice containers

* Update docs/docs/features/libraries.md

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>

---------

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>
2025-08-29 10:24:21 -05:00
Jason Rasmussen 58521c9efb feat: change default media location to /data (#20367)
* feat!: change default media location to /data

* feat: dynamically detect media location
2025-07-29 16:58:50 -04:00
Sergey Katsubo c7fcb23a23 chore(docs): add links to custom scan interval from other sections in external library doc (#20353) 2025-07-28 13:42:59 +01:00
Sebastian Di Luzio f1cac122ed fix: more inclusive language (#20092) 2025-07-22 21:29:36 +00:00
Sergey Katsubo 977d6452f6 fix(docs): library and folders minor adjustments (#19642) 2025-07-10 14:31:06 +00:00
OffsetMonkey538 2f5d75ce21 docs: fix typo of webp listed under jpeg (#19743) 2025-07-05 15:52:22 +00:00
Hugo 6499057b4c docs: update instructions for external libraries (#19080)
The first step was missing—it's probably obvious for those already
familiar with Immich.

After I added the external library, no photos showed up anywhere and
all interfaces indicated that I had no photos

Eventually I found this "Scan" button, and after clicking it photos
started to appear. This is a necessary step before photos from the
library actually show up anywhere, so point it out explicitly.
2025-06-10 09:28:49 -05:00
Bence Ferdinandy 31af44dd2a feat: add --json-output option to upload command (#18845)
* fix(docs): update the cli upload usage

The cli upload usage is missing some options compared to what is the current
output of `immich upload --help`. Update the docs accordingly.

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>

* feat(cli): add --json-output option to upload command

Add an option that allows retrieving per-file information about the
upload process. The output includes the newFiles, duplicates and
newAssets lists, but could accommodate more information later if needed.

One use case this allows for is using --dry-run to get a list of all the
files that would be uploaded, and checking them manually before an
upload. This can be particularly useful when a curated subset of images
have already been uploaded to immich and we want to double check for
some stragglers without uploading everything to immich.

The upload command has a few lines of logging, so to get an actually
parsable json one needs to strip those lines:

  immich upload --dry-run * | tail -n +4 | jq .newFiles[]

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>

---------

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
2025-06-02 01:58:58 +00:00
Brandon Wees 78224961d1 feat(web): make google cast opt in (#18514)
* add setting switch

this isnt bound to anything yet

* make google casting opt-in

* doc updates

* lint docs

* remove unneeded translation items

* update mobile openai defs

* fix failing test

we need to mock user prefs since CastButton uses it
2025-05-28 15:57:36 -05:00
Brandon Wees 86db0aafe5 feat(web): add support for casting (#18231)
* recreate #13966

* gcast button works

* rewrote gcast-player to be GCastDestination and CastManager manages the interface between UI and casting destinations

* remove unneeded imports

* add "Connected to" translation

* Remove css for cast launcher

* fix tests

* fix doc tests

* fix the receiver application ID

* remove casting app ID

* remove cast button from nav bar

It is now present at the following locations:

- shared link album and single asset views
- asset viewer (normal user)
- album view (normal user)

* part 1 of fixes from @danieldietzler code review

* part 2 of code review changes from @danieldietzler and @jsram91

* cleanup documentation

* onVideoStarted missing callback

* add token expiry validation

* cleanup logic and logging

* small cleanup

* rename to ICastDestination

* cast button changes
2025-05-20 16:08:23 -05:00
Mert 0d773af6c3 feat: vectorchord (#18042)
* wip

auto-detect available extensions

auto-recovery, fix reindexing check

use original image for ml

* set probes

* update image for sql checker

update images for gha

* cascade

* fix new instance

* accurate dummy vector

* simplify dummy

* preexisiting pg docs

* handle different db name

* maybe fix sql generation

* revert refreshfaces sql change

* redundant switch

* outdated message

* update docker compose files

* Update docs/docs/administration/postgres-standalone.md

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* tighten range

* avoid always printing "vector reindexing complete"

* remove nesting

* use new images

* add vchord to unit tests

* debug e2e image

* mention 1.107.2 in startup error

* support new vchord versions

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-20 08:36:43 -05:00
Ruslan 4935f3e0bb fix(docs): Update old jellyfin docs links (#18311)
Update old jellyfin docs links

Updated old links to jellyfin docs
2025-05-15 15:32:31 +00:00
luzpaz b1e1362246 fix: various typos (grouped in to separate commits) (#18177) 2025-05-09 13:10:34 +00:00
aviv926 21a6eb30ff feat(docs): documentation update (#17720)
Documentation update
2025-04-20 23:55:58 -05:00
Paul Puschmann 459c815086 feat(docs): Clarify the usage of immich-cli with Docker (#17595)
Add some explanation how to use the various usage parameters together
with the `immich-cli` in the container.
2025-04-15 20:08:55 +00:00
Lorenzo Montanari 565cceb323 docs: fixed a wrong path in CLI docs page (#17369)
docs: fixed a wrong path in CLI page
2025-04-06 22:00:10 -05:00
Mert 637ad1fdcb docs: minor typo (#17258)
three -> two
2025-03-31 18:34:29 +02:00
Mert 6789c2ac19 feat(ml): better multilingual search with nllb models (#13567) 2025-03-31 11:06:57 -04:00