* feat: metadata in UserPreference
* feat: web metadata settings
* feat: web metadata settings
* fix: typo
* patch openapi
* fix: missing translation key
* new organization of preference strucutre
* feature settings on web
* localization
* added and used feature settings
* add default value to response dto
* patch openapi
* format en.json file
* implement helper method
* use tags preference logic
* Fix logic bug and add tests
* fix preference can be null in detail panel
* feat: loading screen, initSDK on bootstrap, fix FOUC for theme
* pulsate immich logo, don't set localstorage
* Make it spin
* Rework error handling a bit
* Cleanup
* fix test
* rename, memoize
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Squashed
* Change strategy - now pre-measure buckets offscreen, so don't need to worry about sub-bucket scroll preservation
* Reduce jank on scroll, delay DOM updates until after scroll
* css opt, log measure time
* Trickle out queue while scrolling, flush when stopped
* yay
* Cleanup cleanup...
* everybody...
* everywhere...
* Clean up cleanup!
* Everybody do their share
* CLEANUP!
* package-lock ?
* dynamic measure, todo
* Fix web test
* type lint
* fix e2e
* e2e test
* Better scrollbar
* Tuning, and more tunables
* Tunable tweaks, more tunables
* Scrollbar dots and viewport events
* lint
* Tweaked tunnables, use requestIdleCallback for garbage tasks, bug fixes
* New tunables, and don't update url by default
* Bug fixes
* Bug fix, with debug
* Fix flickr, fix graybox bug, reduced debug
* Refactor/cleanup
* Fix
* naming
* Final cleanup
* review comment
* Forgot to update this after naming change
* scrubber works, with debug
* cleanup
* Rename scrollbar to scrubber
* rename to
* left over rename and change to previous album bar
* bugfix addassets, comments
* missing destroy(), cleanup
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat: folder view poc
* fix(folder-view): ui modifications
* fix(folder-view): improves utility return types
* fix(folder-view): update getAssetsByOriginalPath
Endpoint now only returns direct children of the path instead of all images in all subfolders. Functions renamed and scoped to "folder", endpoints renamed
* fix(folder-view): improve typing
* fix(folder-view): replaces css with tailwind
* fix(folder-view): includes folders in main panel
* feat(folder-view): folder cache implementation
* fix(folder-view): can now search for absolute paths
* fix(folder-view): sets default sort to alphabetical by filename
* refactor/styling the browser view
* double click to navigate
* folder tree
* use correct side bar icon
* styling when selected
* correct open icon
* folder layout
* return assetReponseDto
* it's alive
* update new api
* more styling for folder tree
* use query params and path viewer
* use arrow up left for parent folder backward navigation
* use arrow up left for parent folder backward navigation
* encode URL
* handle long folder name
* refactor to the view controller
* remove unused code
* clear cache when logout
* cleaning up
* cleaning up web
* clean as new
* clean as new
* pr feedback + show asset name
* add tests
* add tests
* remove generated file
* lint
* revert docker-compose.dev file
* Update server/src/services/view.service.ts
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* Update server/src/services/view.service.ts
Co-authored-by: Jason Rasmussen <jason@rasm.me>
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* cropping, panel
* fix presets
* types
* prettier
* fix lint
* fix aspect ratio, performance optimization
* improved tool selection, removed placeholder
* fix the mouse's exit from canvas
* fix error
* the "save" button and change tracking
* lint, format
* the mini functionality of the save button
* fix aspect ratio
* hide editor button on mobiles
* strict equality
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
* Use the dollar sign syntax for stores inside components
* unobtrusive grid lines, circles at the corners
* more correct image load, handleError
* more strict equality
* fix styles. unused and tailwind
Co-Authored-By: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
* dont store isShowEditor
* if showEditor - hide navbar & shortcuts
* crop-canvas decomposition (danger)
I could have accidentally broken something.. but I checked the work and it seems ok.
* fix lint
* fix ts
* callback function as props
* correctly disabling shortcuts
* convenient canvas borders
• you can use the mouse to go beyond the boundaries and freely change the crop.
• the circles on the corners of the canvas are not cut off.
* -the editor button for video files, -save button
* hide editor btn if panoramic || gif || live
* corners instead of circles (preview), fix lint&format
* confirm close editor without save
* vertical aspect ratios
* recovery after merge. editor's closing shortcut
* fix format
* move from canvas to html elements
* fix changes detections
* rotation
* hide detail panel if showing editor
* fix aspect ratios near min size
* fix crop area when changing image size when rotate
* fix of fix
* better layout - grouping
https://github.com/user-attachments/assets/48f15172-9666-4588-acb6-3cb5eda873a8
* hide the button
* fix i18n, format
* hide button
* hide button v2
---------
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(web,a11y): context menu keyboard navigation
* wip: all context menus visible
* wip: more migrations to the ButtonContextMenu, usability improvements
* wip: migrate Administration, PeopleCard
* wip: refocus the button on click, docs
* fix: more intuitive RightClickContextMenu
- configurable title
- focus management: tab keys, clicks, closing the menu
- automatically closing when an option is selected
* fix: refining the little details
- adjust the aria attributes
- intuitive escape key propagation
- extract context into its own file
* fix: dropdown options not clickable in a <Portal>
* wip: small fixes
- export selectedColor to prevent unexpected styling
- better context function naming
* chore: revert changes to list navigation, to reduce scope of the PR
* fix: remove topBorder prop
* feat: automatically select the first option on enter or space keypress
* fix: use Svelte store instead to handle selecting menu options
- better prop naming for ButtonContextMenu
* feat: hovering the mouse can change the active element
* fix: remove Portal, more predictable open/close behavior
* feat: make selected item visible using a scroll
- also: minor cleanup of the context-menu-navigation Svelte action
* feat: maintain context menu position on resize
* fix: use the whole padding class as better tailwind convention
* fix: options not announcing with screen reader for ButtonContextMenu
* fix: screen reader announcing right click context menu options
* fix: handle focus out scenario
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* First test
* Added translation using Weblate (French)
* Translated using Weblate (German)
Currently translated at 100.0% (4 of 4 strings)
Translation: immich/web
Translate-URL: http://familie-mach.net/projects/immich/web/de/
* Translated using Weblate (French)
Currently translated at 100.0% (4 of 4 strings)
Translation: immich/web
Translate-URL: http://familie-mach.net/projects/immich/web/fr/
* Further testing
* Further testing
* Translated using Weblate (German)
Currently translated at 100.0% (18 of 18 strings)
Translation: immich/web
Translate-URL: http://familie-mach.net/projects/immich/web/de/
* Further work
* Update string file.
* More strings
* Automatically changed strings
* Add automatically translated german file for testing purposes
* Fix merge-face-selector component
* Make server stats strings uppercase
* Fix uppercase string
* Fix some strings in jobs-panel
* Fix lower and uppercase strings. Add a few additional string. Fix a few unnecessary replacements
* Update german test translations
* Fix typo in locales file
* Change string keys
* Extract more strings
* Extract and replace some more strings
* Update testtranslationfile
* Change translation keys
* Fix rebase errors
* Fix one more rebase error
* Remove german translation file
* Co-authored-by: Daniel Dietzler <danieldietzler@users.noreply.github.com>
* chore: clean up translations
* chore: add new line
* fix formatting
* chore: fixes
* fix: loading and tests
---------
Co-authored-by: root <root@Blacki>
Co-authored-by: admin <admin@example.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
* refactor(server): user endpoints
* feat(server): user preferences
* mobile: user preference
* wording
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor(server): user endpoints
* fix repos
* fix unit tests
---------
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* duplicate detection job, entity, config
* queueing
* job panel, update api
* use embedding in db instead of fetching
* disable concurrency
* only queue visible assets
* handle multiple duplicateIds
* update concurrent queue check
* add provider
* add web placeholder, server endpoint, migration, various fixes
* update sql
* select embedding by default
* rename variable
* simplify
* remove separate entity, handle re-running with different threshold, set default back to 0.02
* fix tests
* add tests
* add index to entity
* formatting
* update asset mock
* fix `upsertJobStatus` signature
* update sql
* formatting
* default to 0.03
* optimize clustering
* use asset's `duplicateId` if present
* update sql
* update tests
* expose admin setting
* refactor
* formatting
* skip if ml is disabled
* debug trash e2e
* remove from web
* remove from sidebar
* test if ml is disabled
* update sql
* separate duplicate detection from clip in config, disable by default for now
* fix doc
* lower minimum `maxDistance`
* update api
* Add and Use Duplicate Detection Feature Flag (#9364)
* Add Duplicate Detection Flag
* Use Duplicate Detection Flag
* Attempt Fixes for Failing Checks
* lower minimum `maxDistance`
* fix tests
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* chore: fixes and additions after rebase
* chore: update api (remove new Role enum)
* fix: left join smart search so getAll works without machine learning
* test: trash e2e go back to checking length of assets is zero
* chore: regen api after rebase
* test: fix tests after rebase
* redundant join
---------
Co-authored-by: Nicholas Flamy <30300649+NicholasFlamy@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
* First version of video looping for the web
* Use prop for slideshow state
* refactor asset settings and add autoloop video setting
* rename variables and adjust description
* loop videos based on user settings in gallery viewer
* make asset viewer setting a stateless widget
* do not update video playback value if looping is enabled
* add some translations
* adjust description
* add missing id
* WIP
* chore: clean up
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* feat(server, web): include pictures of shared albums on map
* run prettier
* re-create api clients
* implement suggestions from code review
* shared from partner -> shared from partners
* rename to 'include shared partner assets'
* chore: fix tsc error in server and prettier in web
* fix: include assets shared via owner albums
---------
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* feat(server): add `react-mail` as mail template engine and `nodemailer`
* feat(server): add `smtp` related configs to `SystemConfig`
* feat(web): add page for SMTP settings
* feat(server): add `react-email.adapter`
This adapter render the React-Email into HTML and plain/text email.
The output is set as the body of the email.
* feat(server): add `MailRepository` and `MailService`
Allow to use the NestJS-modules-mailer module to send SMTP emails.
This is the base transport for the `NotificationRepository`
* feat(server): register the job dispatcher and Job for async email
This allows to queue email sending jobs for the `EmailService`.
* feat(server): add `NotificationRepository` and `NotificationService`
This act as a middleware to properly route the notification to the right transport.
As POC I've only implemented a simple SMTP transport.
* feat(server): add `welcome` email template
* feat(server): add the first notification on `createUser` in `UserService`
This trigger an event for the `NotificationRepository` that once processes
by using the global config and per-user config will carry the payload to the right notification transport.
* chore: clean up
* chore: clean up web
* fix: type errors"
* fix package lock
* fix mail sending, option to ignore certs
* chore: open api
* chore: clean up
* remove unused import
* feat: email feature flag
* chore: remove unused interface
* small styling
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Remove asest redirect pages
* Rename route paths to handle optional assetId
* Update old references to new routes
* Load and display asset from all routes that can show assetId
* Add <main> in base layout, update portals to target it
* Wire up updating navigation in response to open/close/prev/next
* Replace events with navigation functions
* Add types to param matcher
* misc cleanup
* Fix reload on /search pages
* Avoid loading bar between photos nav. Delay loading bar by 200ms for all navigations
* Update url for maps routes. Note: on page reload, next/prev is not available
* Dynamically load asset-viewer on map page
* When reloading a url with assetUrl, hide background page to prevent flash during load
* Mostly style, review comments
* Load buckets for assets on demand
* Forgot this update call
* typo
* fix test
* Fix carelessness
* Review comment
* merge main
* remove assets
* fix submodule
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
* feat(web): enhance ux/ui of the album list page
* fix unit tests
* feat(web): enhance ux/ui of the album list page
* fix unit tests
* small styling
* better dot
* lint
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(web): use ctrl+a / ctrl+d to select / deselect all assets
* fix(web): use shortcutList for ctrl+a / ctrl+d
* fix(web): remove useless get()
* feat(web): asset interaction store can now select many assets at once