Commit Graph
503 Commits
Author SHA1 Message Date
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
Sai charan GuntupalliandGitHub f0d8a88c27 Merge pull request #270 from dgilperez/fix/people-filters-reset-page
fix(people): reset page to 1 on filter change; drop stale onClick on sort menu
2026-07-02 20:57:46 +05:30
Sai charan GuntupalliandGitHub bbf48b9933 Merge pull request #294 from immich-power-tools/fix/immich-v3-compat
v0.22.0
2026-07-02 20:29:43 +05:30
sai80082 46768eea7a fix: update README and asset upload for Immich v3.0 compatibility 2026-07-02 20:26:53 +05:30
sai80082 af4cfceb47 fix: migrate to Immich v3.0 API and DB schema
- Updated albumColumns and AlbumThumbnail components to display placeholder when no thumbnail is available.
- added album_user table (album ownership moved here, role='owner')
- drop asset.deviceId/deviceAssetId and albums.ownerId
- asset.duration varchar -> integer (milliseconds)
- removed isArchived instead use visibility
2026-07-02 20:13:29 +05:30
Sai charan GuntupalliandGitHub 303abc72cd Merge pull request #293 from immich-power-tools/prerelease
Prerelease
2026-06-28 14:02:16 +05:30
Sai charan GuntupalliandGitHub ece805137e Merge pull request #269 from dgilperez/fix/asset-grid-selection-visual
fix(AssetGrid): dim non-selected siblings during selection mode
2026-05-27 16:10:06 +05:30
Sai charan GuntupalliandGitHub d0974679e6 Merge pull request #291 from immich-power-tools/prerelease
v0.21.4
2026-05-21 15:50:21 +05:30
Sai charan GuntupalliandGitHub 49ad6cc55d Merge pull request #290 from tikibozo/fix/albums-by-assets-413
fix(api): raise bodyParser limit on albums-by-assets to handle large duplicate sets
2026-05-21 15:46:41 +05:30
tikibozo e3c7170448 fix(api): raise bodyParser limit on albums-by-assets
The /api/assets/albums-by-assets route accepts a POST body shaped
{ assetIds: string[] } and is invoked from the bulk-duplicate-finder
page with every asset across every duplicate group. With a large
duplicate set the body easily exceeds Next.js's default 1 MB
bodyParser limit and the route returns 413 before the handler runs.

Concrete case: a library with ~14,500 duplicate groups produces a
request body around 1.4-1.8 MB, which is rejected. The page renders
but never finishes loading (413 in browser console).

Fix: add the per-route Next.js bodyParser config to bump the limit
to 10 MB, leaving plenty of headroom for very large libraries while
still bounding worst-case request size.
2026-05-21 00:37:39 -07:00
sai80082 b2aa043ab6 feat: enhance error handling for database and API connections with detailed descriptions 2026-05-05 14:41:36 +05:30
Sai charan GuntupalliandGitHub b8dee930b5 Merge pull request #271 from dgilperez/feat/analytics-heatmap-year-selector
feat(analytics): year selector on asset heatmap
2026-05-01 16:31:56 +05:30
sai80082 54038c2512 feat: enhance release workflow with multi-platform support 2026-05-01 16:17:03 +05:30
Sai charan GuntupalliandGitHub 244dcd4c5c Merge pull request #281 from immich-power-tools/prerelease
Prerelease
2026-05-01 15:22:14 +05:30
David Gil Pérez 9df6d78501 fix(AssetGrid): dim non-selected siblings during selection mode
Upstream already shows the selected ring + clickable check badge on each
thumbnail. This adds the missing piece for dense grids: a slight opacity
reduction on non-selected items while a selection is in progress, so the
selected set stays visible at a glance.

