559 Commits
Author SHA1 Message Date
jfmcarreira dfb2f98b33 feat: compression 20 2026-09-29 00:31:33 +01:00
jfmcarreira 006b8ba095 feat: compression 19 2026-09-28 17:36:38 +01:00
jfmcarreira 8acb107862 feat: compression 18 2026-09-28 15:36:44 +01:00
jfmcarreira eda0ae6b1d feat: compression 17 2026-09-28 10:48:47 +01:00
jfmcarreira 05a5101831 feat: compression 16 2026-09-25 01:49:30 +01:00
jfmcarreira 4858392c1d feat: compression 15 2026-09-25 01:42:43 +01:00
jfmcarreira a182777ec4 feat: compression 14 2026-09-25 01:38:41 +01:00
jfmcarreira 74e4b51e4e feat: compression 13 2026-09-25 01:17:50 +01:00
jfmcarreira cf6b9c35c2 feat: compression 12 2026-09-25 00:04:46 +01:00
jfmcarreira cc237d092c feat: compression 11 2026-09-24 21:05:37 +01:00
jfmcarreira 01cdb3a0de feat: compression 10 2026-09-24 16:34:27 +01:00
jfmcarreira e88c222c22 feat: compression 9 2026-09-24 15:59:25 +01:00
jfmcarreira a7afeac440 feat: compression 8 2026-09-24 14:57:52 +01:00
jfmcarreira 5817752bc4 feat: compression 7 2026-09-24 14:51:21 +01:00
jfmcarreira 1b63992d0c feat: compression 6 2026-09-24 14:39:49 +01:00
jfmcarreira 890d04e393 feat: compression 5 2026-09-24 12:27:06 +01:00
jfmcarreira 868155e5ff feat: compression 4 2026-09-24 12:20:33 +01:00
jfmcarreira 3573ac4c0e feat: compression 3 2026-09-24 12:19:13 +01:00
jfmcarreira 0319d0d548 feat: compression 2 2026-09-24 11:38:00 +01:00
jfmcarreira 8417d4c529 feat: compression 1 2026-09-24 11:37:28 +01:00
Sai charan GuntupalliandGitHub 505c6c7db7 Merge pull request #336 from immich-power-tools/prerelease
v0.24.0 -  fix: support Immich v3.2.0
2026-09-14 13:20:11 +05:30
Sai Charan 741f5bb32a fix: support Immich v3.2.0
-  v3.2.0 renamed asset_face.personId to personGroupId and dropped person.id
in favour of a (ownerId, personGroupId) key, breaking every face/person
query.
2026-09-14 07:43:20 +00:00
Sai Charan a3357d6b43 fix: update query handling in search API to support filter-only searches
Fixes #284
2026-09-01 18:57:51 +00:00
Sai Charan 86170509c2 Merge remote-tracking branch 'origin/main' into prerelease 2026-09-01 18:52:38 +00:00
Sai charan GuntupalliandGitHub 7052ebc686 Merge pull request #330 from papajade55-debug/fix/immich-v3-date-format
fix(ai): send full ISO datetimes to Immich search API
2026-09-02 00:21:41 +05:30
Sai Charan fbfb5de4c8 fix: upgrade deps and prune unused packages
Fixes #329
2026-09-01 18:26:58 +00:00
papajade55-debug 7e4fbd7c0d fix(ai): send full ISO datetimes to Immich search API
Smart Search produced takenAfter/takenBefore as plain YYYY-MM-DD strings,
but the Immich search API validates them as ISO 8601 datetimes and rejects
a bare date with invalid_format / format: datetime. Every search containing
a date failed with 'Failed to fetch assets'.

Expand date-only values after the existing today-guardrail (which compares
YYYY-MM-DD strings and must keep doing so): takenAfter to the start of the
day, takenBefore to the end of the day so a single-day range such as
'videos yesterday' is not empty. Values that already carry a time component
are left untouched.
2026-08-23 18:44:49 +02:00
Sai charan GuntupalliandGitHub 1070392b9b Merge pull request #304 from jonvdveen/fix/dockerignore-exclude-env
fix: exclude .env files from the Docker build context
2026-08-14 00:59:47 +05:30
jonvdveenandClaude Opus 4.8 f0c3b44778 fix: exclude .env files from the Docker build context
.dockerignore did not list .env, so `docker build` copied any local .env —
credentials included — into the image build context (and into the image
wherever the Dockerfile does a broad `COPY . .`). Anyone building the image
with a populated .env present would bake their secrets into the resulting
image layers.

