Commit graph

2249 commits

Author SHA1 Message Date
Jason Rasmussen
a3e0c6cef5
fix: ignore abort errors (#21262) 2025-08-25 16:42:30 -04:00
Jason Rasmussen
63088b22e0
fix(web): handle multiple downloads in safari (#21259) 2025-08-25 12:59:59 -05:00
xCJPECKOVERx
d9d8beb92f
fix(web): Duplicate arrow shortcuts go to next/previous duplicate when viewing assets (#21200)
- get assetviewer state and don't handle next/previous duplicate if isViewing
2025-08-25 13:33:48 -04:00
Jason Rasmussen
38a8a67be9
fix(web): allow numeric input fields to be zero (#21258) 2025-08-25 13:31:32 -04:00
Jason Rasmussen
7531ffcbfb
refactor: service worker (#21250) 2025-08-25 11:52:57 -05:00
xCJPECKOVERx
d5f3629c49
fix(web): Album multi-select 'm' shortcut prevents typing m in title box (#21249)
change album multi-select shortcut to ctrl
2025-08-25 11:52:26 -05:00
Wingy
5fb8d651ec
feat: expose createdAt in getAssetInfo (#21184)
* Expose createdAt in getAssetInfo

* Add missing createdAt fields
2025-08-25 10:27:21 -05:00
Lorenzo Farnararo
0729887c9c
fix(web): handle edge cases in timeToSeconds function to prevent crashes (#21019)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-08-23 22:42:37 +02:00
Nicholas
3bfa8b7575
fix: border around dark theme button on onboarding page (#20846)
fix border around dark theme button
2025-08-23 15:28:00 -05:00
Arthur Normand
4e03b06ff7
feat: add a counter to the duplicate utility (#21109)
Added a counter to the duplicate utility
2025-08-21 15:21:31 -05:00
Alex
cda7249a6a
fix: add to multi album selection (#21061) 2025-08-19 09:21:18 -05:00
Thomas
47566c1a4a
chore(web): make search result loading behaviour more consistent (#20741)
The current behaviour will intersect if the page is scrolled about 90% down
which works okay for a small number of assets, but does not scale well with
large amounts of assets. Instead of relying in proportional values, it may be
more sensible to use a consistent measure for loading more pages. A simple and
sensible suggestion may be to load another page when there is only one more
viewport worth of assets to display. It can be refined and revisited in future,
but it seems to work relatively well in my testing and prevents the issues
which occur with large amounts of assets.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-08-19 09:09:39 -05:00
Min Idzelis
845b0f2073
chore: use pnpm for builds (#19752)
* Migrate from npm to pnpm across entire project

• Update all GitHub workflow files to use pnpm instead of npm
• Replace npm commands with pnpm equivalents in devcontainer scripts
• Remove package-lock.json files and update to use pnpm-lock.yaml
• Consolidate node version references to use server/.nvmrc

* Refine pnpm migration based on review feedback

• Replace SKIP_SHARP_FILTERING with SHARP_IGNORE_GLOBAL_LIBVIPS environment variable
• Improve Sharp package filtering to include specific Linux architectures for Docker builds
• Optimize Dockerfile dependency caching with improved layer structure
• Clean up workspace configuration and remove redundant settings

* Address additional review feedback for pnpm migration

• Fix node-version-file paths in GitHub workflow configurations
• Refactor .pnpmfile.cjs to use switch statement for better code organization
• Correct cache type typo in fix-format workflow
• Simplify Vite configuration by merging configs inline
• Update package description for consistency

* Use 'server/.nvmrc' for fix-format.yml GHA

* Delete npm locks

* Remove Docker volume isolation for node_modules directories

• Remove volume mounts for node_modules and related directories
• Allow shared access between host and container filesystem
• Update init container to handle file ownership with conditional existence check

* Remove unused Docker volumes and volume mounts

• Remove node_modules volume mounts from devcontainer configuration
• Remove unused named volumes for pnpm-store, node_modules, and cache directories
• Clean up Docker Compose configuration after removing volume isolation

* Fix typescript-sdk package issues

• Remove unknown "build" dependency that was incorrectly added to package.json
• Update pnpm-lock.yaml to reflect dependency removal

* Add pnpm setup to mobile workflow for translation formatting

• Add pnpm action setup step to mobile unit tests workflow
• Required for translation file formatting and sorting operations

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-08-19 08:55:24 -04:00
Arthur Normand
d4f2b43f64
fix: improve duplicate utility text contrast (#21045) 2025-08-19 02:18:52 +00:00
Arthur Normand
f343b0e58f
fix: always show resolution in details panel (#21046)
Always show resolution in details panel
2025-08-19 02:17:45 +00:00
xCJPECKOVERx
9ff664ed36
feat(web): Add to Multiple Albums (#20072)
* Multi add to album picker:
- update modal for multi select
- Update add-to-album and add-to-album-action to work with new array return from AlbumPickerModal
- Add asset-utils.addAssetsToAlbums (incomplete)

* initial addToAlbums endpoint

* - fix endpoint
- add test

* - update return type
- make open-api

* - simplify return dto
- handle notification

* - fix returns
- clean up

* - update i18n
- format & check

* - checks

* - correct successId count
- fix assets_cannot_be_added language call

* tests

* foromat

* refactor

* - update successful add message to included total attempted

* - fix web test
- format i18n

* - fix open-api

* - fix imports to resolve checks

* - PR suggestions

* open-api

* refactor addAssetsToAlbums

* refactor it again

* - fix error returns and tests

* - swap icon for IconButton
- don't nest the buttons

* open-api

* - Cleanup multi-select button to match Thumbnail

* merge and openapi

* - remove onclick from icon element

* - fix double onClose call with keyboard shortcuts

* - spelling and formatting
- apply new api permission

* - open-api

* chore: styling

* translation

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-08-19 00:42:47 +00:00
xCJPECKOVERx
a313e4338e
feat(web): Skip duplicates (#20880)
* - add skip button to duplicates-compare-control

* - cleanup

* - change to next/previous
- move buttons to duplicates page, intead of compareControl
- add param based control/position

* - remove index param on keep/dedupe all

* - cleanup

* - cleanup index corrections

* - add left/right arrow keyboard shortcuts for previous/next
- cleanup

* - cleanup
2025-08-18 18:11:53 -05:00
Daniel Dietzler
f92247c99b
fix: oauth auto-login infinite loop (#20904) 2025-08-13 19:45:06 -04:00
Alex
54960157c0
chore: backup info card styling tweak (#20799)
* chore: backup info card styling tweak

* pr feedback
2025-08-12 16:08:31 +00:00
Mirek
5d2777a5c6
feat: format date and time in /admin/users/ -> Profile section (#20811)
Matches the format used in the user settings page.

Added a formatting function in utils.
2025-08-11 16:50:34 -05:00
Gabriel Soldani
e7060dc292
fix(web): fix layout loop with single row grids in explore page (#20833) 2025-08-11 02:31:26 +00:00
Nicholas
d6d31c6695
fix: change all download icons to mdiDownload for clarity and consistency (#20821)
change all download icons to `mdiDownload` for clarity and consistency
2025-08-10 21:23:21 -05:00
Jason Rasmussen
538d5c81ea
feat: reset oauth ids (#20798) 2025-08-08 15:42:38 -04:00
Jason Rasmussen
cfbc24579d
feat(web): reset pin code (#20766) 2025-08-07 15:07:31 -04:00
Jason Rasmussen
a896c5a4dd
fix(web): shared-link autocomplete (#20761) 2025-08-07 12:01:05 -05:00
mkuehne707
011a667314
feat: batch change date and time relatively (#17717)
Co-authored-by: marcel.kuehne <>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-08-07 13:42:33 +00:00
Ben McCann
af10c3bc2f
chore: upgrade SvelteKit (#20736) 2025-08-07 13:00:42 +01:00
Thomas
746252fe39
fix(web): limit max height of search results (#20727)
The height of the search results element was unrestricted, which meant that the
asset visibility calculations were completely incorrect. The consequence of
this is that assets which should not have been visible, were. In practical
terms, all assets below the viewport were rendered when they shouldn't have
been which is terrible for performance. Limiting the height of the viewport
fixes that calculation and assets are correctly hidden.

The consequence of limiting the height of the viewport is that the intersector
then incorrectly thought the scroll position was always at the end. This has
been fixed by calculating the position of sliding window against the calculated
asset layout container height.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-08-06 17:05:23 -05:00
Thomas
f36efd128b
fix(web): prevent thumbhashes from covering search bar (#20720)
The thumbhash had a z-index setting which meant it would cover the search bar,
and would always cause weird animations when scrolling up in search results.

This is fixable by removing the z-index and moving it in front the other
elements to get a naturally higher higher z-index preference.
2025-08-06 16:57:51 -05:00
Thomas
89292fecb4
fix(web): use correct sliding window offset for search results (#20726)
The contents of search results are slightly offset by the search bar, search
terms and spacing (margins/padding), and needs to be factored in when
calculating whether an asset is visible or not. The offset was 0, which
meant that assets were removed from view too early.
2025-08-06 16:34:24 -05:00
Thomas
1193a23282
feat(web): don't scroll to visible assets (#20729)
The timeline has been quite aggressive with scrolling to assets, even if they
were right in the middle of the page. If the asset is visible, then we
shouldn't scroll to it. It's really confusing when assets jump around after
being viewed.
2025-08-06 16:31:37 -05:00
Thomas
89598cf0be
chore(web): remove arbitrary search result limit (#20719)
The search results page can become unstable with large amounts of assets, and
has therefore been limited to displaying just 5000 assets. This limit is
arbitrary and may be too restrictive.
2025-08-06 10:12:52 -05:00
Gaurav Yadav
d430b869ac
fix: shared link custom URL photo access authentication (#20534) 2025-08-05 23:22:19 +02:00
Paweł Wojtaszko
990d9ba9a8
fix: adjust margin and gap for trailing elements in control app bar (#20645) 2025-08-04 17:24:19 -05:00
Paweł Wojtaszko
b56a272f64
fix: adjust search bar padding and visibility based on input state (#20598) 2025-08-04 17:46:46 +00:00
Alden Bansemer
e2c3c39597
chore: tweak photo sphere fov and zoom speed constants (#20595) 2025-08-04 01:07:11 -05:00
Alex
7391ea6ff9
chore: large file size grid view styling (#20472)
* chore: large file grid styles

* chore: large file grid styles
2025-07-31 12:52:19 -04:00
Jason Rasmussen
6b50d958f4
fix: incorrect next/previous action after folder view refresh (#20447) 2025-07-30 14:50:52 -05:00
Jason Rasmussen
d5a01c0310
fix(web): timeline time bucket issue (#20438) 2025-07-30 11:21:02 -05:00
Ben
baadf9db20
fix(web): timeline date group width (#19964)
Fix the calculation for the date group width, so there's never a scenario where photos will be hidden. On mobile devices, photos in the second row can sometimes have a top of <100px, which throws off the calculation of the date group width.
2025-07-30 08:39:19 -04:00
xCJPECKOVERx
4ea4ee40af
fix(web): Search chip key value heights don't match (#20312)
- add flex items-stretch to stretch chip key height to match value height
2025-07-30 08:31:16 -04:00
Brandon Wees
07ed060c32
feat: 3-2-1 backup onboarding card (#20374)
* feat: 3-2-1 backup onboarding card

* chore: format i18n

* fix: lint

* Update onboarding-backup.svelte

* fix: e2e onboarding test
2025-07-29 21:55: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
Alwin Lohrie
ae1d60e259
feat: find large files utility (#18040)
feat: large asset utility

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-07-28 18:48:39 -04:00
Jed-Giblin
9b3718120b
feat: shared links custom URL (#19999)
* feat: custom url for shared links

* feat: use a separate route and query param

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-07-28 14:16:55 -04:00
Dag Stuan
66ea75072d
feat(web): auto fit bounds for map modal (#20345) 2025-07-28 17:36:37 +01:00
xCJPECKOVERx
ee4ae40d61
fix(web): Album picker recent albums don't match sidebar (#20313)
- update album picker recent albums to show most recent 'updatedAt' instead of 'createdAt'. Matches sidebar.
2025-07-27 10:03:39 -05:00
Jason Rasmussen
153bb70f6e
feat(web): api key permission search (#20248) 2025-07-25 13:39:48 -04:00
Daniel Dietzler
edefed56ae
fix: optional number inputs (#20218) 2025-07-25 09:06:12 -04:00
Daimolean
a36840d7cc
fix(web): multi-select in ascending asset order (#19461) 2025-07-24 22:37:44 +01:00
Pablo Lluch
e34f46fa0d
fix: send correct includeArchived parameter to API when showing markers in map (#20117)
Co-authored-by: Pablo Lluch <pablo.lluch@gmail.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-07-24 22:34:06 +02:00
Alex
0051a9bba5
fix(web): Revert prevent flashing white background in dark mode on page load/reload (#19934) (#20122)
Revert "fix(web): prevent flashing white background in dark mode on page load/reload (#19934)"

This reverts commit 32f23b8d38.
2025-07-24 09:45:38 +02:00
Daniel Dietzler
f27bdf7523
chore: migrate to UI modal manager (#20116) 2025-07-23 17:27:09 -04:00
Daniel Dietzler
c1c9f30ea4
chore: migrate to immich/ui confirm modal (#20114) 2025-07-23 22:56:56 +02:00
Daniel Dietzler
0e1c8c2b80
fix: ML recognition distance UI form validation (#20107) 2025-07-23 19:12:06 +02:00
xCJPECKOVERx
1a70896113
feat(web): Remove from Stack (#19703)
* - add component
- update server's StackCreateDto for merge parameter
- Update stackRepo to only merge stacks when merge=true (default)
- update web action handlers to show stack changes

* - make open-api

* lint & format

* - Add proper icon to 'remove from stack'
- change web unstack icon to image-off-outline

* - cleanup

* - format & lint

* - make open-api: StackCreateDto merge optional

* initial addition of new endpoint

* remove stack endpoint

* - fix up remove stack endpoint
- open-api

* - Undo stackCreate merge parameter

* - open-api typescript

* open-api dart

* Tests:
- add tests
- update assetStub.imageFrom2015 to have required stack attributes to include it with tests

* update event name

* Fix event name in test

* remove asset_update check

* - merge stack.removeAsset params into one object
- refactor asset existence check (no need for asset fetch)
- fix tests

* Don't return updated stack

* Create specialized stack id & primary asset fetch for asset removal checks

* Correct new permission names

* make sql

* - fix open-api

* - cleanup
2025-07-22 22:17:06 -04:00
renovate[bot]
250548dea6
fix(deps): update typescript-projects (#19939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-07-22 17:42:07 +00:00
bo0tzz
826eaedae6
feat: play live photos on hover (#19962) 2025-07-21 16:59:42 -05:00
evan314159
32f23b8d38
fix(web): prevent flashing white background in dark mode on page load/reload (#19934)
* prevent flashing white background in dark mode on page load/reload, tested with Safari and Chrome on macOS

* integrate into existing FOUC-prevention

---------

Co-authored-by: Evan <evan@MacBook-Pro.local>
2025-07-16 14:34:45 +00:00
Hamish
daea57f7d2
feat(web): better coordinate parsing (#19832)
feat: better coordinate parsing
2025-07-15 08:32:43 -05:00
Lukas
ccd0c35ca1
fix(web): adjust button size in person side panel (#19924)
* fix(web): adjust button size in person side panel

* round edit button
2025-07-14 18:05:34 -04:00
Lukas
5f10a4cae7
fix(web): allow renaming person without merging (#19923)
* fix(web): allow renaming person without merging

* improve return type
2025-07-14 14:24:32 -05:00
Jason Rasmussen
47c0dc0d7e
feat: nightly tasks (#19879) 2025-07-11 17:32:10 -04:00
Léopold Koprivnik
f778adea92
feat: adds option to search only for untagged assets (#19730)
Co-authored-by: SkwalExe <skwal@skwal.net>
2025-07-10 16:28:20 +02:00
Hamish
4db76ddcf0
feat(web): update icons (#19831)
* fix: update password icon in user settings

* feat: add icons to more modals
2025-07-09 02:12:16 +00:00
matthieu-db
d5923241b5
fix: add quiet zone to QR code (#19771)
Add quiet zone to QR code

This is needed for the QR code to be readable by many QR readers. It is also a requirement for it to be a valid QR code.
2025-07-06 22:06:36 -05:00
Daniel Dietzler
4ce9bce414
feat: oauth role claim (#19758) 2025-07-06 18:45:32 -04:00
Daimolean
fb384fe90b
fix(web): viewing asset lock (#19499)
* fix(web): viewing asset lock

* fix: lint

* make mutex stateless

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-07-05 02:52:39 +00:00
Min Idzelis
8ccca04e27
fix(web): improve request cancellation handling in service worker cache (#19217) 2025-07-01 11:53:04 +01:00
Min Idzelis
db0415bbcc
chore: undeclared versions/updates (#19649) 2025-06-30 23:23:41 -04:00
Daimolean
53020852ec
fix(web): modal race condition (#19625)
* fix(web): modal race condition

* fix: translation

* fix: translation
2025-06-30 14:33:47 -05:00
Jason Rasmussen
30b4f334d8
feat: upload manager (#19565) 2025-06-27 09:13:43 -04:00
Daimolean
4621ec5ea2
fix(web): load day group in asset viewer (#19523)
* fix(web): load day group in asset viewer

* fix: lint
2025-06-25 11:18:11 -05:00
Jason Rasmussen
ebcf133bea
fix(web): consistent merge people icons (#19473)
fix(web): consistent merge icons
2025-06-23 16:39:20 -04:00
Daimolean
ce14324c97
fix(web): oauth quota display (#19417)
* fix(web): oauth quota display

* fix(web): oauth quota display
2025-06-23 11:00:41 -04:00
Daimolean
6a309129b7
fix(web): timeline timezone (#19418) 2025-06-23 09:06:26 -05:00
Daimolean
7f89999abe
fix(web): toggle favorite (#19453) 2025-06-23 08:36:30 -05:00
Daimolean
813186e618
fix(web): undefined release (#19455)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-06-23 12:13:08 +00:00
Daniel Dietzler
ecc58a8971
chore: migrate version announcement modal (#19381) 2025-06-22 21:56:41 -05:00
Yaros
c705a7b280
fix(web): map broken after redirect from details (#19424)
* fix(web): map broken after redirect from details

* chore: use globalThis instead of window
2025-06-22 21:55:21 -05:00
Brandon Wees
ef278b4fb0
fix: storage template onboarding save (#19405)
* fix: storage template onboarding save

* no need for async/await
2025-06-22 21:54:29 -05:00
Daimolean
4cd633dc68
fix(web): download icon color (#19427) 2025-06-22 21:52:19 -05:00
Daimolean
90aa0dc14d
fix(web): map cluster (#19433) 2025-06-22 15:06:45 +00:00
Daniel Dietzler
698d3004b4
refactor: tag create/update modal (#19389)
refactor: tag modals
2025-06-21 12:28:21 +00:00
Daniel Dietzler
fe4d6edbdc
refactor: album picker modal (#19383)
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-06-21 08:18:54 -04:00
Daniel Dietzler
373b654156
chore: migrate profile picture cropper modal (#19378) 2025-06-20 18:16:10 +00:00
Daniel Dietzler
a5d84ba552
chore: consistent modal footer spacing (#19377) 2025-06-20 18:05:39 +00:00
Daniel Dietzler
1dc8fa2979
chore: rename edit album form modal (#19375) 2025-06-20 13:51:14 -04:00
Brandon Wees
1c50e19894
fix: use icons instead of toggles for admin user features view (#19369)
* fix: use icons instead of toggles for admin user features view

* fix: use red for X icon
2025-06-20 14:48:18 +00:00
Jason Rasmussen
dd8969cb7d
fix: container padding (#19316) 2025-06-19 21:33:12 -05:00
Jason Rasmussen
5cdbb65d28
feat: better contrast for checkmark indicator (#19312)
feat: better constrast
2025-06-19 13:20:57 -05:00
Zack Pollard
f9435a538b
revert: fix(web): wrap long names with textarea (#19305)
Revert "fix(web): wrap long names with textarea (#19301)"

This reverts commit 747a72120e.
2025-06-19 16:28:10 +00:00
Jin Xuan
747a72120e
fix(web): wrap long names with textarea (#19301) 2025-06-19 15:57:54 +00:00
Alex
c8a135a7ae
fix: .find() iterator api combat (#19293)
* fix: .find() iterator api combar

* Update web/src/lib/managers/timeline-manager/month-group.svelte.ts

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

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-06-19 14:59:14 +00:00
xCJPECKOVERx
08d1cf5bde
fix(web): Stack assets in asset-viewer cut off on the left (#19253)
* - move overflow and scrollbar to stack-slideshow inner div

* - format
2025-06-19 09:20:25 -05:00
Dag Stuan
38e68d16f9
fix(web): exit slideshow when exiting fullscreen. (#19247)
Exit slideshow when exiting fullscreen.

Browsers do not send a keyboard event when exiting fullscreen, so if
the user exits fullscreen with the escape key, the slideshow
remains open, requiring another escape key press to close it. Fix this
by listening for the fullscreenchange event and closing the slideshow
when exiting fullscreen.
2025-06-19 14:10:10 +00:00
Daniel Dietzler
caf11fbb96
fix: album asset viewer (#19252) 2025-06-19 09:09:23 -05:00
Paul Larsen
e29103b69f
fix album list CSS margins (#19262) 2025-06-19 14:03:14 +00:00
Daniel Dietzler
07aa51638c
fix: panning interrupted while moving around the map (#19276) 2025-06-19 11:28:53 +00:00
Daniel Dietzler
de81006367
fix: album share modal navigation (#19245) 2025-06-18 16:10:35 +00:00