Implemented by passing selectionMode={selectable && selectedIds.length > 0}
from AssetGrid to LazyGridImage; LazyGridImage applies opacity-60 to its
container when selectionMode && !photo.isSelected.
2026-04-27 00:18:27 +02:00
sai80082 c32e38bac7 feat: implement permissions management with new Permission interface and refactor API key handlers 2026-04-24 15:48:34 +05:30
sai80082 28cd757366 feat: replace react-mentions with rc-mentions in FindInput component
- Updated FindInput component to use rc-mentions for better performance and flexibility.
- Removed unused styles related to react-mentions and added new styles for rc-mentions in globals.scss.
- Enhanced search functionality to handle mentions and clear input more effectively.
- Updated FindPage to manage searched queries and loading state.
2026-04-24 15:13:19 +05:30
Sai charan GuntupalliandGitHub 5fbc296931 Merge pull request #264 from dgilperez/fix/ai-drop-hallucinated-future-dates
fix(find): drop hallucinated future-date filters from AI output
2026-04-24 14:29:59 +05:30
Sai charan GuntupalliandGitHub 0756f008c4 Merge pull request #263 from dgilperez/fix/find-auth-use-getuserheaders
fix(find): use getUserHeaders() for Immich smart search auth
2026-04-24 14:27:12 +05:30
Sai charan GuntupalliandGitHub 0017dee23c Merge pull request #256 from immich-power-tools/fix/permissions-validation
feat: enhance API key validation with detailed permission checks and …
2026-04-24 13:54:54 +05:30
Varun Raj ManoharanandGitHub 8c8b68e52b Merge pull request #273 from immich-power-tools/fix-gallery-selection
fix: restore gallery grid selection UI
2026-04-23 15:02:28 +05:30
Varun c99a2c6854 fix: resolve block-scoped variable usage before declaration 2026-04-23 14:53:33 +05:30
Varun 23333c51d5 fix: restore gallery grid selection UI and enable starting selection 2026-04-23 14:48:06 +05:30
David Gil Pérez 3806ac3892 feat(analytics): year selector on asset heatmap
Today the Analytics heatmap hard-codes "last 12 months" both in the SQL
(`WHERE fileCreatedAt >= CURRENT_DATE - INTERVAL '1 YEAR'`) and in the
frontend's month labels loop. Users with multi-year libraries can't look
back at 2018 or 2020 from this view.