Add `.env` and `.env.*.local` to .dockerignore so local environment files
never enter the build context. Runtime configuration is still supplied the
intended way — environment variables / an env_file at `docker run` /
compose time — so nothing about normal deployment changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 09:46:19 -06:00
Varun Raj f37c19cc84 fix: add album_user.role to GROUP BY in albums list query
The myRole select added for issue #286 wasn't included in the GROUP BY
clause, causing a 500 ("column album_user.role must appear in the
GROUP BY clause") whenever includeShared=true was requested.
2026-07-11 04:26:47 +00:00
Varun Raj 1afe0c858c feat: list shared albums (editor access) in workflow add/remove-album picker
Closes #286. The album picker for add_to_album/remove_from_album only
showed albums owned by the current user. Add an opt-in ?includeShared
param to /api/albums/list that also includes albums where the user
has 'editor' role (upload access), and group the picker into 'My
Albums' / 'Shared Albums' sections. Other callers of listAlbums()
don't pass includeShared, so they keep the existing owner-only
behavior unchanged.
2026-07-10 16:20:37 +00:00
Varun Raj ManoharanandGitHub 58bb1d0e9d Merge pull request #268 from dgilperez/feat/potential-trips
feat(potential-albums): add Trips view that groups consecutive away days
2026-07-10 21:43:46 +05:30
Varun Raj 5068419e3b Merge remote-tracking branch 'origin/prerelease' into feat/potential-trips 2026-07-10 16:13:24 +00:00
Varun Raj a5a4528962 refactor: consolidate day/trip grouping into shared endpoints via groupBy param
Merges potential-trips + potential-trip-assets into
potential-albums-dates + potential-albums-assets respectively, keyed
by a new ?groupBy=day|trip query param. The actual grouping logic is
extracted into two new helper files (potentialAlbumsGrouping.helper.ts,
potentialAlbumsAssets.helper.ts), each holding a day-mode and
trip-mode function the unified handlers call into.

Client-facing functions (listPotentialTrips, listPotentialTripAssets)
keep their existing names/signatures — only their internal path and a
groupBy param changed — so no frontend component call sites need
updating. Also drops the two now-unused LIST_POTENTIAL_TRIP*_PATH
route constants.

Addresses the maintainer's open caching-strategy question by removing
the need for a second endpoint/cache entirely: one endpoint per
concern, two grouping strategies.
2026-07-10 16:11:22 +00:00
Varun Raj ef3ce79c5b fix: drop asset.deviceId from raw SQL select — column removed in Immich v3
Immich v3 dropped asset.deviceId/deviceAssetId (af4cfce on main).
This branch predates that migration, so its own SELECT_ORPHAN_RANGE
query still referenced the column, which would 500 on any current
Immich v3 instance. Match the field list already used by the sibling
potential-albums-assets.ts endpoint, which was updated for v3.
2026-07-10 15:55:41 +00:00
Varun Raj a9d2adc6a1 fix: measure trip gap tolerance in real calendar days, not array-index distance
clusterTrips's gap check compared array-index adjacency between
DaySignal entries. Since `days` only contains dates with >=1 photo
(GROUP BY DATE(...) with no zero-photo rows), two trips separated by
months with no photos in between were array-adjacent (gapLen=0) and
got merged into one bogus trip. Compare actual elapsed calendar days
between the last and next away day instead.
2026-07-10 15:53:04 +00:00
Varun Raj ManoharanandGitHub 7d2ee70f62 Merge pull request #301 from jonvdveen/feat/remove-tag-action
feat: Remove Tag workflow action to complement Add Tag
2026-07-10 21:20:43 +05:30
Varun Raj 40e9e0dde2 fix: resolve tag via Immich API instead of local DB table in remove_tag
The local tag table can lag behind Immich's own tag state (e.g. tags
created directly in Immich, or before this app's sync ran), causing
remove_tag to silently no-op on a tag that actually exists. Mirror the
sibling "tag" action's approach and resolve against the Immich API,
matching on the tag's full-path "value" field. Drops the now-unused
db/sql local lookup.
2026-07-10 15:48:29 +00:00
Varun Raj ManoharanandGitHub 4e1ad2d532 Merge pull request #275 from immich-power-tools/feat/ente-import-shared
feat: add support for Ente platform integration
2026-07-10 19:37:13 +05:30
Varun Raj ManoharanandGitHub 800751d493 Merge pull request #297 from jonvdveen/feat/paginate-workflow-triggers
feat: paginate workflow asset queries — remove the silent 10,000-asset cap
2026-07-10 19:36:36 +05:30
Varun Raj ManoharanandGitHub ca301ee8e4 Merge pull request #298 from jonvdveen/feat/tag-condition
feat: Tag condition for workflow IF/SWITCH nodes (hierarchical, any/all/none)
2026-07-10 19:35:57 +05:30
Varun Raj ManoharanandGitHub f26ed80e25 Merge pull request #299 from jonvdveen/feat/resolution-condition
feat: Resolution condition for workflow IF/SWITCH nodes (megapixels, short/long edge)
2026-07-10 19:35:14 +05:30
Varun Raj 2be22df94c Merge remote-tracking branch 'origin/prerelease' into feat/resolution-condition 2026-07-10 14:03:40 +00:00
Varun Raj ManoharanandGitHub ba14ab553e Merge pull request #300 from jonvdveen/feat/cleanup-conditions
feat: five library-cleanup conditions — file size, name/path, extension, face count, time of day
2026-07-10 19:31:06 +05:30
Varun Raj 9659c8b36b fix: remove stray argument breaking uploadAssetBuffer call
makeDeviceAssetId(item.assetId) was passed as an extra 5th argument
before tagId, which doesn't match uploadAssetBuffer's signature
(asset, payload, uploadHeaders, jsonHeaders, tagId?) and broke the
TS build. Match the call pattern used by the sibling nextcloud/immich
processors.
2026-07-10 14:00:21 +00:00
Varun Raj b66c8218bc fix: parameterize tag contains_any IN-list to close SQL injection vector
The id list was built via raw string interpolation into sql.raw().
Switch to sql.join with proper parameter binding, matching the
pattern used by the other match branches in this function.
2026-07-10 13:59:52 +00:00
jonvdveenandClaude Fable 5 95ede2efd7 feat: Remove Tag workflow action to complement Add Tag
Removes a tag (by name, matching the tag's full path value) from the
matched assets via DELETE /tags/:id/assets. The tag is looked up
without creating it — removing a tag that doesn't exist is a no-op
rather than an error, so add/remove pairs are safe in the same
workflow.

Registered in the node palette, action node, run-detail view, and
action config (same tag-name field as Add Tag).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 22:54:43 -06:00
jonvdveenandClaude Fable 5 1431b8523e feat: five library-cleanup conditions for workflow IF/SWITCH nodes
Adds condition types common in smart-album systems of other photo
managers (Apple Photos, Lightroom, Google Photos):

- File Size: min/max in MB (fractional) over asset_exif.fileSizeInByte
- File Name / Path: contains / not contains / starts with / ends with
  against originalFileName or originalPath (ILIKE, wildcards escaped so
  user text matches literally)
- File Extension: is any of / is none of a comma-separated list,
  case-insensitive, matched after the last dot
- Face Count: min/max visible, non-deleted detected faces — 'how many
  people', complementing the person condition's 'who'
- Time of Day: from/to hour over localDateTime (capture wall-clock
  time, no timezone math); From > To wraps past midnight (22 to 5)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:51:02 -06:00
jonvdveenandClaude Fable 5 b473bfdc5d feat: resolution condition for workflow IF/SWITCH nodes (megapixels, short/long edge)
Adds a "Resolution" condition type filtering assets by image
dimensions, useful for isolating low-resolution images for cleanup or
selecting high-resolution ones.

Three metrics with optional min/max bounds:
- Megapixels (width x height / 1e6, fractional values allowed)
- Short edge in pixels (LEAST of width/height)
- Long edge in pixels (GREATEST of width/height)

Short/long edge are orientation-agnostic, so a 4000x3000 landscape and
a 3000x4000 portrait are treated identically. Uses the exifImageWidth/
exifImageHeight columns on asset_exif, which the condition queries
already join; assets without recorded dimensions never match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:23:57 -06:00
Sai charan GuntupalliandGitHub c1ab7c6099 Merge pull request #295 from jonvdveen/fix/immich-v3-api-key-permissions
fix: API key permissions for Immich v3 (albumAsset.*, tag.asset) and honor "all" in key validation
2026-07-03 08:38:36 +05:30