Changes:
- API `/api/analytics/statistics/heatmap` now accepts an optional `year`
  query param. With it, the query spans the full calendar year (Jan 1 to
  Dec 31) and `fillMissingDates` walks that range. Without it, the legacy
  rolling 12-month behaviour is preserved (including the "skip the
  repeating current month from last year" seam guard).
- Response shape changed from `[]` to `{ data, year, availableYears }`.
  `availableYears` comes from a DISTINCT EXTRACT(YEAR ...) over the user's
  assets so the UI can render a correct dropdown without guessing.
- Component shows a Select next to the heatmap: "Last 12 months" (default)
  plus one entry per year that actually has assets. Month labels and the
  `weeksPerMonth` computation switch accordingly.
- No migrations needed; drizzle query only.

Callers of `getHeatMapData()` now receive an object — there was only one
caller (the heatmap component) so the change is localised.
2026-04-21 00:26:40 +02:00
David Gil Pérez 49ee4ee4d8 fix(people): reset page to 1 when filters change; drop stale onClick on sort menu
Two small fixes in PeopleFilters:

1. `handleChange` preserved the current page when any other filter changed.
   Symptom: the user is on page 2, types a name in the search box, and the
   list shows zero results until they click back to page 1 manually. The new
   query returns fewer total people, so page=2 is past the end.
   Fix: force page=1 whenever the change doesn't explicitly set `page`.

2. The DropdownMenuTrigger for the sort menu had a leftover
   `onClick={() => handleChange({ page: nextPage })}` — looks copy-pasted
   from the "next page" button right above it. Opening the sort menu would
   silently advance the pagination. Dropped; Radix's DropdownMenuTrigger
   opens the popover by itself.
2026-04-21 00:05:14 +02:00
David Gil Pérez 10b8e1ec73 fix(find): drop hallucinated future-date filters from AI output
Small-to-medium LLMs (qwen2.5:7b locally, Gemini 2.0 flash in #218) frequently echo the prompt's "Today's date is …" context back as a `takenAfter: <today>` filter even when the user query has no date reference. This silently filters out all results (photos cannot be taken in the future), surfacing as "No results found / Taken After 2026-04-19" in the UI.

Two changes:

1. Tighten the prompt to explicitly say today's date should only be used to resolve relative expressions that actually appear in the query.

2. Guardrail: if the model still returns `takenAfter >= today` (or `takenBefore > today`), drop it. This is narrow and defensible — a future date literally cannot match any asset, so removing it never loses a valid match. No locale-specific regex, no guessing intent; just reject provably invalid filters.

Repro with qwen2.5:7b via Ollama OpenAI-compat endpoint, exact prompt that parseFindQuery produces today:

Input: "beach"
Output: {"query":"beach","takenAfter":"2026-04-19"}

With this patch the stale `takenAfter` is dropped before hitting Immich.

Ref: #218 (same symptom reported with Gemini)
2026-04-19 14:52:46 +02:00
David Gil Pérez d2a0c9a76d fix(find): use getUserHeaders() for Immich smart search auth
The /api/find/search handler was hard-coding `Authorization: Bearer ${currentUser?.accessToken}`. When Power Tools authenticates via `IMMICH_API_KEY` (no cookie session), `accessToken` is undefined and Immich returns 401 — which surfaces in the UI as "No results found", making the feature silently unusable in API-key deployments.

This swaps the inline header construction for the existing `getUserHeaders()` helper in `src/helpers/user.helper.ts`, which already handles both modes: `x-api-key` when `isUsingAPIKey`, `Authorization: Bearer …` otherwise.

Also adds an explicit 403 when there's no authenticated user, instead of letting the request flow forward with `Bearer undefined`.

Repro (before):
  curl -X POST http://localhost:8001/api/find/search -d '{"query":"beach"}' \
  → {"assets":[],"filters":{…},"error":"Failed to fetch assets"}

After:
  same request → 40 assets with embeddings matching "beach"
2026-04-19 14:52:01 +02:00
Sai charan GuntupalliandGitHub 04edb99217 Merge pull request #261 from immich-power-tools/fix/update-compose
feat: add volume configuration for immich power tools in docker-compo…
2026-04-13 14:45:34 +05:30
sai80082 085d4fb346 feat: add volume configuration for immich power tools in docker-compose files 2026-04-13 14:40:39 +05:30
sai80082 4861bbf0ce feat: enhance API key validation with detailed permission checks and user feedback 2026-04-09 10:57:56 +05:30
Sai charan GuntupalliandGitHub 15f6966ffc Merge pull request #253 from jicetus/reference-files
Updates power-tools image path referenced
2026-04-09 10:05:23 +05:30
jicetus c91a251392 Update immich-power-tools image path used
This updates the container image to the official immich-power-tools repository; no other configuration changes were made.

Updated from previous (now deprecated) image references. Some files were still referencing the old image instance ´ghcr.io/varun-raj/immich-power-tools:latest´, updated them to ´ghcr.io/immich-power-tools/immich-power-tools:latest´ across the project (README.md, docker-compose.yml, and docker-compose-all-immich.yml).
2026-04-08 23:32:10 +02:00
Sai charan GuntupalliandGitHub b47fa4b2d8 Add GNU AGPL v3 license
Added the GNU Affero General Public License version 3 to the project.
2026-04-08 21:30:47 +05:30
Varun Raj ManoharanandGitHub 5795906bec Merge pull request #252 from immich-power-tools/feat/smart-auto-albums
feat: workflow UI improvements, dark mode, and Docker fix
2026-04-08 20:49:06 +05:30
Varun 661967e919 fix: pre-create /app/data directory in Dockerfile for nextjs user permissions 2026-04-08 20:48:37 +05:30
Varun Raj ManoharanandGitHub aa563e2ac2 Merge pull request #251 from immich-power-tools/feat/smart-auto-albums
Design and UI fixes
2026-04-08 20:23:47 +05:30
Varun d2fb4be2b3 feat: workflow node details, dark mode controls, asset preview fixes
- Show full condition details on IF/Switch nodes with person thumbnails
- Show album name and tag on action nodes
- Add dark mode support for React Flow controls via colorMode
- Center images in lightbox preview
- Fix leaflet marker icons for both Webpack and Turbopack bundlers
2026-04-08 20:00:57 +05:30
Varun Raj ManoharanandGitHub c40334b764 Merge pull request #250 from immich-power-tools/feat/nextcloud-import
feat: add Nextcloud support for shared links and asset import
2026-04-08 19:30:38 +05:30
Varun 6c310eb07c feat: improve previous imports list with status borders and pill badges 2026-04-08 19:30:11 +05:30
Varun 0ede3927f8 feat: people card redesign - quick hide button, dropdown menu, grey border 2026-04-08 13:34:31 +05:30
Varun 36ea092ae9 refactor: remove unused Managed API Keys section from settings 2026-04-08 11:28:12 +05:30
Varun 792e501ab8 feat: combine schedule and webhook into single triggers popover 2026-04-08 11:18:32 +05:30
Varun e47e99ccfc feat: import API key, people card redesign, birthday popover, autocomplete portal
- Add import_api_key setting with auto-generate endpoint and settings UI
- Import job runner uses import API key when available, falls back to session
- Show ApiKeyGate empty state in both workflow and import pages when key missing
- Replace workflow API key warning popover with full gate overlay
- Redesign person cards: square avatar, hover action toolbar, cleaner layout
- Birthday field now uses popover with calendar + natural language input
- Fix autocomplete dropdown clipping inside overflow-hidden cards via portal
- People grid column slider persisted to localStorage (min 3, max 20)
2026-04-08 09:53:09 +05:30
Varun 6a5b2b442a feat: asset delete in preview, workflow api key auto-generate, UI polish
Add delete with confirm dialog to asset lightbox (always visible, handles
deletion internally with local state update). Force dark theme on asset
info panel and fix text color inheritance. Add edge-to-edge image display
in lightbox by removing slide padding. Show open-in-immich link on hover
only. Add workflow page title breadcrumb. Add one-click workflow API key
generation that creates the key in Immich and saves it automatically.
2026-04-08 09:22:55 +05:30
Varun e0dd64a95e feat: sidebar beta badge for workflows, settings and profile improvements
Add beta badge to Workflows in the sidebar. Include settings page
improvements, workflow detail updates, profile info and sidebar
nav refinements, and validate-api-key endpoint.
2026-04-08 08:48:28 +05:30
sai80082 d7f19d8813 feat: add Nextcloud support for shared links and asset import
- Implemented Nextcloud shared link detection and processing in the import workflow.
- Created a new processor for handling Nextcloud shared links, including asset downloading and uploading to Immich.
- Enhanced existing import functionality to support platform differentiation between Immich and Nextcloud.
- Added utility functions for parsing file names and guessing content types.
- Updated thumbnail and video endpoints to accommodate Nextcloud's API structure.
- Modified the import shared page to handle Nextcloud URLs and passwords.
- Refactored asset upload logic to streamline the process for both platforms.
2026-04-08 00:38:43 +05:30
Varun Raj ManoharanandGitHub 89b9b1c74e Merge pull request #249 from immich-power-tools/feat/smart-auto-albums
Smart auto albums and workflows 🚀
2026-04-07 23:43:57 +05:30
Varun 937f64a57e fix: sidebar redesign and api key validation
Signed-off-by: Varun <varun@skcript.com>
2026-04-07 23:31:03 +05:30
Varun 15f90121a1 feat: redesign import-shared page and support password-protected links
Redesign import-shared with sticky import bar, dense gallery grid,
progress bar, and cleaner landing state. Add password-protected
shared link support - detects 401 "Password required" from Immich
and shows a password input. Also reduce asset grid spacing and
replace "Open in Immich" text with a link icon.
2026-04-07 23:12:34 +05:30
Varun 2ff863b296 feat: redesign analytics exif page with sectioned layout and bar charts
Reorganize the exif analytics page into labeled sections (Camera & Gear,
Location, Technical, Storage) with icon headers. Replace donut charts
with horizontal bar charts for multi-category EXIF distributions.
Improve heatmap with emerald color scale, day labels, and legend.
Add polished stat cards with icons and skeleton loading states.
2026-04-07 22:55:07 +05:30