Compare commits

...

272 Commits

Author SHA1 Message Date
Jonathan Jogenfors
cfd9155918 wip 2025-04-15 15:45:02 +02:00
Weblate (bot)
cecd9c24a4 chore(web): update translations (#17438)
Co-authored-by: Alex <rainbowpulp@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Ciprriann <cipriannebeja@gmail.com>
Co-authored-by: Eskuero <3skuero@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Gustavo Batista <gustavo_prg@hotmail.com>
Co-authored-by: Happy <happygamernintendoswitch@gmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Josep Mengual <josep@truita.es>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leonard Baki <leonard.baki@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Molnar Eduard <edimolnar@posteo.ro>
Co-authored-by: Nergis <me@nergis.dev>
Co-authored-by: Nghiem Long Phan <nghiemlong@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stein-Aksel Basma <stein-aksel@basma.no>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TheScientistPT <joao.ed.reis.gomes@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: alexxss <rainbowpulp+weblate@gmail.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: hachimaru <eugenereuh@gmail.com>
Co-authored-by: kylo32 <kylo32@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: shiuh67 <shiuh.cheng@gmail.com>
Co-authored-by: stelle <itsazripp2@gmail.com>
Co-authored-by: szelek <janek.szelewicz@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
2025-04-15 14:27:57 +01:00
Jason Rasmussen
f189c7b101 refactor: medium tests (#17599) 2025-04-15 08:53:14 -04:00
renovate[bot]
c5f087a3ca chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to a20b8a3 (#17606)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:56:00 +01:00
renovate[bot]
72f6d7791e chore(deps): update dependency @sveltejs/kit to v2.20.6 [security] (#17603)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:47:30 +01:00
renovate[bot]
f73fce1046 chore(deps): update base-image to v202504081114 (major) (#17613)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:47:10 +01:00
renovate[bot]
f2edcde1b2 chore(deps): update actions/create-github-app-token action to v2 (#17612)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:04:43 +01:00
renovate[bot]
9d0dd9dff8 chore(deps): update github-actions (#17605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 12:03:45 +01:00
Mert
c3d10c5be2 refactor(server): non-nullable file metadata (#17598) 2025-04-15 12:03:31 +01:00
Andrei Mironov
bd92748ddd perf(mobile): optimize date loading with batch loading (#17240)
* perf(mobile): optimize date loading with batch loading

Introduce DateBatchLoader to reduce the number of database queries by loading dates in batches, improving performance when querying large lists.

* remove unused totalCount parameter from DateBatchLoader

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-14 19:06:36 +00:00
Toni
aad5c3bada chore(mobile): don't show drag scroll date in search page (#17594)
Dont show drag scroll date in search page

* When using the drag scroll, the date of the current image is shown. This is now made toggleable.
* For the mobile search result page, the display of the date is now disabled because the results are not sorted by date and therefore a display of the date is not desirable.
2025-04-14 14:03:18 -05:00
Jason Rasmussen
b2753103c6 chore: remove unused logger (#17593) 2025-04-14 15:01:49 -04:00
Aamir Azad
e3f3baadb0 fix(web): improve mobile web album viewer padding (#17575)
Reduce margin on mobile web album viewer
2025-04-14 13:46:53 -05:00
Daniel Dietzler
0b69d1c147 refactor: selected columns in queries (#17589) 2025-04-14 13:34:06 -05:00
Min Idzelis
5a51ad3622 fix: responsive: timeline glitch and keyboard-accessible scrubber (#17556)
* fix: responsive: timeline glitch

* lint

* fix margin-right on mobile

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-14 11:56:40 -05:00
AutisticShark
664c99278a feat(mobile): remove duplicated i18n file (#17591)
https://github.com/immich-app/immich/issues/8946

Co-authored-by: Cat <cat@nextpanel.dev>
2025-04-14 11:36:18 -05:00
Daniel Dietzler
184e142d87 refactor: migrate asset job status entity (#17560) 2025-04-14 12:21:56 +02:00
Andreas Tollkötter
8b00578c7b fix: read longitude and latitude when reverse geocoding is off (#17558) 2025-04-14 10:43:46 +01:00
Erik Nygren
7562088fac feat(server): parse EXIF creation time for some insta360 images (#17564)
It seems insta360 stores metadata in XMP GPano tags, with their own
non-standard and undocumented addition `SourceImageCreateTime`. For some
pictures this is the only EXIF tag containing a creation time.
2025-04-13 23:44:18 -04:00
Ben
79d4ce2d6d fix(web): search bar deactivates when focus exits (#17549)
* fix(web): search bar deactivates when focus exits

* fix: disable search bar on destroy

For example, on the search page. If the escape key is pressed while the advanced filters button is focused, the search page will close but the search bar will remain activated.
2025-04-13 22:43:50 -05:00
Min Idzelis
983f656a6b fix: in dev, delay web server start until api server is started (#17563) 2025-04-13 10:06:35 -04:00
Alex
ab2a7006f9 chore(mobile): small visual fix and update (#17547)
* chore(mobile): small visual fix and update

* update

* update

* remove design placeholder
2025-04-13 08:01:32 -05:00
Min Idzelis
1f18fe31f0 fix: occasional empty buckets, after canceled loads (#17552) 2025-04-13 07:50:24 -05:00
Daniel Dietzler
a373034629 refactor: migrate stacks (#17559)
chore: migrate stacks
2025-04-12 08:33:35 -04:00
renovate[bot]
5dac315af7 fix(deps): update dependency @nestjs/common to v11.0.16 [security] (#17557)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-12 12:31:18 +02:00
Min Idzelis
8309b73a02 fix: responsive: long press while scroll (#17555) 2025-04-11 18:28:36 -04:00
Min Idzelis
e440cbe353 feat: responsive-web: shrink mem-lane (#17550) 2025-04-11 17:10:58 -05:00
Daniel Dietzler
5548eb0dad fix: live photo hiding (#17548) 2025-04-11 17:09:58 -05:00
Min Idzelis
3bec8dc337 refactor: responsive: device units (#17551) 2025-04-11 17:09:10 -05:00
Min Idzelis
5bcb58c3e7 feat: responsive: skeleton (#17553)
feature: responsive: skeleton
2025-04-11 17:04:48 -05:00
Min Idzelis
c62fc155c8 feat: show thumbhash behind load error, if possible (#17554)
* feat: show thumbhash behind load error, if possible

* forgot this
2025-04-11 17:01:51 -05:00
Rudhra Raveendran
40e3322b25 docs: Add PowerShell example for running web client only (#17546)
Add PowerShell example for running web client only
2025-04-11 17:02:21 -04:00
Mert
25f2b9602f refactor(server): remove face, person and face search entities (#17535)
* remove face, person and face search entities

update tests and mappers

check if face relation exists

update sql

unused imports

* pr feedback

generate sql, remove unused imports
2025-04-11 14:44:45 -04:00
Jason Rasmussen
ae6653392e feat: view qr code from share modal (#17544) 2025-04-11 14:02:07 -04:00
Etienne
d7a782da34 feat: sync pictureFile with oidc if it isn't set already (#17397)
* feat: sync pictureFile with oidc if it isn't set already

fix: move picture writer to get userId

fix: move await promise to the top of the setPicure function before checking its value and automatically create the user folder

chore: code cleanup

* fix: extension double dot

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-04-11 13:00:39 -05:00
renovate[bot]
08b5952c87 chore(deps): update dependency vite to v6.2.6 [security] (#17541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 13:56:01 -04:00
Jason Rasmussen
584e5894bf refactor: user factories instead of stubs (#17540) 2025-04-11 11:53:37 -04:00
Yaros
52d4b2fe57 fix(mobile): remove locate asset button from trashed asset (#17503)
* fix: remove locate asset button from trashed asset

* chore: refactor code
2025-04-11 09:41:10 -05:00
Ben
92f0973a46 fix(web): reset search history after logout (#17534)
fix(web): reset search suggestions after logout
2025-04-10 20:34:45 +00:00
Jason Rasmussen
75c83cb704 refactor: metadata stub (#17532) 2025-04-10 21:58:55 +02:00
Jason Rasmussen
0b22d3348e refactor: count all return type (#17529) 2025-04-10 14:38:49 -04:00
Alex
abde0fbe60 fix(web): mobile view double scroll layer (#17528) 2025-04-10 13:50:05 -04:00
Jason Rasmussen
eaa0e07329 refactor: asset files entity (#17527) 2025-04-10 13:26:27 -04:00
Mitchell Pleune
9fd2c5220d fix: test_sets_default_sess_options fails if compiling with globally enabled cuda (#17516)
Coming from nixos, this test fails when cuda is enabled. https://github.com/NixOS/nixpkgs/pull/382896

Solution as proposed by @mertalev
2025-04-10 13:06:33 -04:00
Snowknight26
7fcab4b251 feat(server): read additional lens exif tags (#17125)
* fix(server): read additional lens exif tags

* Update order of read tags

* Fix e2e test

* Fix e2e test

* Fix e2e test

* Fix e2e test

* Update test

* Filter unknown lens exif data

* Formatting fixes
2025-04-10 12:02:41 -05:00
Ben
e3995fb5f4 fix(web): increase sidebar breakpoint (#17436) 2025-04-10 12:00:30 -05:00
Alex
6d3f3d8616 refactor: convert download manager into a state class (#17491)
* fix(web): download progress bar not functioning

* remove unused method
2025-04-10 16:48:21 +00:00
Jason Rasmussen
4412680679 refactor: remove unused shared users list (#17526) 2025-04-10 11:44:47 -05:00
Brandon Wees
7df2c9c905 fix: patch-package install in docker build and better postgres patch (#17523)
* always patch package when running npm i, install immich CLI outside of directory so post install doesnt run

* handles case where query is an object and defined but origin is not.

* move patch-package from a dev dependency to a normal dependency. Also copy the patches folder for the docker build to use and patch with

* fix Dockerfile

* use query.reject instead of throw for queryError

* package-lock to reflect the dev dependency change

* dont throw the error, just provide an empty string for query.origin if it does not exist

* remove npm link and demote patch-package back to a dev dependency

* modify patch to add defensive check to catch queries that will fail to parse and reject
2025-04-10 12:43:35 -04:00
Daniel Dietzler
7a1e8ce6d8 chore: remove exif entity (#17499) 2025-04-10 12:36:29 -04:00
Jason Rasmussen
8aea07b750 refactor: album user entity (#17524) 2025-04-10 11:53:21 -04:00
Zack Pollard
94dba29298 refactor: remove user entity (#17498) 2025-04-10 10:53:21 -04:00
Rudhra Raveendran
9e49783e49 feat: use browser download manager for single file downloads (#17507)
* Fix download panel reactivity

* Directly download individual files without buffering in memory

* Fix shared link e2e download tests
2025-04-10 09:13:50 -05:00
renovate[bot]
43e3075f93 fix(deps): update machine-learning (#17455) 2025-04-09 16:20:11 +00:00
Zack Pollard
d03647904b refactor: remove move entity (#17489) 2025-04-09 11:54:20 -04:00
Jason Rasmussen
206545356d refactor: metadata entity (#17492) 2025-04-09 11:45:30 -04:00
renovate[bot]
3e372500b0 fix(deps): update typescript-projects (#17456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-04-09 14:47:29 +00:00
Jason Rasmussen
8943ec23ba refactor: more database types (#17490) 2025-04-09 10:24:38 -04:00
Gagan Yadav
04b03f2924 fix(mobile): asset grid will infinitely scroll on iOS when select and… (#17469)
fix(mobile): asset grid will infinitely scroll on iOS when select and drag
2025-04-09 08:36:27 -05:00
Jason Rasmussen
cf2c0260a6 refactor: activity item (#17470)
* refactor: activity item

* fix query

* qualified columns

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-09 08:35:20 -04:00
Alex
ae8af84101 fix: no thumbnail generated for motion assets (#17472) 2025-04-08 16:07:10 -05:00
Jason Rasmussen
4794eeca88 refactor: database types (#17468) 2025-04-08 12:40:03 -04:00
Gagan Yadav
ac65d46ec6 fix(mobile): adds support for Internationalized Domain Name (IDN) (#17461) 2025-04-08 11:04:42 -05:00
Alex
e5ca79dd44 refactor: remove session entity (#17466)
* refactor: remove session entity

* fix: test

* update sql

* remote export
2025-04-08 16:04:07 +00:00
Jason Rasmussen
49be6d7fd8 refactor: more database enums (#17465) 2025-04-08 12:02:05 -04:00
Daniel Dietzler
15c6506aee fix: broken start/end dates on album update (#17467) 2025-04-08 15:47:44 +00:00
Jason Rasmussen
2c31a11e41 chore: replace generated enums with actual types (#17463) 2025-04-08 11:13:46 -04:00
Jason Rasmussen
b6c5a03533 refactor: remove tag entity (#17462) 2025-04-08 10:52:54 -04:00
Gagan Yadav
75bc32b47b fix(mobile): hide asset description text field if user is not owner (#17442)
* fix(mobile): hide asset description text field if user is not owner

* If user is not the owner and asset has no description then hide the text field

* Apply suggestions from code review

Co-authored-by: Alex <alex.tran1502@gmail.com>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-08 09:18:33 -05:00
Jason Rasmussen
fdbe6d649f refactor: remove smart search entity (#17447)
refactor: smart search entity
2025-04-08 09:56:45 -04:00
Aleksandr
2b131fe935 feat: opt-in sync of deletes and restores from web to Android (#16732)
* Features: Local file movement to trash and restoration back to the album added. (Android)

* Comments fixes

* settings button marked as [EXPERIMENTAL]

* _moveToTrashMatchedAssets refactored, moveToTrash renamed.

* fix: bad merge

* Permission check and request for local storage added.

* Permission request added on settings switcher

* Settings button logic changed

* Method channel file_trash moved to BackgroundServicePlugin

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-08 08:50:40 -05:00
snek
6ae24fbbd4 feat(web): improve individual share ux (#17430) 2025-04-08 09:11:37 -04:00
renovate[bot]
7f116d8e98 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to b0b88ef (#17453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:32:14 +01:00
renovate[bot]
bd0840c411 chore(deps): update github/codeql-action digest to 45775bd (#17452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:31:57 +01:00
renovate[bot]
a5123dec1a chore(deps): update grafana/grafana docker tag to v11.6.0 (#17460)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:31:46 +01:00
renovate[bot]
ffd18c5459 chore(deps): update dependency @types/node to ^22.14.0 (#17459)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 12:14:30 +02:00
PyKen
8242ff9bab fix(server): Exclude album assets in shared link payload (#17207)
* fix(server): Exclude album assets in shared link payload

* Fix e2e test
2025-04-08 00:19:06 -04:00
Jason Rasmussen
8203b6c450 refactor: stop using geodata entity type (#17444) 2025-04-08 00:15:43 -04:00
Jason Rasmussen
b352cf3336 refactor: remove natural earth countries enity (#17445) 2025-04-08 00:15:16 -04:00
bo0tzz
96ed9a8c4a fix: restore mangled footnotes (#17446)
I broke this in #17257
2025-04-07 18:03:32 -04:00
Jason Rasmussen
e7a5b96ed0 feat: extension, triggers, functions, comments, parameters management in sql-tools (#17269)
feat: sql-tools extension, triggers, functions, comments, parameters
2025-04-07 15:12:12 -04:00
renovate[bot]
51c2c60231 chore(deps): update dependency vite to v6.2.5 [security] (#17391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 16:35:29 +01:00
shenlong
43d585ce55 fix(mobile): exifInfo not updated on sync (#17407)
* fix(mobile): exifInfo not updated on sync

* add tests

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-07 10:21:37 -05:00
shenlong
042da669d1 fix(mobile): use custom filter to fetch asset path entities (#17344)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-07 09:39:24 -05:00
Yaros
a724f147fe fix(mobile): items not deselecting on back button (#17403)
* fix: items not deselecting on back button

* chore: add comments
2025-04-07 09:35:27 -05:00
Sebastian Schneider
1e4b9ae5b7 fix(mobile): video player restarting when device rotates (#17362)
* fix(mobile): Video player restarting when device rotates

* use global key in state

* Implement suggestions from code review
2025-04-07 09:26:08 -05:00
Ruben Hensen
99cddf1fd6 feat: allow accounts with a quota of 0 GiB (#17413)
* Allow 0GiB quotas in user create/edit form, remove unused translations

* Make requireQuota check for null or 0

* Add unlimited quota change to the docs

* Fix user dto formatting

* Fix formating edit-user-form

* Regenerate open-api files

* Revert unnecessary i18n file changes

* Re-add newline en.json

* Resolve linting issues

* Fix formatting edit-user-form

* Re-add manifest
2025-04-07 09:22:56 -05:00
Weblate (bot)
30d33f968f chore(web): update translations (#17254)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ka/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Daniel Correa Lobato <daniel@lobato.org>
Co-authored-by: Emre Saraçoğlu <hello@emresaracoglu.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: GND <jehende@jehende.fr>
Co-authored-by: Gocha Gulua <gocha.gulua@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Leigh van der merwe <palitu822@gmail.com>
Co-authored-by: LennartWeinzierl <lennart.weinzierl@gmx.de>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Luis Peregrina <luis.a.peregrina@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Oleksandr Zhukov <aleksandr.a.zhukov@gmail.com>
Co-authored-by: Passawish Paktiwong <passawishp@outlook.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Ruben Hensen <ruben.hensen@protonmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stein-Aksel Basma <stein-aksel@basma.no>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Tachibana Saza <tachibanasaza@proton.me>
Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Vin <k3kelm4vw@mozmail.com>
Co-authored-by: aks-cadesign <aks@cadesignbase.dk>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: late <late@users.noreply.hosted.weblate.org>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: przmkg <przemek@gasinski.eu>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-04-07 12:28:59 +01:00
Ben McCann
31ee19181a chore(web): switch to writable derived one more place (#17399) 2025-04-06 22:05:47 -05:00
shenlong
b58a450152 fix(mobile): prevent unnecessary reload on multi user timeline (#17418)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-06 22:04:13 -05:00
Zlendy
b87ba6865b fix(web): Video memories are played at 100% volume instead of respecting user preference (#17424) 2025-04-06 22:03:19 -05: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
Matthew Momjian
f096dd0cc0 fix(deployment): warning for database on network share (#17412)
Update example.env
2025-04-06 10:09:54 +02:00
Daniel Dietzler
a3c3f9cfcb fix: reset memories on logout (#17405) 2025-04-05 13:09:56 -04:00
Mert
7b6a4be30c chore: use valkey (#17396)
use valkey
2025-04-04 17:46:46 -05:00
martin
720189e2c2 fix: improve initial loading time (#17379) 2025-04-04 17:04:52 -04:00
shenlong
dfab32c8f2 fix(mobile): ignore invalid store keys (#17370)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-03 22:35:50 -05:00
shenlong
60174d662d fix(mobile): bump isar maxSize (#17372) 2025-04-03 21:49:50 -05:00
bo0tzz
8b6a765e12 chore: remove demo box spec from README.md (#17367) 2025-04-03 18:09:29 -04:00
Zack Pollard
2248a38567 fix: missing index and geodata import process uses normal table (#17343)
* chore: add geodata indexes to table definitions

* chore: rename incorrectly name geodata index

* fix: import into geodata places with correct index names
2025-04-03 21:32:33 +01:00
shenlong
97e52c5156 refactor(mobile): device asset entity to use modified time (#17064)
* refactor: device asset entity to use modified time

* chore: cleanup

* refactor: remove album media dependency from hashservice

* refactor: return updated copy of asset

* add hash service tests

* chore: rename hash batch constants

* chore: log the number of assets processed during migration

* chore: more logs

* refactor: use lookup and more tests

* use sort approach

* refactor hash service to use for loop instead

* refactor: rename to getByIds

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-03 14:42:35 -05:00
Mert
e8b4ac0522 fix(web): use original image if web compatible (#17347)
* use original image if web compatible

* add e2e

* fix shared link handling

* handle redirect in e2e

* fix size not being passed to thumbnail url

* test fullsize in e2e
2025-04-03 09:01:41 -05:00
Alex
548298b0c7 chore: post release tasks (#17341) 2025-04-03 08:47:52 -04:00
Zack Pollard
40cff2893c fix: metadata service init failure should halt server startup (#17356) 2025-04-03 12:35:39 +01:00
Abhinav Valecha
b621281351 feat(server): Avoid face match with people born after file creation #4743 (#16918)
* feat(server): Avoid face matching with people born after file creation date (#4743)

* lint

* add medium tests for facial recognition

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-02 10:37:26 -05:00
Snowknight26
4336afd6bf fix(web): fix thumbnail hover link position (#16762)
* fix(web): don't show a scrollbar when hovering over the last row of images on the search page

* Format code

* Fix asset selection z-index

* Remove anchor overlay on mouseover

* Fix a test

* Fix merge

* Fix overlays

* fix merge

* fix stack thumbs in asset viewer

* fix dimmed bounds, animation

* lint

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
2025-04-02 10:30:41 -05:00
shenlong
5a456ef277 feat(mobile): sqlite (#16861)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* feat: drift

* pr feedback

* refactor: move common overrides to mixin

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-02 08:58:17 -05:00
renovate[bot]
5cb5fcbf62 fix(deps): update machine-learning (#17286) 2025-04-02 03:57:19 +00:00
Alex
95e3b15776 fix(web): padding (#17320) 2025-04-01 23:32:54 -04:00
Ben
50335dc363 fix(web): menu button size (#17321)
Adjusting the menu button size, to match match the other buttons in the navigation bar.
2025-04-01 22:25:17 -05:00
Ben
6e62c09d84 feat(web): expand/collapse sidebar (#16768)
* feat: expand/collapse sidebar

* fix: general PR cleanup

- add skip link unit test
- remove unused tailwind styles
- adjust asset grid spacing
- fix event propogation

* fix: cleaning up event listeners

* fix: purchase modal and button on small screens

* fix: explicit tailwind classes

* fix: no animation on initial page load

* fix: sidebar spacing and reactivity

* chore: reverting changes to icons in nav and account info panel

* fix: remove left margin from the asset grid after merging in new timeline

* chore: extract search-bar changes for a separate PR

* fix: add margin to memories
2025-04-01 21:12:04 -05:00
github-actions
00d3b8d83a chore: version v1.131.3 2025-04-01 22:27:52 +00:00
Mert
d911b76c08 fix(server): use stat instead of exifinfo for file date metadata (#17311)
* use stat instead of filecreatedate

* update tests

* unused import
2025-04-01 17:24:07 -05:00
shenlong
502854cee1 fix(server): remove stacks on stack.deleteAll (#17288)
* fix(server): delete all stacks on deleteAll

* remove unnecessary assets update

* generate sql

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-01 17:20:43 -05:00
Mert
59e5c82569 fix(server): full-size images not migrated or deleted correctly (#17308)
* fix file path logic

* update tests

* add empty array fallback just in case for now
2025-04-01 18:11:46 -04:00
Daimolean
e4b0c00885 fix(web): select all button displays incorrectly (#17305)
* fix(web): select all show incorrectly

* fix: lint

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-04-01 19:00:48 +00:00
Alex
946507231d fix(web): blank locale cause blank timeline to render (#17284)
* fix(web): blank locale cause blank timeline to render

* correct fix

* newline

* pr feedback
2025-04-01 18:58:11 +00:00
Alex
20ba800a50 fix(web): date time change reactivity (#17306)
* fix(web): date time change reactivity

* remove logs
2025-04-01 18:57:53 +00:00
Alex
f434e858ed fix(mobile): getAllByRemoteId return all assets on empty arguments value (#17263)
* chore: post release tasks

* fix(mobile): getAllByRemoteId return all assets if ids is empty
2025-04-01 08:59:21 -05:00
bo0tzz
3e03c47fbf fix: strip extra metadata when transcoding (#17297) 2025-04-01 08:58:59 -05:00
github-actions
9aa3850769 chore: version v1.131.2 2025-04-01 11:41:56 +00:00
renovate[bot]
628dcdeebf fix(deps): update typescript-projects (#17294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 10:58:55 +00:00
renovate[bot]
11bfde2aa8 chore(deps): update github-actions (#17282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 11:49:11 +01:00
renovate[bot]
69b1ac47ea fix(deps): update typescript-projects (#17287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 12:32:09 +02:00
renovate[bot]
4f81265694 chore(deps): update dependency @types/node to ^22.13.14 (#17283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 12:30:41 +02:00
renovate[bot]
3428a876c7 chore(deps): update dependency vite to v6.2.4 [security] (#17259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 00:36:54 +01:00
Alex
bd822657d3 chore: post release tasks (#17262) 2025-04-01 00:36:18 +01:00
Mert
9e7744a9ab fix(ml): healthcheck (#17274) 2025-03-31 19:23:40 -04:00
github-actions
7729fe80fa chore: version v1.131.1 2025-03-31 20:36:48 +00:00
martin
68e24ad168 fix: posix compliant command (#17264) 2025-03-31 16:35:02 -04:00
Jason Rasmussen
186c573565 fix: missing migration folder broke non-root setups (#17266) 2025-03-31 20:18:13 +00:00
github-actions
5b63b9fc8b chore: version v1.131.0 2025-03-31 18:41:13 +00:00
Eli Gao
5c80e8734b feat: original-sized previews for non-web-friendly images (#14446)
* feat(server): extract full-size previews from RAW images

* feat(web): load fullsize preview for RAW images when zoomed in

* refactor: tweaks for code review

* refactor: rename "converted" preview/assets to "fullsize"

* feat(web/server): fullsize preview for non-web-friendly images

* feat: tweaks for code review

* feat(server): require ASSET_DOWNLOAD premission for fullsize previews

* test: fix types and interfaces

* chore: gen open-api

* feat(server): keep only essential exif in fullsize preview

* chore: regen openapi

* test: revert unnecessary timeout

* feat: move full-size preview config to standalone entry

* feat(i18n): update en texts

* fix: don't return fullsizePath when disabled

* test: full-size previews

* test(web): full-size previews

* chore: make open-api

* feat(server): redirect to preview/original URL when fullsize thumbnail not available

* fix(server): delete fullsize preview image on thumbnail regen after fullsize preview turned off

* refactor(server): AssetRepository.deleteFiles with Kysely

* fix(server): type of MediaRepository.writeExif

* minor simplification

* minor styling changes and condensed wording

* simplify

* chore: reuild open-api

* test(server): fix media.service tests

* test(web): fix photo-viewer test

* fix(server):  use fullsize image when requested

* fix file path extension

* formatting

* use fullsize when zooming back out or when "display original photos" is enabled

* simplify condition

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-31 13:24:28 -04:00
bo0tzz
a5093a9434 docs: separate upgrading page (#17257)
* docs: separate upgrading page

* chore: move "setup optional features" into postinstall

* docs: stronger backup warning in postinstall

* chore: link to upgrading page

* docs: reiterate breaking changes in upgrade doc

* chore: fix formatting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-31 11:43:14 -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
PathToLife
838a8dd9a6 feat(web): increase album collapse click area (#17213) 2025-03-31 09:45:30 -05:00
Brandon Wees
d71c5602c3 fix(server): Postgres error pretty printing (#17204)
* add patch-package to dev dependencies

this allows us to patch upstream packages without waiting for PRs to be merged (or not!). Patch-package does a pretty good job of notifying if upstream does a change to invalidate the patch (its a git patch under the hood).

* Patch implementation of https://github.com/porsager/postgres/pull/944

This PR has not been merged by upstream and helps produce verbose error messages when postgres fails to connect (usually incorrect credentials). This is in contrast to error messages such as

`TypeError: Cannot read properties of undefined (reading 'replace'), stack: TypeError: Cannot read properties of undefined (reading 'replace')`

* have postinstall only run when not installing a global package (such as immich-cli in the Docker build)
2025-03-31 09:34:43 -05:00
Mert
8c50e3e80e feat(server): consider JpgFromRaw2 tag for embedded previews (#17123)
* add jpgfromraw2

* unused catch
2025-03-31 09:17:57 -05:00
Jonathan Jogenfors
efcb1129ce fix(server): don't sync null date assets (#17247) 2025-03-31 09:16:53 -05:00
Jonathan Jogenfors
faabda4446 fix(server): multiple exclusion patterns (#17221) 2025-03-31 09:16:30 -05:00
Alex
b8b2898c87 fix(server): double extension when filename has uppercase extension (#17226)
* fix(server): double extension when filename has uppercase extension

* Proper tests
2025-03-31 09:16:04 -05:00
Ben McCann
b25914c2a5 chore: use writable derived in more places (#17248)
chore(web): use writable derived in more places
2025-03-31 09:15:52 -05:00
Zack Pollard
d613f15606 test: fix flaky user handle delete check medium test (#17253)
we can't run specifically the handleUserDeleteCheck tests concurrently due to one of the tests modifying the config in the shared database
if run concurrently you can get race conditions where the other tests pick up the change, even with resetting the config in the beforeEach
therefore the test that checks a delete actually happens, fails
there are many ways to solve this, disabling concurrency for the suite, forcing sequential tests for just handleUserDeleteCheck, increasing the delete test deletedAt to more than the custom duration tests deleteDelay
I applied all three of these. You could also force all the user tests to run in their own databases, but that feels overkill
2025-03-31 13:19:57 +01:00
hwang
a831876fdc fix: MAX_PARAMETERS_EXCEEDED error during person cleanup job (#17222)
* add batch size in sql delete,fix person cleanup error: ERROR [Microservices:{}] Unable to run job handler (backgroundTask/person-cleanup): Error: MAX_PARAMETERS_EXCEEDED: Max number of parameters (65534) exceeded

* add chunked decorator to delete

* chore: prettier formatting fixes

---------

Co-authored-by: hwang3419 <“hwang.iit@gmail.com”>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-31 11:30:56 +00:00
PathToLife
09f4476f97 feat: improve performance for GET /api/album & /api/album/:id (#17124)
* fix(server) optimize number of sql calls for GET /api/albums

remove unnecessary join for getMetadataForIds
remove separate call to getLastUpdatedAssetForAlbumId

* fix(server) remove unnecessary getLastUpdatedAssetForAlbumId call for GET /api/album/:id

also remove getLastUpdatedAssetForAlbumId query as it is no longer referenced

* fix(server): correct lastModifiedAssetTimestamp return type + formatting and typing

* chore(server): address type issue with tests found via npm:check

tests & lint still pass before this commit.
2025-03-31 11:28:41 +00:00
Daniel Dietzler
238c151ac3 chore: finish migrating eslint config files; bump unicorn (#17200) 2025-03-31 12:18:25 +01:00
bo0tzz
e4f83680d9 feat: use my.immich.app for externalDomain fallback (#17209)
* feat: use my.immich.app for externalDomain fallback

This is probably more useful than localhost.

* chore: remove port param

* fix: update expected value in tests

* fix: update expected value in e2e
2025-03-31 12:08:41 +01:00
Daniel Dietzler
74f7fd4b53 chore: add language requests from weblate (#17236) 2025-03-31 10:48:41 +01:00
Weblate (bot)
f4dbfd856e chore(web): update translations (#17115)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translation: Immich/immich

Co-authored-by: Abhijeet Viswam <abhijeetviswam@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Henrik Sommerfeld <henrik@sommerfeld.nu>
Co-authored-by: Karsten Dambekalns <karsten@dambekalns.de>
Co-authored-by: Miro Rýzek <miroslav.ryzek@gmail.com>
Co-authored-by: Mohd Nader <mohd.nader@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nergis <me@nergis.dev>
Co-authored-by: Utkarsh Prajapati <utkarshprap@gmail.com>
Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
Co-authored-by: grgergo <gergo_g@proton.me>
2025-03-31 09:47:08 +00:00
Jason Rasmussen
55a3c30664 feat: kysely migrations (#17198) 2025-03-29 09:26:24 -04:00
renovate[bot]
6fa0cb534a fix(deps): update dependency @opentelemetry/context-async-hooks to v2 (#17031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-28 20:51:01 +01:00
Ben McCann
9f0dbfc150 chore(web): update to newer persisted store package name (#17094) 2025-03-28 20:40:57 +01:00
Saschl
6419ac74af fix: update renderlist after asset deleted (#16786) 2025-03-28 18:34:19 +00:00
Yaros
d2bcf5d716 fix(mobile): pause background video play (#17032)
* fix(mobile): prevent background video playback

* fix: logic for tracking app state

* chore: move lifecycle handler in separate file

* chore: replace useState with useRef

* chore: useOnAppLifecycleStateChange

* fix: removed print statement
2025-03-28 10:32:25 -05:00
shenlong
c8331f111f fix(mobile): prefer remote orientation (#17177)
* fix(mobile): prefer remote orientation

* pr feedback

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-28 10:24:31 -05:00
Jason Rasmussen
4b4bcd23f4 feat: schema diff sql tools (#17116) 2025-03-28 10:40:09 -04:00
Ben McCann
3fde5a8328 feat: map globe view, style hot reloading and load lag fixed (#17079)
* chore: upgrade svelte-maplibre and enforce runes

* feat: maplibre-gl 5, globe view, style hot reloading, fast map markers

* fix: remove location-pin class that wasn't being used

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-28 14:08:54 +00:00
Joren Guillaume
cc3ea32cd2 docs: update folder support for app in README.md (#17191)
Update folder support for app in README.md
2025-03-28 09:35:36 +00:00
Ben McCann
431cf281da chore(web): update typescript-eslint (#17093) 2025-03-28 00:04:31 -04:00
Alex
8f786fd7dd fix(web): form reactivity (#17183) 2025-03-27 19:58:49 -05:00
Alex
3e73765375 fix(web): don't show newly uploaded asset in inapplicable views (#17184) 2025-03-27 19:45:50 -04:00
Alex
411521b21d chore: post release tasks (#17179) 2025-03-27 19:41:22 -04:00
renovate[bot]
e163808348 fix(deps): update typescript-projects (#17080)
* fix(deps): update typescript-projects

* fix: otel

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-27 22:33:58 +00:00
Ben McCann
411772123f chore(web): remove unused props (#17141) 2025-03-27 23:12:14 +01:00
Mert
84c35e35d6 chore(ml): installable package (#17153)
* app -> immich_ml

* fix test ci

* omit file name

* add new line

* add new line
2025-03-27 19:49:09 +00:00
Mert
f7d730eb05 chore(ml): remove exporter (#17182)
* remove exporter code

* update gha
2025-03-27 14:48:02 -04:00
Mert
16e0166d22 docs: evaluate models on xtd-10 and flickr30k (#17159)
update docs
2025-03-27 11:30:51 -05:00
github-actions
43f8f473e9 chore: version v1.130.3 2025-03-27 15:54:30 +00:00
shenlong
cc393b2b7b fix(mobile): oauth-mobile-first-login (#17173)
invalidate ref

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-27 15:49:55 +00:00
Alex
6341962de4 fix(web): better touch device detection (#17144)
* fix(web): better touch device detection

* variable name
2025-03-27 10:43:56 -05:00
Min Idzelis
c26b28f6a4 fix: bug with svelte gestures (#17154)
* fix: bug with svelte gestures

* lint
2025-03-27 08:51:52 -05:00
shenlong
c72c82c401 fix(mobile): faster device album refresh after initial sync (#17170)
fix(mobile): faster device album refresh after fresh sync

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-27 08:47:05 -05:00
Alex
fecf3809a6 fix(server): album count does not account for assets without exif (#17150)
* fix(server): album count doesn't accounted for assets without exif

* sql
2025-03-26 21:24:22 -05:00
Mert
619bd72de9 docs: mention rknn among image options (#17156)
mention rknn
2025-03-26 19:05:48 -04:00
Jason Rasmussen
fd4a5f71b5 fix: broken album page (#17149) 2025-03-26 18:59:23 -04:00
github-actions
2f8725c66f chore: version v1.130.2 2025-03-26 15:34:54 +00:00
Jonathan Jogenfors
9fbd6369b9 fix(server): check asset against multiple import paths (#17128)
* fix sql logic

* refactor: map import paths into not or sql statements

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-26 10:10:53 -05:00
Snowknight26
c547d849d9 fix(web): prevent comb box dropdowns from staying open when clicking on labels (#17119)
fix(web): prevent combobox dropdowns from staying open when clicking on label
2025-03-26 08:58:00 -05:00
renovate[bot]
6ba94ac2f2 fix(deps): update machine-learning (#17078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-26 02:04:41 +00:00
Alex
dfb0626c91 fix(web): default search to context (#17118)
* fix(web): default search to context

* one liner

* Refactor
2025-03-25 17:57:12 -05:00
Alex
392ce7deb2 fix(web): albums display order again (#17117) 2025-03-25 22:14:00 +00:00
Mert
75df8fc10e refactor(server): bulk update exif (#17109)
* bulk update exif

* update sql

* update tests

* check job queeuing in test
2025-03-25 21:24:24 +00:00
github-actions
4cf7c55680 chore: version v1.130.1 2025-03-25 20:25:01 +00:00
Alex
b8ff93a3c9 chore: post release tasks (#17097) 2025-03-25 21:22:30 +01:00
Alex
37eb70c1eb fix(web): albums display order (#17106)
* fix(web): albums display order

* ergonomic

* perf ergonomic

* miss 1
2025-03-25 20:21:38 +00:00
renovate[bot]
aa4d6405f4 chore(deps): update base-image to v202503251114 (major) (#17085)
* chore(deps): update base-image to v202503251114

* fix: geocoding changes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-25 20:15:02 +00:00
Alex
ae447542a4 fix(web): asset navigation (#17104) 2025-03-25 15:00:30 -05:00
renovate[bot]
90f21d9047 chore(deps): pin dependencies (#17077)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 18:07:59 +00:00
renovate[bot]
567a92fe77 chore(deps): update dependency vite to v6.2.3 [security] (#17092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 18:07:25 +00:00
Weblate (bot)
8d6f5a2da9 chore(web): update translations (#16807)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/af/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/id/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ur/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Agostino Pit <scheccia@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Andreas Resch <weblate@resch.io>
Co-authored-by: Basilis Pantelis <bpantelis10@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Dawider10 <dawider110@gmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Focron <eliaelmas55@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jean-Philippe Jodoin <jpjodoin@gmail.com>
Co-authored-by: Johan Ohly <johanohly@gmail.com>
Co-authored-by: Jørgen Næss Berge <jorgen.n.berge@gmail.com>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Knud Bachmann Røn <knudbachmannron@proton.me>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: MSDNicrosoft <wang3311835119@hotmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nicolás McCarthy <nicomcc24@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Ryan Gleeson <gleeson.ryanj@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Tomas Svec <svec.tomas@gmail.com>
Co-authored-by: Umesh Verma <umesh.verma236@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: beckett <beckett.blakey@proton.me>
Co-authored-by: johnwoo_nl <pb@lunenburg-productions.nl>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: yousaf465 <yousaf465@gmail.com>
Co-authored-by: 灯笼 <gh_denglong@163.com>
2025-03-25 18:05:23 +00:00
bo0tzz
69662e1ab4 chore: shared renovate configuration (#16903)
* chore: shared renovate configuration

dep: https://github.com/immich-app/.github/pull/2

* chore: move typescript-projects and schedule to shared config

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-25 14:56:54 +00:00
github-actions
42b1efb679 chore: version v1.130.0 2025-03-25 13:48:45 +00:00
Snowknight26
b8bc11b0d9 fix(web): fix escape key not closing video player after seeking (#16860)
Co-authored-by: Yaros <thedj.launchpadder.dmx512@gmail.com>
2025-03-25 13:42:23 +00:00
Ben McCann
91065db3ff chore: migrate previously missed file to Svelte 5 (#17074) 2025-03-24 19:44:05 -04:00
Alex
c14668bdd4 chore(mobile): translation (#17073)
chore(mobile): translation update
2025-03-24 22:16:10 +00:00
Yaros
9757f70064 fix(web): not autoplay after moving playhead on paused video (#17038)
fix(web): prevent autoplay after moving playhead
2025-03-24 16:55:46 -05:00
Min Idzelis
4a0045db44 feat(web): support long-press selection on mobile web (#16906)
* feat(web): max grid row height responsive

* also gallery-viewer

* lint

* feat(web): support long-press selection on mobile web

* use svelte-gestures

* fix test

* Bug fix

* globalThis

* format

* revert generator

* Testing

* bad merge

* Fix typo/tap on thumbnail

* feat: shrink header on small screens (#16909)

* feat(web): shrink header on small screens

* fix test

* test

* Fix test

* Revert user-page-layout chagne

* Restore icons sizes, make consistent, improve logo responsiveness

* remove 4 more pix, lint

* lint

* chore

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>

* Revert "Testing"

This reverts commit 442f11c9e1.

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-24 16:36:36 -05:00
Yaros
a651a4bf0e chore(mobile): search field in separate widget (#16977)
* chore(mobile): search field in separate widget

* fix: removed unnecessary use of context

* chore: minor styling tweak

* fix: controller not bound

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-24 14:40:33 -05:00
Alex
8bc80076bb fix(mobile): show new local assets in offline mode (#16817)
fix: show new local assets in offline mode
2025-03-24 16:56:18 +00:00
Luigi311
89656472ef fix(mobile): fallback authentication client model/type to unknown (#17059)
mobile: fallback authentication client model/type to unknown

Add fallback for client model/type if device is not ios or android

Signed-off-by: Luis Garcia <git@luigi311.com>
2025-03-24 11:26:05 -05:00
Yaros
d9c6ec06e5 chore(mobile): suffix to app name on debug builds (#17044) 2025-03-24 11:23:07 -05:00
Mert
4bfef2460a docs: model benchmarks (#17036)
* model benchmarks

* minor fixes

* formatting

* docs build

* maybe fix reference

* clarify optimal

* use emojis

* wording

* wording

* clarify optimal wording

* bolding

* more detailed instructions

* clarify edge case fix

* early exit in dim loop
2025-03-24 12:02:33 -04:00
shenlong
ad151130f9 chore: rename user api interface (#17062)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-24 11:00:08 -05:00
Damiano Ferrari
a77608e36b fix(mobile): selectedIcon not set when the device is landscape (#17027) 2025-03-24 10:50:49 -05:00
Nicholas Flamy
9e015c7f97 feat: lint workflow files and others files in .github (#16914)
* add npm prettier dep and format script to .github folder

* initial work on prettier formatting test

* attempt index notation

* change name of .github job to be valid

* another use of index notation

this is getting overcomplicated

* Change job ID to `github-files-formatting` and chane the name to `.github Files Checks`

* Change job name to `.github Files Formatting`

* Update Makefile with .github module and `filter-out`s

* run prettier formatting as added in this PR
2025-03-24 10:49:18 -05:00
Damiano Ferrari
df8ba21b7d fix(mobile): Make icons consistent (all outlined) (#17028)
* fix(mobile): Make icons consistent (all outlined)

* fix(mobile): make `date_range` icon outlined
2025-03-24 10:10:15 -05:00
Yaros
a285b1898e fix(mobile): platform-dependent share icons & label (#17034)
fix: platform-dependant icons
2025-03-24 08:36:15 -05:00
Mert
6a8e38042d fix(ml): add librknnrt.so in rknn image (#17022)
add librknnrt.so
2025-03-21 16:57:14 -04:00
Min Idzelis
55b52ecbec feat: mobile-web improvements - scrubber (#16856)
* feat: mobile-web improvements - scrubber

* lint

* cruft

* lint

* fix: thumb style

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-21 18:00:24 +00:00
Alex
b5d5c40c69 fix(web): update stack state in timeline (#17021)
* fix(web): update stack state in timeline

* js docs

* fix: handle state update from unstack action from gallery viewer

* use navigate in View Stack notification

---------

Co-authored-by: Snowknight26 <Snowknight26@users.noreply.github.com>
2025-03-21 12:42:36 -05:00
Snowknight26
b00da18e84 fix(web): timeline renders nothing with an invalid asset scroll target (#16994)
* fix(web): fix asset grid showing nothing with an invalid asset target

* Deduplicate

* Scroll to position where appropriate

* a bit cleaner

* fix: lint

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-21 08:40:57 -05:00
Ben
3c87341902 fix(web): clicking away closes context menu (#16989)
* fix(web): clicking away closes context menu

* fix: use pointerdown event instead

* Revert "fix: use pointerdown event instead"

This reverts commit 0d2cf47194.
2025-03-21 08:39:41 -05:00
Alex
bcd9248b43 fix(web): timeline regression 2 (#16982)
* fix(web): timeline renders nothing after archiving in asset viewer

* fix(web): timeline renders nothing after archiving in asset viewer

* fix: ensure geometry updated when performing bulk action on all

* fix: album assets selection
2025-03-20 22:30:27 -05:00
Alex
dbc279f843 fix: gallery viewer sliding window offload assets (#17016)
* fix: gallery viewer sliding window offload assets

* fix: update bottom sliding window

* do not use negative

* Calculate offset before gallery

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
2025-03-20 22:30:01 -05:00
Alex
21954939cf chore: remove limit in memory generation (#16920)
* chore: remove limit in memory generation

* generate sql

* chore: assets limit
2025-03-20 13:31:51 -05:00
renovate[bot]
d537f2c2d1 chore(deps): update github-actions (#16965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-20 13:17:36 -05:00
Snowknight26
1820c0aa0d fix(web): fix View in Timeline not working for stacked assets (#16993)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-03-20 13:17:14 -05:00
Yaros
0d805a1f5b fix(web): removed merge person with itself (#16987)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-20 15:25:42 +00:00
Alex
f5e6042eb1 fix: extend e2e test cookie expiration date (#17007)
fix: extend e2e test cookie
2025-03-20 16:17:55 +01:00
renovate[bot]
8de71ddaf3 chore(deps): update dependency flutter to v3.29.2 (#16963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 10:58:57 -05:00
Min Idzelis
7075c5b393 feat(web): make asset grid row height responsive (#16970)
* feat(web): max grid row height responsive

* also gallery-viewer

* lint
2025-03-19 10:57:44 -05:00
Min Idzelis
9398b0d4b3 fix: regression in select-all (#16969)
* bug: select-all

* set->[] in interaction store, clear select-all on cancel

* feedback

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-19 15:55:50 +00:00
renovate[bot]
1a0a9ef36c chore(deps): update base-image to v202503182202 (major) (#16968)
chore(deps): update base-image to v202503182202

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 00:28:32 -04:00
Dmitry Vakhnenko
ce456709b5 fix(web): reset selection state when adding assets to a album (#16880)
* fix(web): cancel multiselect before adding assets to album

* chore: format with prettier

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-19 00:11:58 +00:00
renovate[bot]
bc90678276 fix(deps): update machine-learning (#16966) 2025-03-18 23:07:21 +00:00
renovate[bot]
217a90bf61 chore(deps): update actions/download-artifact digest to b14cf4c (#16934)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 17:10:19 -05:00
Yaros
62ba8c3e71 fix(web): date alignment on timeline (#16961) 2025-03-18 21:55:36 +00:00
renovate[bot]
564724b398 fix(deps): update machine-learning (#16960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 20:55:43 +00:00
renovate[bot]
cedeba8723 chore(deps): update prom/prometheus docker digest to 502ad90 (#16956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 16:48:52 -04:00
bo0tzz
1d994333a6 fix: duplicated steps in docker workflow (#16952)
Not sure how that happened, maybe a bad merge conflict resolution?
2025-03-18 16:39:30 -04:00
renovate[bot]
db8155f738 fix(deps): update typescript-projects (#16945)
* fix(deps): update typescript-projects

* fix: very weird variables

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-18 20:29:21 +00:00
renovate[bot]
4d723f4b56 chore(deps): update dependency types-setuptools to v76 (#16949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 15:02:25 -04:00
renovate[bot]
898b3e75c2 fix(deps): update machine-learning (#16935)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 17:09:46 +00:00
bo0tzz
8c2d02c362 chore: run docs and cli builds on all PRs (#16954)
All the other workflows already do this.
2025-03-18 11:55:18 -05:00
Dmitry Vakhnenko
d7a6e78bf0 fix(server): /api/stacks does not handles primaryAssetId query param (#16868)
fix(server): add missing validation decorator
2025-03-18 11:54:50 -05:00
Viharm
8723f585e0 chore(docs): clarify missing ':ro' tag in volume mount as a warning (#16877)
📝 Clarify missing ':ro' tag in volume mount as a warning

Changed description in comment of example docker compose file to clarify it as a warning that Immich may delete it, instead of sounding as if it is ok to delete.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 16:50:59 +00:00
Mert
9f46ba8eb4 fix(server): set pixel format when scaling and not tonemapping (#16932)
set pixel format when scaling and not tonemapping
2025-03-18 11:42:09 -05:00
Andreas
fe19f9ba84 fix(web): asset selection on memories page is broken (#16759)
* 16712: Proper intialisation of the memory store to avoid loading up duplicate object refs of the same asset.

* 16712: Add auth to memory mapping so isFavorite is actually return correctly from the server.

* 16712: Move logic that belongs in the store into the store.

* 16712: Cleanup.

* 16712: Fix init behaviour.

* 16712: Add comment.

* 16712: Make method private.

* 16712: Fix import.

* 16712: Fix format.

* 16712: Cleaner if/else and fix typo.

* fix: icon size mismatch

* 16712: Fixed up state machine managing memory playback:
* Updated to `Tween` (`tweened` was deprecated)
* Removed `resetPromise`. Setting progressController to 0 had the same effect, so not really sure why it was there?
* Removed the many duplicate places the `handleAction` method was called. Now we just called it on `afterNavigate` as well as when `galleryInView` or `$isViewing` state changes.

* 16712: Add aria tag.

* 16712: Fix memory player duplicate invocation bugs. Now we should only call 'reset' and 'play' once, after navigate/page load. This should hopefully fix all the various bugs around playback.

* 16712: Cleanup

* 16712: Cleanup

* 16712: Cleanup

* 16712: Cleanup

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-18 11:34:09 -05:00
renovate[bot]
b609f35841 chore(deps): update base-image to v20250318 (major) (#16950)
* chore(deps): update base-image to v20250318

* chore

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 11:07:11 -05:00
shenlong
9cf3b88f80 refactor(mobile): remove int user id (#16814)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* fix: migration

* pr feedback

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-18 11:05:37 -05:00
Min Idzelis
e96ffd43e7 feat: timeline performance (#16446)
* Squash - feature complete

* remove need to init assetstore

* More optimizations. No need to init. Fix tests

* lint

* add missing selector for e2e

* e2e selectors again

* Update: fully reactive store, some transitions, bugfixes

* merge fallout

* Test fallout

* safari quirk

* security

* lint

* lint

* Bug fixes

* lint/format

* accidental commit

* lock

* null check, more throttle

* revert long duration

* Fix intersection bounds

* Fix bugs in intersection calculation

* lint, tweak scrubber ui a tiny bit

* bugfix - deselecting asset doesnt work

* fix not loading bucket, scroll off-by-1 error, jsdoc, naming
2025-03-18 09:14:46 -05:00
shenlong
dd263b010c refactor(mobile): use user service methods (#16783)
* refactor: user entity

* chore: rebase fixes

* refactor(mobile): refactor to use user service methods

* fix: late init error

* fix: lint

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 08:32:33 -05:00
renovate[bot]
6c2985df26 chore(deps): update dependency @types/node to ^22.13.10 (#16944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 12:15:07 +01:00
Mert
2b37caba03 feat(ml): rocm (#16613)
* feat(ml): introduce support of onnxruntime-rocm for AMD GPU

* try mutex for algo cache

use OrtMutex

* bump versions, run on mich

use 3.12

use 1.19.2

* acquire lock before any changes can be made

guard algo benchmark results

mark mutex as mutable

re-add /bin/sh (?)

use 3.10

use 6.1.2

* use composite cache key

1.19.2

fix variable name

fix variable reference

aaaaaaaaaaaaaaaaaaaa

* bump deps

* disable algo caching

* fix gha

* try ubuntu runner

* actually fix the gha

* update patch

* skip mimalloc preload for rocm

* increase build threads

* increase timeout for rocm

* Revert "increase timeout for rocm"

This reverts commit 2c4452f5d132198ed381a7b262b4a5cab5114b5f.

* attempt migraphx

* set migraphx_home

* Revert "set migraphx_home"

This reverts commit c121d3e48754b3bce100636f8d666deec58a44b7.

* Revert "attempt migraphx"

This reverts commit 521f9fb72dbe506dc6cb8faeb6494817d87265c6.

* migraphx, take two

* bump rocm

* allow cpu

* try only targeting migraphx

* skip tests

* migraph 

* known issues

* target gfx900 and gfx1102

* mention `HSA_USE_SVM`

* update lock

* set device id for rocm

---------

Co-authored-by: Mehdi GHESH <mehdi.ghesh@hotmail.fr>
2025-03-17 21:08:19 +00:00
Jason Rasmussen
6a40aa83b7 refactor: better types for getList and getDeletedAfter (#16926) 2025-03-17 15:32:12 -04:00
Yaros
93907a89d8 fix(mobile): age calculation & formatting (#16833) 2025-03-17 13:51:17 -05:00
renovate[bot]
3ce8608662 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 2ef2373 (#16925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 14:07:09 -04:00
Abhinav Valecha
d0e283f687 feat(server): version command for immich-admin #9611 (#16924)
* feat(server): Add version command for immich-admin #9611

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-03-17 17:57:59 +00:00
Yaros
f8b40188e2 fix(mobile): change share icons for consistency (#16904) 2025-03-17 12:34:58 -05:00
renovate[bot]
9105e696bf chore(deps): pin github action dependencies (#16923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 17:25:14 +00:00
bo0tzz
0a8135dde4 fix: docker workflow for rknn (#16922)
* fix: specify gha runner for rknn

* fix: remove s from platforms

* fix: merge job for rknn
2025-03-17 18:13:43 +01:00
Jason Rasmussen
0bb95544e5 chore: pin github action digests (#16875) 2025-03-17 11:30:13 -05:00
Yoni Yang
14c3b99c0f feat(ml): ML on Rockchip NPUs (#15241) 2025-03-17 12:04:08 -04:00
shenlong
1e184a70f1 refactor: cleanup background service (#16855)
refactor: background service

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-17 08:48:22 -05:00
Jason Rasmussen
9a4495eb5b refactor: use more immich ui buttons (#16840) 2025-03-14 09:38:06 -04:00
Jason Rasmussen
8ad95b368b feat: use immich ui components for dialog component (#16839) 2025-03-14 09:37:56 -04:00
shenlong
b778a86c99 refactor(mobile): move user service to domain (#16782)
* refactor: user entity

* chore: rebase fixes

* refactor(mobile): move user service to domain

* fix: timeline not visible on album selection page

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-13 22:20:26 -05:00
Jason Rasmussen
a65ce2ac55 refactor: immich logo assets (#16850) 2025-03-13 18:05:08 -04:00
Jason Rasmussen
f69d7e7bad chore: web cleanup (#16849) 2025-03-13 18:04:21 -04:00
ExceptionsOccur
858d1e9d9b fix(mobile): back gesture in asset selection page from an album (#16449)
* fix(mobile): the page for adding photos to the album cannot be navigated back using gestures #16409

* First-time return gesture adds the feature to cancel all current selections

---------

Co-authored-by: ExceptionsOccur <yuyu.tao@foxmail.com>
2025-03-13 11:37:05 +05:30
renovate[bot]
a1a61f19eb chore(deps): update typescript-projects (#16795)
* chore(deps): update typescript-projects

* fix: aria

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-12 23:20:26 +01:00
Jason Rasmussen
996ffed5eb fix: immich ui toggles and switches (#16834)
* fix: immich ui toggles and switches

* Update web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte

Co-authored-by: Alex <alex.tran1502@gmail.com>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 16:25:27 -05:00
Jason Rasmussen
2d7a94ce23 feat: better library rename UX (#16837) 2025-03-12 16:00:16 -05:00
Jason Rasmussen
72a7be26c0 refactor: use immich/ui button component in user settings (#16836) 2025-03-12 15:56:55 -05:00
shenlong
77fad86b82 chore(mobile): bump dependency versions (#16823)
* chore(mobile): bump dep version

* reorganize files

* sort

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 14:33:11 +00:00
Yaros
52d90a8280 fix(web): fixed formatting of video length (#16829)
* fix(web): fixed formatting of video time

* shortened the condition
2025-03-12 09:18:43 -05:00
shenlong
d1c8fe5303 refactor: user entity (#16655)
* refactor: user entity

* fix: add users to album & user profile url

* chore: rebase fixes

* generate files

* fix(mobile): timeline not reset on login

* fix: test stub

* refactor: rename user model (#16813)

* refactor: rename user model

* simplify import

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>

* chore: generate files

* fix: use getAllAccessible instead of getAll

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 08:56:56 -05:00
Snowknight26
a75718ce99 fix(web): update search results when searching from info panel (#16729)
* fix(web): update search results when searching from info panel

* Prevent double search when using search bar

* Format/lint

* Fix infinite loading on intersect

* Remove redundant function
2025-03-11 17:23:25 -05:00
Nicholas Flamy
d72d715f6b fix(docs): logo not loading dark theme variant in production (#16820)
fix logo not loading dark theme variant in production
2025-03-11 17:13:25 -05:00
Jason Rasmussen
16fd19994b refactor: use factory and kysely types for partner repository (#16812) 2025-03-11 16:29:56 -04:00
Mert
83ed03920e fix(ml): dev environment dependencies (#16815)
use /opt/venv
2025-03-11 13:39:33 -05:00
965 changed files with 35852 additions and 21687 deletions

View File

@@ -1,4 +1,4 @@
ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:9791f4aa527774bc370c6bd2f6705ce5a686f1e6f204badd8dfaacce28c631ae
ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:a20b8a3538313487ac9266875bbf733e544c1aa2091df2bb99ab592a6d4f7399
FROM ${BASEIMAGE}
# Flutter SDK

3
.gitattributes vendored
View File

@@ -6,6 +6,9 @@ mobile/openapi/**/*.dart linguist-generated=true
mobile/lib/**/*.g.dart -diff -merge
mobile/lib/**/*.g.dart linguist-generated=true
mobile/lib/**/*.drift.dart -diff -merge
mobile/lib/**/*.drift.dart linguist-generated=true
open-api/typescript-sdk/fetch-client.ts -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true

1
.github/.nvmrc vendored Normal file
View File

@@ -0,0 +1 @@
22.14.0

View File

@@ -1,5 +1,5 @@
title: "[Feature] feature-name-goes-here"
labels: ["feature"]
title: '[Feature] feature-name-goes-here'
labels: ['feature']
body:
- type: markdown
@@ -13,7 +13,7 @@ body:
attributes:
label: I have searched the existing feature requests, both open and closed, to make sure this is not a duplicate request.
options:
- label: "Yes"
- label: 'Yes'
required: true
- type: textarea

View File

@@ -5,7 +5,7 @@ body:
attributes:
label: I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.
options:
- label: "Yes"
- label: 'Yes'
required: true
- type: markdown
@@ -84,7 +84,7 @@ body:
id: repro
attributes:
label: Reproduction steps
description: "How do you trigger this bug? Please walk us through it step by step."
description: 'How do you trigger this bug? Please walk us through it step by step.'
value: |
1.
2.
@@ -97,12 +97,13 @@ body:
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant logs below. (code formatting is
description:
Please copy and paste any relevant logs below. (code formatting is
enabled, no need for backticks)
render: shell
validations:
required: false
- type: textarea
attributes:
label: Additional information

28
.github/package-lock.json generated vendored Normal file
View File

@@ -0,0 +1,28 @@
{
"name": ".github",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"devDependencies": {
"prettier": "^3.5.3"
}
},
"node_modules/prettier": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
}
}
}

9
.github/package.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"scripts": {
"format": "prettier --check .",
"format:fix": "prettier --write ."
},
"devDependencies": {
"prettier": "^3.5.3"
}
}

66
.github/release.yml vendored
View File

@@ -1,33 +1,33 @@
changelog:
categories:
- title: 🚨 Breaking Changes
labels:
- changelog:breaking-change
- title: 🫥 Deprecated Changes
labels:
- changelog:deprecated
- title: 🔒 Security
labels:
- changelog:security
- title: 🚀 Features
labels:
- changelog:feature
- title: 🌟 Enhancements
labels:
- changelog:enhancement
- title: 🐛 Bug fixes
labels:
- changelog:bugfix
- title: 📚 Documentation
labels:
- changelog:documentation
- title: 🌐 Translations
labels:
- changelog:translation
changelog:
categories:
- title: 🚨 Breaking Changes
labels:
- changelog:breaking-change
- title: 🫥 Deprecated Changes
labels:
- changelog:deprecated
- title: 🔒 Security
labels:
- changelog:security
- title: 🚀 Features
labels:
- changelog:feature
- title: 🌟 Enhancements
labels:
- changelog:enhancement
- title: 🐛 Bug fixes
labels:
- changelog:bugfix
- title: 📚 Documentation
labels:
- changelog:documentation
- title: 🌐 Translations
labels:
- changelog:translation

View File

@@ -22,9 +22,9 @@ jobs:
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with:
filters: |
mobile:
@@ -51,18 +51,18 @@ jobs:
ref="${input_ref:-$github_ref}"
echo "ref=$ref" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: ${{ steps.get-ref.outputs.ref }}
- uses: actions/setup-java@v4
- uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4
with:
distribution: 'zulu'
java-version: '17'
cache: 'gradle'
- name: Setup Flutter SDK
uses: subosito/flutter-action@v2
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
@@ -89,7 +89,7 @@ jobs:
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
- name: Publish Android Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: release-apk-signed
path: mobile/build/app/outputs/flutter-apk/*.apk

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cleanup
run: |

View File

@@ -6,7 +6,6 @@ on:
- 'cli/**'
- '.github/workflows/cli.yml'
pull_request:
branches: [main]
paths:
- 'cli/**'
- '.github/workflows/cli.yml'
@@ -29,9 +28,9 @@ jobs:
working-directory: ./cli
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './cli/.nvmrc'
registry-url: 'https://registry.npmjs.org'
@@ -53,16 +52,16 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.6.0
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.10.0
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
@@ -77,7 +76,7 @@ jobs:
- name: Generate docker image tags
id: metadata
uses: docker/metadata-action@v5
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
with:
flavor: |
latest=false
@@ -88,7 +87,7 @@ jobs:
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
- name: Build and push image
uses: docker/build-push-action@v6.15.0
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
file: cli/Dockerfile
platforms: linux/amd64,linux/arm64

View File

@@ -9,14 +9,14 @@
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
name: 'CodeQL'
on:
push:
branches: [ "main" ]
branches: ['main']
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
branches: ['main']
schedule:
- cron: '20 13 * * 1'
@@ -36,43 +36,42 @@ jobs:
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
language: ['javascript', 'python']
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@45775bd8235c68ba998cffa5171334d58593da47 # v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@45775bd8235c68ba998cffa5171334d58593da47 # v3
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@45775bd8235c68ba998cffa5171334d58593da47 # v3
with:
category: '/language:${{matrix.language}}'

View File

@@ -23,9 +23,9 @@ jobs:
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with:
filters: |
server:
@@ -49,23 +49,23 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
suffix: ["", "-cuda", "-openvino", "-armnn"]
suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Re-tag image
run: |
REGISTRY_NAME="ghcr.io"
REPOSITORY=${{ github.repository_owner }}/immich-machine-learning
TAG_OLD=main${{ matrix.suffix }}
TAG_PR=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
TAG_COMMIT=commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_PR $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_COMMIT $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
- name: Login to GitHub Container Registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Re-tag image
run: |
REGISTRY_NAME="ghcr.io"
REPOSITORY=${{ github.repository_owner }}/immich-machine-learning
TAG_OLD=main${{ matrix.suffix }}
TAG_PR=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
TAG_COMMIT=commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_PR $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_COMMIT $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
retag_server:
name: Re-Tag Server
@@ -74,10 +74,10 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
suffix: [""]
suffix: ['']
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
@@ -120,6 +120,11 @@ jobs:
device: cuda
suffix: -cuda
- platform: linux/amd64
runner: mich
device: rocm
suffix: -rocm
- platform: linux/amd64
runner: ubuntu-latest
device: openvino
@@ -130,6 +135,11 @@ jobs:
device: armnn
suffix: -armnn
- platform: linux/arm64
runner: ubuntu-24.04-arm
device: rknn
suffix: -rknn
steps:
- name: Prepare
run: |
@@ -137,13 +147,13 @@ jobs:
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.10.0
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
@@ -170,7 +180,7 @@ jobs:
- name: Build and push image
id: build
uses: docker/build-push-action@v6.15.0
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
context: ${{ env.context }}
file: ${{ env.file }}
@@ -195,7 +205,7 @@ jobs:
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ml-digests-${{ matrix.device }}-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
@@ -215,15 +225,19 @@ jobs:
- device: cpu
- device: cuda
suffix: -cuda
- device: rocm
suffix: -rocm
- device: openvino
suffix: -openvino
- device: armnn
suffix: -armnn
- device: rknn
suffix: -rknn
needs:
- build_and_push_ml
steps:
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with:
path: ${{ runner.temp }}/digests
pattern: ml-digests-${{ matrix.device }}-*
@@ -231,26 +245,26 @@ jobs:
- name: Login to Docker Hub
if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
- name: Generate docker image tags
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
env:
DOCKER_METADATA_PR_HEAD_SHA: "true"
DOCKER_METADATA_PR_HEAD_SHA: 'true'
with:
flavor: |
# Disable latest tag
@@ -301,13 +315,13 @@ jobs:
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
@@ -334,7 +348,7 @@ jobs:
- name: Build and push image
id: build
uses: docker/build-push-action@v6.15.0
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
context: ${{ env.context }}
file: ${{ env.file }}
@@ -359,7 +373,7 @@ jobs:
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: server-digests-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
@@ -377,7 +391,7 @@ jobs:
- build_and_push_server
steps:
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with:
path: ${{ runner.temp }}/digests
pattern: server-digests-*
@@ -385,26 +399,26 @@ jobs:
- name: Login to Docker Hub
if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR
uses: docker/login-action@v3
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
- name: Generate docker image tags
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
env:
DOCKER_METADATA_PR_HEAD_SHA: "true"
DOCKER_METADATA_PR_HEAD_SHA: 'true'
with:
flavor: |
# Disable latest tag

View File

@@ -3,7 +3,6 @@ on:
push:
branches: [main]
pull_request:
branches: [main]
release:
types: [published]
@@ -18,9 +17,9 @@ jobs:
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with:
filters: |
docs:
@@ -42,10 +41,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './docs/.nvmrc'
@@ -59,7 +58,7 @@ jobs:
run: npm run build
- name: Upload build output
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: docs-build-output
path: docs/build/

View File

@@ -1,7 +1,7 @@
name: Docs deploy
on:
workflow_run:
workflows: ["Docs build"]
workflows: ['Docs build']
types:
- completed
@@ -17,7 +17,7 @@ jobs:
run: echo 'The triggering workflow did not succeed' && exit 1
- name: Get artifact
id: get-artifact
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
@@ -35,7 +35,7 @@ jobs:
return { found: true, id: matchArtifact.id };
- name: Determine deploy parameters
id: parameters
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const eventType = context.payload.workflow_run.event;
@@ -98,11 +98,11 @@ jobs:
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Load parameters
id: parameters
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const json = `${{ needs.checks.outputs.parameters }}`;
@@ -115,7 +115,7 @@ jobs:
echo "Starting docs deployment for ${{ steps.parameters.outputs.event }} ${{ steps.parameters.outputs.name }}"
- name: Download artifact
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
let artifact = ${{ needs.checks.outputs.artifact }};
@@ -138,12 +138,12 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with:
tg_version: "0.58.12"
tofu_version: "1.7.1"
tg_dir: "deployment/modules/cloudflare/docs"
tg_command: "apply"
tg_version: '0.58.12'
tofu_version: '1.7.1'
tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: 'apply'
- name: Deploy Docs Subdomain Output
id: docs-output
@@ -153,12 +153,12 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with:
tg_version: "0.58.12"
tofu_version: "1.7.1"
tg_dir: "deployment/modules/cloudflare/docs"
tg_command: "output -json"
tg_version: '0.58.12'
tofu_version: '1.7.1'
tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: 'output -json'
- name: Output Cleaning
id: clean
@@ -167,13 +167,13 @@ jobs:
echo "output=$TG_OUT" >> $GITHUB_OUTPUT
- name: Publish to Cloudflare Pages
uses: cloudflare/pages-action@v1
uses: cloudflare/pages-action@f0a1cd58cd66095dee69bfa18fa5efd1dde93bca # v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: ${{ fromJson(steps.clean.outputs.output).pages_project_name.value }}
workingDirectory: "docs"
directory: "build"
workingDirectory: 'docs'
directory: 'build'
branch: ${{ steps.parameters.outputs.name }}
wranglerVersion: '3'
@@ -184,7 +184,7 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with:
tg_version: '0.58.12'
tofu_version: '1.7.1'
@@ -192,7 +192,7 @@ jobs:
tg_command: 'apply'
- name: Comment
uses: actions-cool/maintain-one-comment@v3
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3
if: ${{ steps.parameters.outputs.event == 'pr' }}
with:
number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }}

View File

@@ -9,24 +9,24 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Destroy Docs Subdomain
env:
TF_VAR_prefix_name: "pr-${{ github.event.number }}"
TF_VAR_prefix_event_type: "pr"
TF_VAR_prefix_name: 'pr-${{ github.event.number }}'
TF_VAR_prefix_event_type: 'pr'
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with:
tg_version: "0.58.12"
tofu_version: "1.7.1"
tg_dir: "deployment/modules/cloudflare/docs"
tg_command: "destroy -refresh=false"
tg_version: '0.58.12'
tofu_version: '1.7.1'
tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: 'destroy -refresh=false'
- name: Comment
uses: actions-cool/maintain-one-comment@v3
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3
with:
number: ${{ github.event.number }}
delete: true

View File

@@ -13,19 +13,19 @@ jobs:
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v1
uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2
with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: 'Checkout'
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ steps.generate-token.outputs.token }}
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './server/.nvmrc'
@@ -33,13 +33,13 @@ jobs:
run: make install-all && make format-all
- name: Commit and push
uses: EndBug/add-and-commit@v9
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
with:
default_author: github_actions
message: 'chore: fix formatting'
- name: Remove label
uses: actions/github-script@v7
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
if: always()
with:
script: |
@@ -49,4 +49,3 @@ jobs:
repo: context.repo.repo,
name: 'fix:formatting'
})

View File

@@ -12,11 +12,11 @@ jobs:
pull-requests: write
steps:
- name: Require PR to have a changelog label
uses: mheap/github-action-required-labels@v5
uses: mheap/github-action-required-labels@388fd6af37b34cdfe5a23b37060e763217e58b03 # v5
with:
mode: exactly
count: 1
use_regex: true
labels: "changelog:.*"
labels: 'changelog:.*'
add_comment: true
message: "Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label."
message: 'Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label.'

View File

@@ -1,6 +1,6 @@
name: "Pull Request Labeler"
name: 'Pull Request Labeler'
on:
- pull_request_target
- pull_request_target
jobs:
labeler:
@@ -9,4 +9,4 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5

View File

@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: PR Conventional Commit Validation
uses: ytanikin/PRConventionalCommits@1.3.0
uses: ytanikin/PRConventionalCommits@b628c5a234cc32513014b7bfdd1e47b532124d98 # 1.3.0
with:
task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]'
add_label: 'false'

View File

@@ -31,25 +31,25 @@ jobs:
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v1
uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2
with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
token: ${{ steps.generate-token.outputs.token }}
- name: Install uv
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
- name: Bump version
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
- name: Commit and tag
id: push-tag
uses: EndBug/add-and-commit@v9
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
with:
default_author: github_actions
message: 'chore: version ${{ env.IMMICH_VERSION }}'
@@ -70,23 +70,23 @@ jobs:
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v1
uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2
with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
token: ${{ steps.generate-token.outputs.token }}
- name: Download APK
uses: actions/download-artifact@v4
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with:
name: release-apk-signed
- name: Create draft release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2
with:
draft: true
tag_name: ${{ env.IMMICH_VERSION }}

View File

@@ -11,10 +11,10 @@ jobs:
permissions:
pull-requests: write
steps:
- uses: mshick/add-pr-comment@v2
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2
with:
message-id: "preview-status"
message: "Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/"
message-id: 'preview-status'
message: 'Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/'
remove-label:
runs-on: ubuntu-latest
@@ -22,7 +22,7 @@ jobs:
permissions:
pull-requests: write
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
github.rest.issues.removeLabel({

View File

@@ -15,9 +15,9 @@ jobs:
run:
working-directory: ./open-api/typescript-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './open-api/typescript-sdk/.nvmrc'
registry-url: 'https://registry.npmjs.org'

View File

@@ -16,9 +16,9 @@ jobs:
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with:
filters: |
mobile:
@@ -38,10 +38,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Flutter SDK
uses: subosito/flutter-action@v2
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
@@ -55,7 +55,7 @@ jobs:
working-directory: ./mobile
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files
with:
files: |

View File

@@ -21,11 +21,12 @@ jobs:
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_e2e_web: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_e2e_server_cli: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.server == 'true' || steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_.github: ${{ steps.found_paths.outputs['.github'] == 'true' || steps.should_force.outputs.should_force == 'true' }} # redundant to have should_force but if someone changes the trigger then this won't have to be changed
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with:
filters: |
web:
@@ -45,6 +46,8 @@ jobs:
- 'machine-learning/**'
workflow:
- '.github/workflows/test.yml'
.github:
- '.github/**'
- name: Check if we should force jobs to run
id: should_force
@@ -61,10 +64,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './server/.nvmrc'
@@ -98,10 +101,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './cli/.nvmrc'
@@ -139,10 +142,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './cli/.nvmrc'
@@ -173,10 +176,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './web/.nvmrc'
@@ -218,10 +221,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './e2e/.nvmrc'
@@ -257,10 +260,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './server/.nvmrc'
@@ -282,12 +285,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
submodules: 'recursive'
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './e2e/.nvmrc'
@@ -324,12 +327,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
submodules: 'recursive'
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './e2e/.nvmrc'
@@ -360,9 +363,9 @@ jobs:
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Flutter SDK
uses: subosito/flutter-action@v2
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
@@ -379,10 +382,10 @@ jobs:
run:
working-directory: ./machine-learning
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install uv
uses: astral-sh/setup-uv@v5
- uses: actions/setup-python@v5
uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
# with:
# python-version: 3.11
@@ -392,22 +395,47 @@ jobs:
uv sync --extra cpu
- name: Lint with ruff
run: |
uv run ruff check --output-format=github app export
uv run ruff check --output-format=github immich_ml
- name: Check black formatting
run: |
uv run black --check app export
uv run black --check immich_ml
- name: Run mypy type checking
run: |
uv run mypy --strict app/
uv run mypy --strict immich_ml/
- name: Run tests and coverage
run: |
uv run pytest app --cov=app --cov-report term-missing
uv run pytest --cov=immich_ml --cov-report term-missing
github-files-formatting:
name: .github Files Formatting
needs: pre-job
if: ${{ needs.pre-job.outputs['should_run_.github'] == 'true' }}
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./.github
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './.github/.nvmrc'
- name: Run npm install
run: npm ci
- name: Run formatter
run: npm run format
if: ${{ !cancelled() }}
shellcheck:
name: ShellCheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
with:
@@ -421,10 +449,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './server/.nvmrc'
@@ -438,7 +466,7 @@ jobs:
run: make open-api
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files
with:
files: |
@@ -476,10 +504,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version-file: './server/.nvmrc'
@@ -490,27 +518,27 @@ jobs:
run: npm run build
- name: Run existing migrations
run: npm run typeorm:migrations:run
run: npm run migrations:run
- name: Test npm run schema:reset command works
run: npm run typeorm:schema:reset
- name: Generate new migrations
continue-on-error: true
run: npm run typeorm:migrations:generate ./src/migrations/TestMigration
run: npm run migrations:generate TestMigration
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files
with:
files: |
server/src/migrations/
server/src
- name: Verify migration files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
run: |
echo "ERROR: Generated migration files not up to date!"
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
cat ./src/migrations/*-TestMigration.ts
cat ./src/*-TestMigration.ts
exit 1
- name: Run SQL generation
@@ -519,7 +547,7 @@ jobs:
DB_URL: postgres://postgres:postgres@localhost:5432/immich
- name: Find file changes
uses: tj-actions/verify-changed-files@v20
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-sql-files
with:
files: |

View File

@@ -11,22 +11,22 @@ jobs:
should_run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with:
filters: |
i18n:
- 'i18n/!(en)**\.json'
- name: Debug
run: |
echo "Should run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}"
echo "Found i18n paths: ${{ steps.found_paths.outputs.i18n }}"
echo "Head ref: ${{ github.head_ref }}"
echo "Should run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}"
echo "Found i18n paths: ${{ steps.found_paths.outputs.i18n }}"
echo "Head ref: ${{ github.head_ref }}"
enforce-lock:
name: Check Weblate Lock
needs: [ pre-job ]
needs: [pre-job]
runs-on: ubuntu-latest
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
steps:
@@ -36,7 +36,7 @@ jobs:
exit 1
fi
- name: Find Pull Request
uses: juliangruber/find-pull-request-action@v1
uses: juliangruber/find-pull-request-action@48b6133aa6c826f267ebd33aa2d29470f9d9e7d0 # v1
id: find-pr
with:
branch: chore/translations
@@ -45,7 +45,7 @@ jobs:
run: exit 1
success-check-lock:
name: Weblate Lock Check Success
needs: [ enforce-lock ]
needs: [enforce-lock]
runs-on: ubuntu-latest
if: always()
steps:

View File

@@ -39,6 +39,7 @@
],
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"*.ts": "${capture}.spec.ts,${capture}.mock.ts"
"*.ts": "${capture}.spec.ts,${capture}.mock.ts",
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart"
}
}

View File

@@ -39,7 +39,7 @@ attach-server:
renovate:
LOG_LEVEL=debug npx renovate --platform=local --repository-cache=reset
MODULES = e2e server web cli sdk docs
MODULES = e2e server web cli sdk docs .github
audit-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix
@@ -77,14 +77,14 @@ test-medium:
test-medium-dev:
docker exec -it immich_server /bin/sh -c "npm run test:medium"
build-all: $(foreach M,$(filter-out e2e,$(MODULES)),build-$M) ;
build-all: $(foreach M,$(filter-out e2e .github,$(MODULES)),build-$M) ;
install-all: $(foreach M,$(MODULES),install-$M) ;
check-all: $(foreach M,$(filter-out sdk cli docs,$(MODULES)),check-$M) ;
lint-all: $(foreach M,$(filter-out sdk docs,$(MODULES)),lint-$M) ;
check-all: $(foreach M,$(filter-out sdk cli docs .github,$(MODULES)),check-$M) ;
lint-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),lint-$M) ;
format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ;
audit-all: $(foreach M,$(MODULES),audit-$M) ;
hygiene-all: lint-all format-all check-all sql audit-all;
test-all: $(foreach M,$(filter-out sdk docs,$(MODULES)),test-$M) ;
test-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),test-$M) ;
clean:
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

View File

@@ -61,9 +61,7 @@
## Demo
Access the demo [here](https://demo.immich.app). The demo is running on a Free-tier Oracle VM in Amsterdam with a 2.4Ghz quad-core ARM64 CPU and 24GB RAM.
For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoint URL`
Access the demo [here](https://demo.immich.app). For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoint URL`.
### Login credentials
@@ -104,7 +102,7 @@ For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoi
| Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes |
| Tags | No | Yes |
| Folder View | No | Yes |
| Folder View | Yes | Yes |
## Translations

View File

@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [
export default typescriptEslint.config([
eslintPluginUnicorn.configs.recommended,
eslintPluginPrettierRecommended,
js.configs.recommended,
typescriptEslint.configs.recommended,
{
ignores: ['eslint.config.mjs', 'dist'],
},
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: {
globals: {
...globals.node,
},
parser: tsParser,
parser: typescriptEslint.parser,
ecmaVersion: 5,
sourceType: 'module',
@@ -58,4 +48,4 @@ export default [
'object-shorthand': ['error', 'always'],
},
},
];
]);

1057
cli/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.2.53",
"version": "2.2.61",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",
@@ -21,9 +21,7 @@
"@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1",
"@types/node": "^22.13.9",
"@typescript-eslint/eslint-plugin": "^8.15.0",
"@typescript-eslint/parser": "^8.15.0",
"@types/node": "^22.14.0",
"@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0",
"cli-progress": "^3.12.0",
@@ -31,12 +29,13 @@
"eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^56.0.1",
"eslint-plugin-unicorn": "^57.0.0",
"globals": "^16.0.0",
"mock-fs": "^5.2.0",
"prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0",
"typescript": "^5.3.3",
"typescript-eslint": "^8.28.0",
"vite": "^6.0.0",
"vite-tsconfig-paths": "^5.0.0",
"vitest": "^3.0.0",

View File

@@ -95,12 +95,12 @@ services:
image: immich-machine-learning-dev:latest
# extends:
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
build:
context: ../machine-learning
dockerfile: Dockerfile
args:
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
- DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
ports:
- 3003:3003
volumes:
@@ -116,7 +116,7 @@ services:
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1
healthcheck:
test: redis-cli ping || exit 1

View File

@@ -38,12 +38,12 @@ services:
image: immich-machine-learning:latest
# extends:
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
build:
context: ../machine-learning
dockerfile: Dockerfile
args:
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
- DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
ports:
- 3003:3003
volumes:
@@ -56,7 +56,7 @@ services:
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1
healthcheck:
test: redis-cli ping || exit 1
restart: always
@@ -77,22 +77,12 @@ services:
- 5432:5432
healthcheck:
test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
echo "checksum failure count is $$Chksum";
[ "$$Chksum" = '0' ] || exit 1
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: >-
postgres
-c shared_preload_libraries=vectors.so
-c 'search_path="$$user", public, vectors'
-c logging_collector=on
-c max_wal_size=2GB
-c shared_buffers=512MB
-c wal_compression=on
postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
restart: always
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
@@ -100,7 +90,7 @@ services:
container_name: immich_prometheus
ports:
- 9090:9090
image: prom/prometheus@sha256:6927e0919a144aa7616fd0137d4816816d42f6b816de3af269ab065250859a62
image: prom/prometheus@sha256:502ad90314c7485892ce696cb14a99fceab9fc27af29f4b427f41bd39701a199
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
@@ -109,10 +99,10 @@ services:
# add data source for http://immich-prometheus:9090 to get started
immich-grafana:
container_name: immich_grafana
command: ['./run.sh', '-disable-reporting']
command: [ './run.sh', '-disable-reporting' ]
ports:
- 3000:3000
image: grafana/grafana:11.5.2-ubuntu@sha256:8b5858c447e06fd7a89006b562ba7bba7c4d5813600c7982374c41852adefaeb
image: grafana/grafana:11.6.0-ubuntu@sha256:fd8fa48213c624e1a95122f1d93abbf1cf1cbe85fc73212c1e599dbd76c63ff8
volumes:
- grafana-data:/var/lib/grafana

View File

@@ -33,12 +33,12 @@ services:
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
@@ -49,7 +49,7 @@ services:
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1
healthcheck:
test: redis-cli ping || exit 1
restart: always
@@ -67,22 +67,12 @@ services:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
echo "checksum failure count is $$Chksum";
[ "$$Chksum" = '0' ] || exit 1
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: >-
postgres
-c shared_preload_libraries=vectors.so
-c 'search_path="$$user", public, vectors'
-c logging_collector=on
-c max_wal_size=2GB
-c shared_buffers=512MB
-c wal_compression=on
postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
restart: always
volumes:

View File

@@ -2,7 +2,8 @@
# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List

View File

@@ -13,6 +13,13 @@ services:
volumes:
- /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver)
- /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required)
rknn:
security_opt:
- systempaths=unconfined
- apparmor=unconfined
devices:
- /dev/dri:/dev/dri
cpu: {}
@@ -26,6 +33,13 @@ services:
capabilities:
- gpu
rocm:
group_add:
- video
devices:
- /dev/dri:/dev/dri
- /dev/kfd:/dev/kfd
openvino:
device_cgroup_rules:
- 'c 189:* rmw'

View File

@@ -262,7 +262,7 @@ No, this is not supported. Only models listed in the [Hugging Face][huggingface]
### I want to be able to search in other languages besides English. How can I do that?
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-model) for instructions.
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-models) for instructions.
### Does Immich support Facial Recognition for videos?

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -11,6 +11,7 @@ The `immich-server` docker image comes preinstalled with an administrative CLI (
| `enable-oauth-login` | Enable OAuth login |
| `disable-oauth-login` | Disable OAuth login |
| `list-users` | List Immich users |
| `version` | Print Immich version |
## How to run a command
@@ -80,3 +81,10 @@ immich-admin list-users
}
]
```
Print Immich Version
```
immich-admin version
v1.129.0
```

View File

@@ -31,7 +31,7 @@ Admin can send a welcome email if the Email option is set, you can learn here ho
Admin can specify the storage quota for the user as the instance's admin; once the limit is reached, the user won't be able to upload to the instance anymore.
In order to select a storage quota, click on the pencil icon and enter the storage quota in GiB. You can choose an unlimited quota using the value 0 (default).
In order to select a storage quota, click on the pencil icon and enter the storage quota in GiB. You can choose an unlimited quota by leaving it empty (default).
:::tip
The system administrator can see the usage quota percentage of all users in Server Stats page.

View File

@@ -63,6 +63,13 @@ If you only want to do web development connected to an existing, remote backend,
IMMICH_SERVER_URL=https://demo.immich.app/ npm run dev
```
If you're using PowerShell on Windows you may need to set the env var separately like so:
```powershell
$env:IMMICH_SERVER_URL = "https://demo.immich.app/"
npm run dev
```
#### `@immich/ui`
To see local changes to `@immich/ui` in Immich, do the following:

View File

@@ -112,7 +112,7 @@ You begin by authenticating to your Immich server. For instance:
immich login http://192.168.1.216:2283/api HFEJ38DNSDUEG
```
This will store your credentials in a `auth.yml` file in the configuration directory which defaults to `~/.config/`. The directory can be set with the `-d` option or the environment variable `IMMICH_CONFIG_DIR`. Please keep the file secure, either by performing the logout command after you are done, or deleting it manually.
This will store your credentials in a `auth.yml` file in the configuration directory which defaults to `~/.config/immich/`. The directory can be set with the `-d` option or the environment variable `IMMICH_CONFIG_DIR`. Please keep the file secure, either by performing the logout command after you are done, or deleting it manually.
Once you are authenticated, you can upload assets to your Immich server.

View File

Before

Width:  |  Height:  |  Size: 4.9 MiB

After

Width:  |  Height:  |  Size: 4.9 MiB

View File

@@ -95,7 +95,7 @@ The `immich-server` container will need access to the gallery. Modify your docke
+ - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro
+ - /home/user/old-pics:/mnt/media/old-pics:ro
+ - /mnt/media/videos:/mnt/media/videos:ro
+ - /mnt/media/videos2:/mnt/media/videos2 # the files in this folder can be deleted, as it does not end with :ro
+ - /mnt/media/videos2:/mnt/media/videos2 # WARNING: Immich will be able to delete the files in this folder, as it does not end with :ro
+ - "C:/Users/user_name/Desktop/my media:/mnt/media/my-media:ro" # import path in Windows system.
```

View File

@@ -11,7 +11,9 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- ARM NN (Mali)
- CUDA (NVIDIA GPUs with [compute capability](https://developer.nvidia.com/cuda-gpus) 5.2 or higher)
- ROCm (AMD GPUs)
- OpenVINO (Intel GPUs such as Iris Xe and Arc)
- RKNN (Rockchip)
## Limitations
@@ -19,6 +21,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- Only Linux and Windows (through WSL2) servers are supported.
- ARM NN is only supported on devices with Mali GPUs. Other Arm devices are not supported.
- Some models may not be compatible with certain backends. CUDA is the most reliable.
- Search latency isn't improved by ARM NN due to model compatibility issues preventing its use. However, smart search jobs do make use of ARM NN.
## Prerequisites
@@ -33,6 +36,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- The `hwaccel.ml.yml` file assumes the path to it is `/usr/lib/libmali.so`, so update accordingly if it is elsewhere
- The `hwaccel.ml.yml` file assumes an additional file `/lib/firmware/mali_csffw.bin`, so update accordingly if your device's driver does not require this file
- Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for ARM NN specific settings
- In particular, the `MACHINE_LEARNING_ANN_FP16_TURBO` can significantly improve performance at the cost of very slightly lower accuracy
#### CUDA
@@ -41,22 +45,38 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- The installed driver must be >= 535 (it must support CUDA 12.2).
- On Linux (except for WSL2), you also need to have [NVIDIA Container Toolkit][nvct] installed.
#### ROCm
- The GPU must be supported by ROCm. If it isn't officially supported, you can attempt to use the `HSA_OVERRIDE_GFX_VERSION` environmental variable: `HSA_OVERRIDE_GFX_VERSION=<a supported version, e.g. 10.3.0>`. If this doesn't work, you might need to also set `HSA_USE_SVM=0`.
- The ROCm image is quite large and requires at least 35GiB of free disk space. However, pulling later updates to the service through Docker will generally only amount to a few hundred megabytes as the rest will be cached.
- This backend is new and may experience some issues. For example, GPU power consumption can be higher than usual after running inference, even if the machine learning service is idle. In this case, it will only go back to normal after being idle for 5 minutes (configurable with the [MACHINE_LEARNING_MODEL_TTL](/docs/install/environment-variables) setting).
#### OpenVINO
- Integrated GPUs are more likely to experience issues than discrete GPUs, especially for older processors or servers with low RAM.
- Ensure the server's kernel version is new enough to use the device for hardware accceleration.
- Expect higher RAM usage when using OpenVINO compared to CPU processing.
#### RKNN
- You must have a supported Rockchip SoC: only RK3566, RK3568, RK3576 and RK3588 are supported at this moment.
- Make sure you have the appropriate linux kernel driver installed
- This is usually pre-installed on the device vendor's Linux images
- RKNPU driver V0.9.8 or later must be available in the host server
- You may confirm this by running `cat /sys/kernel/debug/rknpu/version` to check the version
- Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for RKNN specific settings
- In particular, setting `MACHINE_LEARNING_RKNN_THREADS` to 2 or 3 can _dramatically_ improve performance for RK3576 and RK3588 compared to the default of 1, at the expense of multiplying the amount of RAM each model uses by that amount.
## Setup
1. If you do not already have it, download the latest [`hwaccel.ml.yml`][hw-file] file and ensure it's in the same folder as the `docker-compose.yml`.
2. In the `docker-compose.yml` under `immich-machine-learning`, uncomment the `extends` section and change `cpu` to the appropriate backend.
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, openvino] to the `image` section's tag at the end of the line.
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, rocm, openvino, rknn] to the `image` section's tag at the end of the line.
4. Redeploy the `immich-machine-learning` container with these updated settings.
### Confirming Device Usage
You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel and `intel_gpu_top` for Intel.
You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel, `intel_gpu_top` for Intel, and `radeontop` for AMD.
You can also check the logs of the `immich-machine-learning` container. When a Smart Search or Face Detection job begins, or when you search with text in Immich, you should either see a log for `Available ORT providers` containing the relevant provider (e.g. `CUDAExecutionProvider` in the case of CUDA), or a `Loaded ANN model` log entry without errors in the case of ARM NN.
@@ -127,3 +147,12 @@ Note that you should increase job concurrencies to increase overall utilization
- If you encounter an error when a model is running, try a different model to see if the issue is model-specific.
- You may want to increase concurrency past the default for higher utilization. However, keep in mind that this will also increase VRAM consumption.
- Larger models benefit more from hardware acceleration, if you have the VRAM for them.
- Compared to ARM NN, RKNPU has:
- Wider model support (including for search, which ARM NN does not accelerate)
- Less heat generation
- Very slightly lower accuracy (RKNPU always uses FP16, while ARM NN by default uses higher precision FP32 unless `MACHINE_LEARNING_ANN_FP16_TURBO` is enabled)
- Varying speed (tested on RK3588):
- If `MACHINE_LEARNING_RKNN_THREADS` is at the default of 1, RKNPU will have substantially lower throughput for ML jobs than ARM NN in most cases, but similar latency (such as when searching)
- If `MACHINE_LEARNING_RKNN_THREADS` is set to 3, it will be somewhat faster than ARM NN at FP32, but somewhat slower than ARM NN if `MACHINE_LEARNING_ANN_FP16_TURBO` is enabled
- When other tasks also use the GPU (like transcoding), RKNPU has a significant advantage over ARM NN as it uses the otherwise idle NPU instead of competing for GPU usage
- Lower RAM usage if `MACHINE_LEARNING_RKNN_THREADS` is at the default of 1, but significantly higher if greater than 1 (which is necessary for it to fully utilize the NPU and hence be comparable in speed to ARM NN)

File diff suppressed because it is too large Load Diff

View File

@@ -23,12 +23,12 @@ name: immich_remote_ml
services:
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.ml.yml
# service: # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
# service: # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
restart: always

View File

@@ -1,3 +1,7 @@
---
sidebar_position: 100
---
# Config File
A config file can be provided as an alternative to the UI configuration.

View File

@@ -69,39 +69,7 @@ If you get an error `can't set healthcheck.start_interval as feature require Doc
## Next Steps
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below.
### Setting up optional features
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich
### Upgrading
:::danger Read the release notes
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. Therefore, we recommend reading the release notes prior to updating and to take special care when using automated tools like [Watchtower][watchtower].
You can see versions that had breaking changes [here][breaking].
:::
If `IMMICH_VERSION` is set, it will need to be updated to the latest or desired version.
When a new version of Immich is [released][releases], the application can be upgraded and restarted with the following commands, run in the directory with the `docker-compose.yml` file:
```bash title="Upgrade and restart Immich"
docker compose pull && docker compose up -d
```
To clean up disk space, the old version's obsolete container images can be deleted with the following command:
```bash title="Clean up unused Docker images"
docker image prune
```
Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
[compose-file]: https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
[env-file]: https://github.com/immich-app/immich/releases/latest/download/example.env
[watchtower]: https://containrrr.dev/watchtower/
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
[container-auth]: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry
[releases]: https://github.com/immich-app/immich/releases

View File

@@ -170,6 +170,8 @@ Redis (Sentinel) URL example JSON before encoding:
| `MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION` | Set the maximum number of faces that will be processed at once by the facial recognition model | None (`1` if using OpenVINO) | machine learning |
| `MACHINE_LEARNING_PING_TIMEOUT` | How long (ms) to wait for a PING response when checking if an ML server is available | `2000` | server |
| `MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIME` | How long to ignore ML servers that are offline before trying again | `30000` | server |
| `MACHINE_LEARNING_RKNN` | Enable RKNN hardware acceleration if supported | `True` | machine learning |
| `MACHINE_LEARNING_RKNN_THREADS` | How many threads of RKNN runtime should be spinned up while inferencing. | `1` | machine learning |
\*1: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones.

View File

@@ -41,3 +41,9 @@ A list of common steps to take after installing Immich include:
## Step 7 - Setup Server Backups
<ServerBackup />
## Setting up optional features
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich

View File

@@ -67,10 +67,4 @@ Click "**Edit Rules**" and add the following firewall rules:
## Next Steps
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below.
### Setting up optional features
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich
Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).

View File

@@ -247,6 +247,10 @@ Some examples are: `IMMICH_VERSION`, `UPLOAD_LOCATION`, `DB_DATA_LOCATION`, `TZ`
## Updating the App
:::danger
Make sure to read the general [upgrade instructions](/docs/install/upgrading.md).
:::
When updates become available, SCALE alerts and provides easy updates.
To update the app to the latest version:

View File

@@ -131,6 +131,10 @@ For more information on how to use the application once installed, please refer
## Updating Steps
:::danger
Make sure to read the general [upgrade instructions](/docs/install/upgrading.md).
:::
Updating is extremely easy however it's important to be aware that containers managed via the Docker Compose Manager plugin do not integrate with Unraid's native dockerman UI, the label "_update ready_" will always be present on containers installed via the Docker Compose Manager.
<img

View File

@@ -0,0 +1,29 @@
---
sidebar_position: 95
---
# Upgrading
:::danger Read the release notes
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. You should read the release notes prior to updating and take special care when using automated tools like [Watchtower][watchtower].
You can see versions that had breaking changes [here][breaking].
:::
When a new version of Immich is [released][releases], you should read the release notes and account for any breaking changes noted (as mentioned above).
If you use `IMMICH_VERSION` in your `.env` file, it will need to be updated to the latest or desired version.
After that, the application can be upgraded and restarted with the following commands, run in the directory with the `docker-compose.yml` file:
```bash title="Upgrade and restart Immich"
docker compose pull && docker compose up -d
```
To clean up disk space, the old version's obsolete container images can be deleted with the following command:
```bash title="Clean up unused Docker images"
docker image prune
```
[watchtower]: https://containrrr.dev/watchtower/
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
[releases]: https://github.com/immich-app/immich/releases

View File

@@ -1,2 +1,7 @@
Now that you have imported some pictures, you should setup server backups to preserve your memories.
You can do so by following our [backup guide](/docs/administration/backup-and-restore.md).
:::danger
Immich is still under heavy development _and_ handles very important data.
It is essential that you set up good backups, and test them.
:::

24
docs/package-lock.json generated
View File

@@ -5308,9 +5308,9 @@
}
},
"node_modules/autoprefixer": {
"version": "10.4.20",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
"version": "10.4.21",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
"integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
"funding": [
{
"type": "opencollective",
@@ -5327,11 +5327,11 @@
],
"license": "MIT",
"dependencies": {
"browserslist": "^4.23.3",
"caniuse-lite": "^1.0.30001646",
"browserslist": "^4.24.4",
"caniuse-lite": "^1.0.30001702",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.1",
"picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -5781,9 +5781,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001695",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz",
"integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==",
"version": "1.0.30001706",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
"integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
"funding": [
{
"type": "opencollective",
@@ -15734,9 +15734,9 @@
}
},
"node_modules/prettier": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz",
"integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {

View File

@@ -1,12 +1,10 @@
import React from 'react';
import Link from '@docusaurus/Link';
import Layout from '@theme/Layout';
import { useColorMode } from '@docusaurus/theme-common';
import { discordPath, discordViewBox } from '@site/src/components/svg-paths';
import ThemedImage from '@theme/ThemedImage';
import Icon from '@mdi/react';
function HomepageHeader() {
const { isDarkTheme } = useColorMode();
return (
<header>
<div className="top-[calc(12%)] md:top-[calc(30%)] h-screen w-full absolute -z-10">
@@ -14,8 +12,8 @@ function HomepageHeader() {
<div className="w-full h-[120vh] absolute left-0 top-0 backdrop-blur-3xl bg-immich-bg/40 dark:bg-transparent"></div>
</div>
<section className="text-center pt-12 sm:pt-24 bg-immich-bg/50 dark:bg-immich-dark-bg/80">
<img
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'}
<ThemedImage
sources={{ dark: 'img/logomark-dark.svg', light: 'img/logomark-light.svg' }}
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
alt="Immich logo"
/>
@@ -35,7 +33,6 @@ function HomepageHeader() {
sacrificing your privacy.
</p>
</div>
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 gap-4 ">
<Link
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-xl no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold uppercase"
@@ -58,7 +55,6 @@ function HomepageHeader() {
Buy Merch
</Link>
</div>
<div className="my-12 flex gap-1 font-medium place-items-center place-content-center text-immich-primary dark:text-immich-dark-primary">
<Icon
path={discordPath}
@@ -67,22 +63,19 @@ function HomepageHeader() {
/>
<Link to="https://discord.immich.app/">Join our Discord</Link>
</div>
<img
src={isDarkTheme ? '/img/screenshot-dark.webp' : '/img/screenshot-light.webp'}
<ThemedImage
sources={{ dark: '/img/screenshot-dark.webp', light: '/img/screenshot-light.webp' }}
alt="screenshots"
className="w-[95%] lg:w-[85%] xl:w-[70%] 2xl:w-[60%] "
/>
<div className="mx-[25%] m-auto my-14 md:my-28">
<hr className="border bg-gray-500 dark:bg-gray-400" />
</div>
<img
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'}
<ThemedImage
sources={{ dark: 'img/logomark-dark.svg', light: 'img/logomark-light.svg' }}
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
alt="Immich logo"
/>
<div>
<p className="font-bold text-2xl md:text-5xl ">Download the mobile app</p>
<p className="text-lg">
@@ -101,9 +94,8 @@ function HomepageHeader() {
</a>
</div>
</div>
<img
src={isDarkTheme ? '/img/app-qr-code-dark.svg' : '/img/app-qr-code-light.svg'}
<ThemedImage
sources={{ dark: '/img/app-qr-code-dark.svg', light: '/img/app-qr-code-light.svg' }}
alt="app qr code"
width={'150px'}
className="shadow-lg p-3 my-8 dark:bg-immich-dark-bg "

View File

@@ -1,10 +1,7 @@
import React from 'react';
import Link from '@docusaurus/Link';
import Layout from '@theme/Layout';
import { useColorMode } from '@docusaurus/theme-common';
function HomepageHeader() {
const { isDarkTheme } = useColorMode();
return (
<header>
<section className="max-w-[900px] m-4 p-4 md:p-6 md:m-auto md:my-12 border border-red-400 rounded-2xl bg-slate-200 dark:bg-immich-dark-gray">

View File

@@ -1,4 +1,36 @@
[
{
"label": "v1.131.3",
"url": "https://v1.131.3.archive.immich.app"
},
{
"label": "v1.131.2",
"url": "https://v1.131.2.archive.immich.app"
},
{
"label": "v1.131.1",
"url": "https://v1.131.1.archive.immich.app"
},
{
"label": "v1.131.0",
"url": "https://v1.131.0.archive.immich.app"
},
{
"label": "v1.130.3",
"url": "https://v1.130.3.archive.immich.app"
},
{
"label": "v1.130.2",
"url": "https://v1.130.2.archive.immich.app"
},
{
"label": "v1.130.1",
"url": "https://v1.130.1.archive.immich.app"
},
{
"label": "v1.130.0",
"url": "https://v1.130.0.archive.immich.app"
},
{
"label": "v1.129.0",
"url": "https://v1.129.0.archive.immich.app"

View File

@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [
export default typescriptEslint.config([
eslintPluginUnicorn.configs.recommended,
eslintPluginPrettierRecommended,
js.configs.recommended,
typescriptEslint.configs.recommended,
{
ignores: ['eslint.config.mjs'],
},
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: {
globals: {
...globals.node,
},
parser: tsParser,
parser: typescriptEslint.parser,
ecmaVersion: 5,
sourceType: 'module',
@@ -62,4 +52,4 @@ export default [
'object-shorthand': ['error', 'always'],
},
},
];
]);

1518
e2e/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "1.129.0",
"version": "1.131.3",
"description": "",
"main": "index.js",
"type": "module",
@@ -25,18 +25,16 @@
"@immich/sdk": "file:../open-api/typescript-sdk",
"@playwright/test": "^1.44.1",
"@types/luxon": "^3.4.2",
"@types/node": "^22.13.9",
"@types/node": "^22.14.0",
"@types/oidc-provider": "^8.5.1",
"@types/pg": "^8.11.0",
"@types/pngjs": "^6.0.4",
"@types/supertest": "^6.0.2",
"@typescript-eslint/eslint-plugin": "^8.15.0",
"@typescript-eslint/parser": "^8.15.0",
"@vitest/coverage-v8": "^3.0.0",
"eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^56.0.1",
"eslint-plugin-unicorn": "^57.0.0",
"exiftool-vendored": "^28.3.1",
"globals": "^16.0.0",
"jose": "^5.6.3",
@@ -49,6 +47,7 @@
"socket.io-client": "^4.7.4",
"supertest": "^7.0.0",
"typescript": "^5.3.3",
"typescript-eslint": "^8.28.0",
"utimes": "^5.2.1",
"vitest": "^3.0.0"
},

View File

@@ -1141,7 +1141,7 @@ describe('/asset', () => {
fNumber: 8,
focalLength: 97,
iso: 100,
lensModel: 'E PZ 18-105mm F4 G OSS',
lensModel: 'Sony E PZ 18-105mm F4 G OSS',
fileSizeInByte: 25_001_984,
dateTimeOriginal: '2016-09-27T10:51:44+00:00',
orientation: '1',
@@ -1163,7 +1163,7 @@ describe('/asset', () => {
fNumber: 22,
focalLength: 25,
iso: 100,
lensModel: 'E 25mm F2',
lensModel: 'Zeiss Batis 25mm F2',
fileSizeInByte: 49_512_448,
dateTimeOriginal: '2016-01-08T14:08:01+00:00',
orientation: '1',
@@ -1234,7 +1234,7 @@ describe('/asset', () => {
focalLength: 18.3,
iso: 100,
latitude: 36.613_24,
lensModel: 'GR LENS 18.3mm F2.8',
lensModel: '18.3mm F2.8',
longitude: -121.897_85,
make: 'RICOH IMAGING COMPANY, LTD.',
model: 'RICOH GR III',
@@ -1257,6 +1257,7 @@ describe('/asset', () => {
for (const { id, status } of assets) {
expect(status).toBe(AssetMediaStatus.Created);
// longer timeout as the thumbnail generation from full-size raw files can take a while
await utils.waitForWebsocketEvent({ event: 'assetUpload', id });
}

View File

@@ -329,7 +329,7 @@ describe('/libraries', () => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`],
exclusionPatterns: ['**/directoryA'],
exclusionPatterns: ['**/directoryA/**'],
});
await utils.scan(admin.accessToken, library.id);
@@ -337,7 +337,82 @@ describe('/libraries', () => {
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1);
expect(assets.items[0].originalPath.includes('directoryB'));
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
]),
);
});
it('should scan external library with multiple exclusion patterns', async () => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`],
exclusionPatterns: ['**/directoryA/**', '**/directoryB/**'],
});
await utils.scan(admin.accessToken, library.id);
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(0);
expect(assets.items).toEqual([]);
});
it('should remove assets covered by a new exclusion pattern', async () => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`],
});
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(2);
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining('directoryA/assetA.png') }),
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, {
exclusionPatterns: ['**/directoryA/**'],
});
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1);
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, {
exclusionPatterns: ['**/directoryA/**', '**/directoryB/**'],
});
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(0);
expect(assets.items).toEqual([]);
}
});
it('should scan multiple import paths', async () => {
@@ -454,6 +529,133 @@ describe('/libraries', () => {
utils.removeImageFile(`${testAssetDir}/temp/folder${char}2/asset2.png`);
});
it('should respect exclusion patterns when using multiple import paths', async () => {
// https://github.com/immich-app/immich/issues/17121
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp/exclusion/`, `${testAssetDirInternal}/temp/exclusion2/`],
});
const excludedFolder = `Raw`;
utils.createImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.createImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: [`**/${excludedFolder}/**`] });
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
utils.removeImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.removeImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
});
const annoyingExclusionPatterns = ['@', '#', '$', '%', '^', '&', '='];
it.each(annoyingExclusionPatterns)('should support exclusion patterns with %s', async (char) => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp/exclusion/`],
});
const excludedFolder = `${char}folder`;
utils.createImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.createImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: [`**/${excludedFolder}/**`] });
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
utils.removeImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.removeImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
});
it('should reimport a modified file', async () => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,

View File

@@ -633,7 +633,6 @@ describe('/search', () => {
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([
'Andalusia',
'Berlin',
'Glarus',
'Greater Accra',
'Havana',
@@ -642,6 +641,7 @@ describe('/search', () => {
'Mississippi',
'New York',
'Shanghai',
'State of Berlin',
'St.-Petersburg',
'Tbilisi',
'Tokyo',
@@ -657,7 +657,6 @@ describe('/search', () => {
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([
'Andalusia',
'Berlin',
'Glarus',
'Greater Accra',
'Havana',
@@ -666,6 +665,7 @@ describe('/search', () => {
'Mississippi',
'New York',
'Shanghai',
'State of Berlin',
'St.-Petersburg',
'Tbilisi',
'Tokyo',

View File

@@ -117,7 +117,7 @@ describe('/shared-links', () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
expect(resp.status).toBe(200);
expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).toContain(`<meta property="og:image" content="http://`);
expect(resp.text).toContain(`<meta property="og:image" content="https://my.immich.app`);
});
});
@@ -246,15 +246,7 @@ describe('/shared-links', () => {
const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithMetadata.key });
expect(status).toBe(200);
expect(body.assets).toHaveLength(1);
expect(body.assets[0]).toEqual(
expect.objectContaining({
originalFileName: 'example.png',
localDateTime: expect.any(String),
fileCreatedAt: expect.any(String),
exifInfo: expect.any(Object),
}),
);
expect(body.assets).toHaveLength(0);
expect(body.album).toBeDefined();
});

View File

@@ -22,7 +22,7 @@ const tests: Test[] = [
},
{
test: 'should support paths with an asterisk',
paths: [`/photos\*/image1.jpg`],
paths: [`/photos*/image1.jpg`],
files: {
'/photos*/image1.jpg': true,
'/photos*/image2.jpg': false,
@@ -40,7 +40,7 @@ const tests: Test[] = [
},
{
test: 'should support paths with a single quote',
paths: [`/photos\'/image1.jpg`],
paths: [`/photos'/image1.jpg`],
files: {
"/photos'/image1.jpg": true,
"/photos'/image2.jpg": false,
@@ -49,7 +49,7 @@ const tests: Test[] = [
},
{
test: 'should support paths with a double quote',
paths: [`/photos\"/image1.jpg`],
paths: [`/photos"/image1.jpg`],
files: {
'/photos"/image1.jpg': true,
'/photos"/image2.jpg': false,
@@ -67,7 +67,7 @@ const tests: Test[] = [
},
{
test: 'should support paths with an opening brace',
paths: [`/photos\{/image1.jpg`],
paths: [`/photos{/image1.jpg`],
files: {
'/photos{/image1.jpg': true,
'/photos{/image2.jpg': false,
@@ -76,7 +76,7 @@ const tests: Test[] = [
},
{
test: 'should support paths with a closing brace',
paths: [`/photos\}/image1.jpg`],
paths: [`/photos}/image1.jpg`],
files: {
'/photos}/image1.jpg': true,
'/photos}/image2.jpg': false,

View File

@@ -493,7 +493,7 @@ export const utils = {
value: accessToken,
domain,
path: '/',
expires: 1_742_402_728,
expires: 2_058_028_213,
httpOnly: true,
secure: false,
sameSite: 'Lax',
@@ -503,7 +503,7 @@ export const utils = {
value: 'password',
domain,
path: '/',
expires: 1_742_402_728,
expires: 2_058_028_213,
httpOnly: true,
secure: false,
sameSite: 'Lax',
@@ -513,7 +513,7 @@ export const utils = {
value: 'true',
domain,
path: '/',
expires: 1_742_402_728,
expires: 2_058_028_213,
httpOnly: false,
secure: false,
sameSite: 'Lax',
@@ -537,6 +537,7 @@ export const utils = {
},
waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise<void>(async (resolve, reject) => {
const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000);

View File

@@ -8,12 +8,14 @@ function imageLocator(page: Page) {
test.describe('Photo Viewer', () => {
let admin: LoginResponseDto;
let asset: AssetMediaResponseDto;
let rawAsset: AssetMediaResponseDto;
test.beforeAll(async () => {
utils.initSdk();
await utils.resetDatabase();
admin = await utils.adminSetup();
asset = await utils.createAsset(admin.accessToken);
rawAsset = await utils.createAsset(admin.accessToken, { assetData: { filename: 'test.arw' } });
});
test.beforeEach(async ({ context, page }) => {
@@ -36,7 +38,7 @@ test.describe('Photo Viewer', () => {
await expect(page.getByTestId('loading-spinner')).toBeVisible();
});
test('loads high resolution photo when zoomed', async ({ page }) => {
test('loads original photo when zoomed', async ({ page }) => {
await page.goto(`/photos/${asset.id}`);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail');
const box = await imageLocator(page).boundingBox();
@@ -47,6 +49,17 @@ test.describe('Photo Viewer', () => {
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('original');
});
test('loads fullsize image when zoomed and original is web-incompatible', async ({ page }) => {
await page.goto(`/photos/${rawAsset.id}`);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail');
const box = await imageLocator(page).boundingBox();
expect(box).toBeTruthy();
const { x, y, width, height } = box!;
await page.mouse.move(x + width / 2, y + height / 2);
await page.mouse.wheel(0, -1);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('fullsize');
});
test('reloads photo when checksum changes', async ({ page }) => {
await page.goto(`/photos/${asset.id}`);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail');

View File

@@ -45,10 +45,10 @@ test.describe('Shared Links', () => {
await page.goto(`/share/${sharedLink.key}`);
await page.getByRole('heading', { name: 'Test Album' }).waitFor();
await page.locator(`[data-asset-id="${asset.id}"]`).hover();
await page.waitForSelector('#asset-group-by-date svg');
await page.waitForSelector('[data-group] svg');
await page.getByRole('checkbox').click();
await page.getByRole('button', { name: 'Download' }).click();
await page.getByText('DOWNLOADING', { exact: true }).waitFor();
await page.waitForEvent('download');
});
test('download all from shared link', async ({ page }) => {
@@ -56,6 +56,7 @@ test.describe('Shared Links', () => {
await page.getByRole('heading', { name: 'Test Album' }).waitFor();
await page.getByRole('button', { name: 'Download' }).click();
await page.getByText('DOWNLOADING', { exact: true }).waitFor();
await page.waitForEvent('download');
});
test('enter password for a shared link', async ({ page }) => {

View File

@@ -1,5 +1,5 @@
{
"about": "Verfris",
"about": "Oor",
"account": "Rekening",
"account_settings": "Rekeninginstellings",
"acknowledge": "Erken",
@@ -56,7 +56,7 @@
"duplicate_detection_job_description": "Begin masjienleer op bates om soortgelyke beelde op te spoor. Maak staat op Smart Search",
"exclusion_pattern_description": "Met uitsluitingspatrone kan jy lêers en vouers ignoreer wanneer jy jou biblioteek skandeer. Dit is nuttig as jy vouers het wat lêers bevat wat jy nie wil invoer nie, soos RAW-lêers.",
"external_library_created_at": "Eksterne biblioteek (geskep op {date})",
"external_library_management": "Eksterne Biblioteek-opsies",
"external_library_management": "Eksterne Biblioteekbestuur",
"face_detection": "Gesig deteksie",
"failed_job_command": "Opdrag {command} het misluk vir werk: {job}",
"force_delete_user_warning": "WAARSKUWING: Dit sal onmiddellik die gebruiker en alle bates verwyder. Dit kan nie ontdoen word nie en die lêers kan nie herstel word nie.",
@@ -64,7 +64,8 @@
"image_format": "Formaat",
"image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.",
"image_prefer_embedded_preview": "Verkies ingebedde voorskou",
"image_prefer_wide_gamut": "Verkies wye spektrum",
"image_prefer_wide_gamut": "Verkies wide gamut",
"image_prefer_wide_gamut_setting_description": "Gebruik Display P3 vir kleinkiekies. Dit behou die lewendheid van beelde met wye kleurruimtes beter, maar beelde kan anders verskyn op ou apparate met 'n ou blaaierweergawe. sRGB-beelde gebruik steeds sRGB om kleurverskuiwings te voorkom.",
"image_preview_description": "Mediumgrootte prent met gestroopte metadata, wat gebruik word wanneer 'n enkele bate bekyk word en vir masjienleer",
"image_preview_quality_description": "Voorskou kwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan app-reaksie verminder. Die stel van 'n lae waarde kan masjienleerkwaliteit beïnvloed.",
"image_preview_title": "Voorskou Instellings",
@@ -72,7 +73,14 @@
"image_resolution": "Resolusie",
"image_resolution_description": "Hoër resolusies kan meer detail bewaar, maar neem langer om te enkodeer, het groter lêergroottes en kan app-reaksie verminder.",
"image_settings": "Prent Instellings",
"image_settings_description": "Bestuur die kwaliteit en resolusie van gegenereerde beelde"
"image_settings_description": "Bestuur die kwaliteit en resolusie van gegenereerde beelde",
"image_thumbnail_description": "Klein kleinkiekies sonder metadata, gebruik om groepe foto's soos die tydlyn te bekyk",
"image_thumbnail_quality_description": "Kleinkiekiekwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan die toepassing vertraag.",
"image_thumbnail_title": "Kleinkiekie-instellings",
"job_concurrency": "{job} gelyktydigheid",
"job_created": "Taak gemaak",
"job_not_concurrency_safe": "Hierdie taak kan nie gelyktydig uitgevoer word nie.",
"job_settings": "Agtergrondtaakinstellings"
},
"search_by_description": "Soek by beskrywing",
"search_by_description_example": "Stapdag in Sapa"

View File

@@ -162,7 +162,6 @@
"no_pattern_added": "لم يتم إضافة أي أنماط",
"note_apply_storage_label_previous_assets": "ملاحظة: لتطبيق تسمية التخزين على المحتويات التي تم رفعها سابقًا، قم بتشغيل",
"note_cannot_be_changed_later": "ملاحظة: لا يمكن تغيير هذا لاحقًا!",
"note_unlimited_quota": "ملاحظة: أدخل 0 للحصول على حصة غير محدودة",
"notification_email_from_address": "عنوان المرسل",
"notification_email_from_address_description": "عنوان البريد الإلكتروني للمرسل، على سبيل المثال: \"Immich Photo Server noreply@example.com\"",
"notification_email_host_description": "مضيف خادم البريد الإلكتروني (مثلًا: smtp.immich.app)",
@@ -923,7 +922,6 @@
"no_shared_albums_message": "قم بإنشاء ألبوم لمشاركة الصور ومقاطع الفيديو مع الأشخاص في شبكتك",
"not_in_any_album": "ليست في أي ألبوم",
"note_apply_storage_label_to_previously_uploaded assets": "ملاحظة: لتطبيق تسمية التخزين على المحتويات التي تم رفعها مسبقًا، قم بتشغيل",
"note_unlimited_quota": "ملاحظة: أدخل 0 للحصة غير المحدودة",
"notes": "ملاحظات",
"notification_toggle_setting_description": "تفعيل إشعارات البريد الإلكتروني",
"notifications": "إشعارات",
@@ -987,6 +985,7 @@
"permanently_deleted_asset": "تم حذف الأصل بشكل نهائي",
"permanently_deleted_assets_count": "تم حذف {count, plural, one {# محتوى} other {# المحتويات}} نهائيًا",
"person": "شخص",
"person_birthdate": "تاريخ الميلاد {التاريخ}",
"person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}",
"photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
"photos": "الصور",
@@ -1078,6 +1077,8 @@
"remove_from_album": "إزالة من الألبوم",
"remove_from_favorites": "إزالة من المفضلة",
"remove_from_shared_link": "إزالة من الرابط المشترك",
"remove_memory": "إزالة الذاكرة",
"remove_photo_from_memory": "إزالة الصورة من هذه الذكرى",
"remove_url": "إزالة عنوان URL",
"remove_user": "إزالة المستخدم",
"removed_api_key": "تم إزالة مفتاح API: {name}",
@@ -1148,6 +1149,7 @@
"searching_locales": "جارٍ البحث في اللغات...",
"second": "ثانية",
"see_all_people": "عرض جميع الأشخاص",
"select": "إختر",
"select_album_cover": "تحديد غلاف الألبوم",
"select_all": "تحديد الكل",
"select_all_duplicates": "تحديد جميع النسخ المكررة",

View File

@@ -162,7 +162,6 @@
"no_pattern_added": "Няма добавен модел",
"note_apply_storage_label_previous_assets": "Забележка: За да приложите етикета за съхранение към предварително качени файлове, стартирайте",
"note_cannot_be_changed_later": "ВНИМАНИЕ: Това не може да бъде променено по-късно!",
"note_unlimited_quota": "Бележка: Въведете 0 за да нямате лимит на квотата",
"notification_email_from_address": "От адрес",
"notification_email_from_address_description": "Електронна поща на изпращача, например: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Хост на сървъра за електронна поща (например: smtp.immich.app)",
@@ -923,7 +922,6 @@
"no_shared_albums_message": "Създайте албум, за да споделяте снимки и видеоклипове с хората в мрежата си",
"not_in_any_album": "Не е в никой албум",
"note_apply_storage_label_to_previously_uploaded assets": "Забележка: За да приложите етикета за съхранение към предварително качени активи, стартирайте",
"note_unlimited_quota": "Забележка: Въведете 0 за неограничена квота",
"notes": "Бележки",
"notification_toggle_setting_description": "Активиране на имейл известия",
"notifications": "Известия",
@@ -1374,4 +1372,4 @@
"yes": "Да",
"you_dont_have_any_shared_links": "Нямате споделени връзки",
"zoom_image": "Увеличаване на изображението"
}
}

View File

@@ -1,20 +1,22 @@
{
"account": "",
"account_settings": "",
"acknowledge": "",
"about": "abaot",
"account": "Akaont",
"account_settings": "Seting blo Akaont",
"acknowledge": "Akcept",
"action": "",
"actions": "",
"active": "",
"activity": "",
"add": "",
"add_a_description": "",
"add_a_location": "",
"add_a_name": "",
"add_a_title": "",
"add_exclusion_pattern": "",
"add_import_path": "",
"add_location": "",
"add_more_users": "",
"active": "Stap Mekem",
"activity": "Wanem hemi Mekem",
"activity_changed": "WAnem hemi Mekem hemi",
"add": "Ad",
"add_a_description": "Putem Description blo hem",
"add_a_location": "Putem place blo hem",
"add_a_name": "Putem nam blo hem",
"add_a_title": "Putem wan name blo hem",
"add_exclusion_pattern": "Putem wan paten wae hemi karem aot",
"add_import_path": "Putem wan pat blo import",
"add_location": "Putem wan place blo hem",
"add_more_users": "Putem mor man",
"add_partner": "",
"add_path": "",
"add_photos": "",
@@ -116,7 +118,6 @@
"no_pattern_added": "",
"note_apply_storage_label_previous_assets": "",
"note_cannot_be_changed_later": "",
"note_unlimited_quota": "",
"notification_email_from_address": "",
"notification_email_from_address_description": "",
"notification_email_host_description": "",
@@ -612,7 +613,6 @@
"no_shared_albums_message": "",
"not_in_any_album": "",
"note_apply_storage_label_to_previously_uploaded assets": "",
"note_unlimited_quota": "",
"notes": "",
"notification_toggle_setting_description": "",
"notifications": "",

View File

@@ -66,6 +66,11 @@
"forcing_refresh_library_files": "Força l'actualització de tots els fitxers de les biblioteques",
"image_format": "Format",
"image_format_description": "WebP genera fitxers més petits que JPEG, però codifica més lentament.",
"image_fullsize_description": "Imatges a tamany complet sense metadades, utilitzades quan es fa zoom",
"image_fullsize_enabled": "Activa la generació d'imatges a tamany complet",
"image_fullsize_enabled_description": "Genera imatges a tamany complet per formats no compatibles amb la web. Quan \"Prefereix vista prèvia incrustada\" està activat, les vistes prèvies incrustades s'utilitzen directament sense conversió. No afecta els formats compatibles amb la web com JPEG.",
"image_fullsize_quality_description": "De 1 a 100, qualitat de l'imatge a tamany complet. Un valor més alt és millor, però resulta en fitxers de major tamany.",
"image_fullsize_title": "Configuració d'imatges a tamany complet",
"image_prefer_embedded_preview": "Prefereix vista prèvia incrustada",
"image_prefer_embedded_preview_setting_description": "Empra vista prèvia incrustada en les fotografies RAW com a entrada per al processament d'imatge, quan sigui possible. Aquesta acció pot produir colors més acurats en algunes imatges, però la qualitat de la vista prèvia depèn de la càmera i la imatge pot tenir més artefactes de compressió.",
"image_prefer_wide_gamut": "Prefereix àmplia gamma",
@@ -162,7 +167,6 @@
"no_pattern_added": "Cap patró aplicat",
"note_apply_storage_label_previous_assets": "Nota: Per aplicar l'etiquetatge d'emmagatzematge a elements pujats prèviament, executeu la",
"note_cannot_be_changed_later": "NOTA: Això és irreversible!",
"note_unlimited_quota": "Nota: Intruduïu 0 per a quota il·limitada",
"notification_email_from_address": "Des de l'adreça",
"notification_email_from_address_description": "Adreça de correu electrònic del remitent, per exemple: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Amfitrió del servidor de correu electrònic (p.ex. smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Vídeos en bucle",
"loop_videos_description": "Habilita la reproducció en bucle del vídeo en els detalls.",
"main_branch_warning": "Esteu usant una versió de desenvolupaent. Recomanem fer servir una versió publicada!",
"main_menu": "Menú principal",
"make": "Fabricant",
"manage_shared_links": "Administrar enllaços compartits",
"manage_sharing_with_partners": "Gestiona la compartició amb els companys",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Creeu un àlbum per compartir fotos i vídeos amb persones a la vostra xarxa",
"not_in_any_album": "En cap àlbum",
"note_apply_storage_label_to_previously_uploaded assets": "Nota: per aplicar l'etiqueta d'emmagatzematge als actius penjats anteriorment, executeu el",
"note_unlimited_quota": "Nota: Intruduïu 0 per a quota il·limitada",
"notes": "Notes",
"notification_toggle_setting_description": "Activa les notificacions per correu electrònic",
"notifications": "Notificacions",
@@ -987,6 +991,7 @@
"permanently_deleted_asset": "Element eliminat permanentment",
"permanently_deleted_assets_count": "{count, plural, one {S'ha eliminat # element} other {S'han eliminat # elements}} permanentment",
"person": "Persona",
"person_birthdate": "Nascut a {date}",
"person_hidden": "{name}{hidden, select, true { (ocultat)} other {}}",
"photo_shared_all_users": "Sembla que has compartit les teves fotos amb tots els usuaris o no tens cap usuari amb qui compartir-les.",
"photos": "Fotos",
@@ -1078,22 +1083,24 @@
"remove_from_album": "Treu de l'àlbum",
"remove_from_favorites": "Eliminar dels preferits",
"remove_from_shared_link": "Eliminar de l'enllaç compartit",
"remove_memory": "Eliminar memòria",
"remove_photo_from_memory": "Traieu la foto d'aquesta memòria",
"remove_url": "Eliminar URL",
"remove_user": "Eliminar l'usuari",
"removed_api_key": "Eliminada la clau d'API: {name}",
"removed_from_archive": "Eliminat de l'arxiu",
"removed_from_favorites": "Eliminat dels preferits",
"removed_from_favorites_count": "{count, plural, other {# eliminats}} dels preferits",
"removed_memory": "Eliminat memòria",
"removed_photo_from_memory": "Eliminat foto de memòria",
"removed_memory": "Memòria esborrada",
"removed_photo_from_memory": "Eliminat foto de la memòria",
"removed_tagged_assets": "Etiqueta eliminada de {count, plural, one {# actiu} other {# actius}}",
"rename": "Canviar nom",
"repair": "Reparació",
"repair_no_results_message": "Els fitxers sense seguiment i que falten es mostraran aquí",
"replace_with_upload": "Substituir amb una pujada",
"repair_no_results_message": "Els fitxers sense seguiment o que falten es mostraran aquí",
"replace_with_upload": "Substitueix amb una pujada",
"repository": "Repositori",
"require_password": "Requereix contrasenya",
"require_user_to_change_password_on_first_login": "Requerir que l'usuari canviï la contrasenya en el primer inici de sessió",
"require_user_to_change_password_on_first_login": "Demanar que l'usuari canviï la contrasenya en el primer inici de sessió",
"rescan": "Tornar a escanejar",
"reset": "Restablir",
"reset_password": "Restablir contrasenya",
@@ -1110,7 +1117,7 @@
"review_duplicates": "Revisar duplicats",
"role": "Rol",
"role_editor": "Editor",
"role_viewer": "Visualitzador",
"role_viewer": "Visor",
"save": "Desa",
"saved_api_key": "Clau d'API guardada",
"saved_profile": "Perfil guardat",
@@ -1148,6 +1155,7 @@
"searching_locales": "S'estan cercant localitzacions...",
"second": "Segon",
"see_all_people": "Veure totes les persones",
"select": "Selecciona",
"select_album_cover": "Seleccionar la portada de l'àlbum",
"select_all": "Selecciona-ho tot",
"select_all_duplicates": "Seleccioneu tots els duplicats",
@@ -1362,6 +1370,7 @@
"view_name": "Veure",
"view_next_asset": "Mostra el següent element",
"view_previous_asset": "Mostra l'element anterior",
"view_qr_code": "Veure codi QR",
"view_stack": "Veure la pila",
"visibility_changed": "La visibilitat ha canviat per {count, plural, one {# persona} other {# persones}}",
"waiting": "Esperant",
@@ -1374,4 +1383,4 @@
"yes": "Sí",
"you_dont_have_any_shared_links": "No tens cap enllaç compartit",
"zoom_image": "Ampliar Imatge"
}
}

View File

@@ -66,8 +66,13 @@
"forcing_refresh_library_files": "Vynucení obnovy všech souborů knihovny",
"image_format": "Formát",
"image_format_description": "WebP vytváří menší soubory než JPEG, ale je pomalejší při kódování.",
"image_fullsize_description": "Obrázek v plné velikosti s odstraněnými metadaty, použito při přiblížení",
"image_fullsize_enabled": "Povolit generování obrázků v plné velikosti",
"image_fullsize_enabled_description": "Generovat obrázky v plné velikosti pro formáty, které nejsou vhodné pro web. Pokud je povolena možnost „Preferovat vložený náhled“, budou přímo použity vložené náhledy bez převodu. Neovlivňuje formáty vhodné pro web, jako je JPEG.",
"image_fullsize_quality_description": "Kvalita obrázku v plné velikosti od 1 do 100. Vyšší je lepší, ale vytváří větší soubory.",
"image_fullsize_title": "Nastavení obrázků v plné velikosti",
"image_prefer_embedded_preview": "Preferovat vložený náhled",
"image_prefer_embedded_preview_setting_description": "Použít vložené náhledy z RAW fotografií jako vstup pro zpracování snímků, pokud jsou k dispozici. U některých snímků tak lze dosáhnout přesnějších barev, ale kvalita náhledu závisí na fotoaparátu a snímek může obsahovat více kompresních artefaktů.",
"image_prefer_embedded_preview_setting_description": "Použít vložené náhledy z RAW fotografií jako vstup pro zpracování snímků a pokud jsou k dispozici. U některých snímků tak lze dosáhnout přesnějších barev, ale kvalita náhledu závisí na fotoaparátu a snímek může obsahovat více kompresních artefaktů.",
"image_prefer_wide_gamut": "Preferovat široký gamut",
"image_prefer_wide_gamut_setting_description": "Použít Display P3 pro miniatury. To lépe zachovává živost obrázků s širokým barevným prostorem, ale obrázky se mohou na starých zařízeních se starou verzí prohlížeče zobrazovat jinak. sRGB obrázky jsou ponechány jako sRGB, aby se zabránilo posunům barev.",
"image_preview_description": "Středně velký obrázek se zbavenými metadaty, který se používá při prohlížení jedné položky a pro strojové učení",
@@ -162,7 +167,6 @@
"no_pattern_added": "Nebyl přidán žádný vzor",
"note_apply_storage_label_previous_assets": "Upozornění: Pro uplatnění Štítku úložiště na dříve nahrané položky spusťte",
"note_cannot_be_changed_later": "UPOZORNĚNÍ: Toto nelze později změnit!",
"note_unlimited_quota": "Upozornění: Pro neomezenou kvótu zadejte 0",
"notification_email_from_address": "Adresa Od",
"notification_email_from_address_description": "E-mailová adresa odesílatele, např.: „Immich Photo Server <noreply@example.com>“",
"notification_email_host_description": "Adresa e-mailového serveru (např. smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Videa ve smyčce",
"loop_videos_description": "Povolit automatickou smyčku videa v prohlížeči.",
"main_branch_warning": "Používáte vývojovou verzi; důrazně doporučujeme používat verzi z vydání!",
"main_menu": "Hlavní nabídka",
"make": "Výrobce",
"manage_shared_links": "Spravovat sdílené odkazy",
"manage_sharing_with_partners": "Správa sdílení s partnery",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Vytvořte si album a sdílejte fotografie a videa s lidmi ve své síti",
"not_in_any_album": "Bez alba",
"note_apply_storage_label_to_previously_uploaded assets": "Upozornění: Chcete-li použít štítek úložiště na dříve nahrané položky, spusťte příkaz",
"note_unlimited_quota": "Poznámka: Chcete-li použít štítek úložiště na dříve nahrané položky, spusťte příkaz",
"notes": "Poznámky",
"notification_toggle_setting_description": "Povolení e-mailových oznámení",
"notifications": "Oznámení",
@@ -965,9 +969,9 @@
"password_required": "Vyžadováno heslo",
"password_reset_success": "Úspěšné obnovení hesla",
"past_durations": {
"days": "{days, plural, one {Včera} few {Minulé # dny} other {Minulých # dní}}",
"hours": "{hours, plural, one {Minulou hodinu} few {Minulé # hodiny} other {Minulých # hodin}}",
"years": "{years, plural, one {Minulý rok} few {Minulé # roky} other {Minulých # let}}"
"days": "{days, plural, one {Včera} few {Poslední # dny} other {Posledních # dní}}",
"hours": "{hours, plural, one {Poslední hodinu} few {Poslední # hodiny} other {Posledních # hodin}}",
"years": "{years, plural, one {Poslední rok} few {Poslední # roky} other {Posledních # let}}"
},
"path": "Cesta",
"pattern": "Vzor",
@@ -1079,6 +1083,8 @@
"remove_from_album": "Odstranit z alba",
"remove_from_favorites": "Odstranit z oblíbených",
"remove_from_shared_link": "Odstranit ze sdíleného odkazu",
"remove_memory": "Odstranit vzpomínku",
"remove_photo_from_memory": "Odstranit fotografii z této vzpomínky",
"remove_url": "Odstranit URL",
"remove_user": "Odebrat uživatele",
"removed_api_key": "Odstraněn API klíč: {name}",
@@ -1149,6 +1155,7 @@
"searching_locales": "Vyhledávání jazyků...",
"second": "Sekunda",
"see_all_people": "Zobrazit všechny lidi",
"select": "Vybrat",
"select_album_cover": "Vybrat obal alba",
"select_all": "Vybrat vše",
"select_all_duplicates": "Vybrat všechny duplicity",
@@ -1231,7 +1238,7 @@
"sort_oldest": "Nejstarší fotka",
"sort_people_by_similarity": "Seřadit lidi podle podobnosti",
"sort_recent": "Nejnovější fotka",
"sort_title": "Název",
"sort_title": "Název alba",
"source": "Zdroj",
"stack": "Seskupit",
"stack_duplicates": "Seskupit duplicity",
@@ -1363,6 +1370,7 @@
"view_name": "Zobrazit",
"view_next_asset": "Zobrazit další položku",
"view_previous_asset": "Zobrazit předchozí položku",
"view_qr_code": "Zobrazit QR kód",
"view_stack": "Zobrazit seskupení",
"visibility_changed": "Viditelnost změněna u {count, plural, one {# osoby} few {# osob} other {# lidí}}",
"waiting": "Čekající",
@@ -1375,4 +1383,4 @@
"yes": "Ano",
"you_dont_have_any_shared_links": "Nemáte žádné sdílené odkazy",
"zoom_image": "Zvětšit obrázek"
}
}

View File

@@ -41,6 +41,7 @@
"backup_settings": "Backup-indstillinger",
"backup_settings_description": "Administrer backupindstillinger for database",
"check_all": "Tjek Alle",
"cleanup": "Ryd op",
"cleared_jobs": "Ryddet jobs til: {job}",
"config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil",
"confirm_delete_library": "Er du sikker på, at du vil slette {library} bibliotek?",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "Aktiver periodisk biblioteksscanning",
"library_settings": "Eksternt bibliotek",
"library_settings_description": "Administrer eksterne biblioteksindstillinger",
"library_tasks_description": "Udfør biblioteksopgaver",
"library_tasks_description": "Scan eksterne biblioteker for nye og/eller ændrede mediefiler",
"library_watching_enable_description": "Overvåg eksterne biblioteker for filændringer",
"library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)",
"library_watching_settings_description": "Tjek automatisk for ændrede filer",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "Søg semantisk efter billeder ved hjælp af CLIP-indlejringer",
"machine_learning_smart_search_enabled": "Aktiver smart søgning",
"machine_learning_smart_search_enabled_description": "Hvis deaktiveret, vil billeder ikke blive kodet til smart søgning.",
"machine_learning_url_description": "URL maskinlæringsserveren. Hvis der er angivet mere end én URL, hver server vil blive forsøgt en ad gangen, indtil en reagerer med succes, i rækkefølge fra første til sidste.",
"machine_learning_url_description": "URLen for maskinlæringsserveren. Hvis mere end én URL angives, vil hver server blive forsøgt én ad gangen, indtil en svarer succesfuldt, i rækkefølge fra første til sidste. Servere, der ikke svarer, vil midlertidigt blive ignoreret, indtil de kommer online igen.",
"manage_concurrency": "Administrer antallet af samtidige opgaver",
"manage_log_settings": "Administrer logindstillinger",
"map_dark_style": "Mørk tema",
@@ -161,7 +162,6 @@
"no_pattern_added": "Intet mønster tilføjet",
"note_apply_storage_label_previous_assets": "Bemærk: For at anvende Lagringsmærkatet på tidligere uploadede mediefiler, kør",
"note_cannot_be_changed_later": "BEMÆRK: Dette kan ikke ændres senere!",
"note_unlimited_quota": "Bemærk: Indsæt 0 for uendelig kvote",
"notification_email_from_address": "Fra adressse",
"notification_email_from_address_description": "Afsenderemailadresse, for eksempel: \"Immich Billedserver <noreply@example.com>\"",
"notification_email_host_description": "Host af emailserver (fx smtp.immich.app)",
@@ -242,7 +242,7 @@
"storage_template_hash_verification_enabled_description": "Slår hash-verifikation til, slå ikke dette fra med mindre du er sikker på dets konsekvenser",
"storage_template_migration": "Lagringsskabelonmigration",
"storage_template_migration_description": "Anvend den nuværende <link>{template}</link> på tidligere uploadede mediefiler",
"storage_template_migration_info": "Skabelonændringer vil kun gælde for nye mediefiler. For at anvende skabelonen retroaktivt på tidligere uploadede mediefiler skal du køre <link>{job}</link>.",
"storage_template_migration_info": "Lager-skabelonen vil konvertere alle filendelser til små bogstaver. Skabelonændringer vil kun gælde for nye mediefiler. For at anvende skabelonen retroaktivt på tidligere uploadede mediefiler skal du køre <link>{job}</link>.",
"storage_template_migration_job": "Lager Skabelon Migreringsjob",
"storage_template_more_details": "For flere detaljer om denne funktion, referer til <template-link>Lager Skabelonen</template-link> og dens <implications-link>implikationer</implications-link>",
"storage_template_onboarding_description": "Når denne funktion er aktiveret, vil den automatisk organisere filer baseret på en brugerdefineret skabelon. På grund af stabilitetsproblemer er funktionen som standard slået fra. For mere information, se <link>dokumentation</link>.",
@@ -393,6 +393,7 @@
"allow_edits": "Tillad redigeringer",
"allow_public_user_to_download": "Tillad offentlige brugere til at hente",
"allow_public_user_to_upload": "Tillad offentlige brugere til at uploade",
"alt_text_qr_code": "QR-kode billede",
"anti_clockwise": "Mod uret",
"api_key": "API-nøgle",
"api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.",
@@ -889,6 +890,7 @@
"month": "Måned",
"more": "Mere",
"moved_to_trash": "Flyttet til skraldespand",
"mute_memories": "Dæmp minder",
"my_albums": "Mine albummer",
"name": "Navn",
"name_or_nickname": "Navn eller kælenavn",
@@ -920,7 +922,6 @@
"no_shared_albums_message": "Opret et album for at dele billeder og videoer med personer i dit netværk",
"not_in_any_album": "Ikke i noget album",
"note_apply_storage_label_to_previously_uploaded assets": "Bemærk: For at anvende Lagringsmærkat på tidligere uploadede medier, kør",
"note_unlimited_quota": "Bemærk: Indsæt 0 for ubegrænset kvote",
"notes": "Noter",
"notification_toggle_setting_description": "Aktivér emailnotifikationer",
"notifications": "Notifikationer",
@@ -984,6 +985,7 @@
"permanently_deleted_asset": "Permanent slettet medie",
"permanently_deleted_assets_count": "{count, plural, one {# aktiv} other {# aktiver}} permanent slettet",
"person": "Person",
"person_birthdate": "Født den {date}",
"person_hidden": "{name}{hidden, select, true { (skjult)} other {}}",
"photo_shared_all_users": "Det ser ud til, at du har delt dine billeder med alle brugere, eller også har du ikke nogen bruger at dele med.",
"photos": "Billeder",
@@ -1075,6 +1077,8 @@
"remove_from_album": "Fjern fra album",
"remove_from_favorites": "Fjern fra favoritter",
"remove_from_shared_link": "Fjern fra delt link",
"remove_memory": "Fjern minde",
"remove_photo_from_memory": "Fjern foto fra dette minde",
"remove_url": "Fjern URL",
"remove_user": "Fjern bruger",
"removed_api_key": "Fjernede API-nøgle: {name}",
@@ -1145,6 +1149,7 @@
"searching_locales": "Søger lokaler...",
"second": "Sekund",
"see_all_people": "Se alle personer",
"select": "Vælg",
"select_album_cover": "Vælg albumcover",
"select_all": "Vælg alle",
"select_all_duplicates": "Vælg alle dubletter",
@@ -1300,6 +1305,7 @@
"unlink_motion_video": "Fjern link til bevægelsesvideo",
"unlink_oauth": "Frakobl OAuth",
"unlinked_oauth_account": "Frakoblede OAuth-konto",
"unmute_memories": "Ophæv dæmpning af minder",
"unnamed_album": "Unavngivet album",
"unnamed_album_delete_confirmation": "Er du sikker på, at du vil slette dette album?",
"unnamed_share": "Unavngivet deling",
@@ -1370,4 +1376,4 @@
"yes": "Ja",
"you_dont_have_any_shared_links": "Du har ikke nogen delte links",
"zoom_image": "Zoom billede"
}
}

View File

@@ -66,6 +66,11 @@
"forcing_refresh_library_files": "Erneutes Laden aller Bibliotheksdateien erzwingen",
"image_format": "Format",
"image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist aber etwas langsamer in der Erstellung.",
"image_fullsize_description": "Hochauflösendes Bild mit entfernten Metadaten, das beim Zoomen verwendet wird",
"image_fullsize_enabled": "Hochauflösende Vorschaubilder aktivieren",
"image_fullsize_enabled_description": "Generiere Hochauflösende Vorschaubilder in Originalauflösung für nicht web-kompatibel Formate. Wenn \"Eingebettete Vorschau bevorzugen\" aktiviert ist, werden eingebettete Vorschaubilder direkt verwendet. Hat keinen Einfluss auf web-kompatible Formate wie JPEG.",
"image_fullsize_quality_description": "Qualität der Hochauflösenden Vorschaubilder von 1-100. Höher ist besser, erzeugt aber größere Dateien.",
"image_fullsize_title": "Hochauflösende Vorschaueinstellungen",
"image_prefer_embedded_preview": "Eingebettete Vorschau bevorzugen",
"image_prefer_embedded_preview_setting_description": "Verwende eingebettete Vorschaubilder in RAW-Fotos als Grundlage für die Bildverarbeitung, sofern diese zur Verfügung stehen. Dies kann bei einigen Bildern genauere Farben erzeugen, allerdings ist die Qualität der Vorschau kameraabhängig und das Bild kann mehr Kompressionsartefakte aufweisen.",
"image_prefer_wide_gamut": "Breites Spektrum bevorzugen",
@@ -162,7 +167,6 @@
"no_pattern_added": "Kein Ausschlussmuster hinzugefügt",
"note_apply_storage_label_previous_assets": "Hinweis: Um den Speicherpfad auf die vorher hochgeladenen Dateien anzuwenden, starte den",
"note_cannot_be_changed_later": "HINWEIS: Dies kann später nicht mehr geändert werden!",
"note_unlimited_quota": "Hinweis: 0 eingeben für unlimitiertes Kontingent",
"notification_email_from_address": "Absenderadresse",
"notification_email_from_address_description": "E-Mail-Adresse des Senders, zum Beispiel: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Host des E-Mail-Servers (z.B. smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Loop-Videos",
"loop_videos_description": "Aktiviere diese Option, um eine automatische Videoschleife in der Detailansicht zu erstellen.",
"main_branch_warning": "Du benutzt eine Entwicklungsversion. Wir empfehlen dringend, eine Release-Version zu verwenden!",
"main_menu": "Hauptmenü",
"make": "Marke",
"manage_shared_links": "Freigegebene Links verwalten",
"manage_sharing_with_partners": "Gemeinsame Nutzung mit Partnern verwalten",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Erstelle ein Album, um Fotos und Videos mit Personen in deinem Netzwerk zu teilen",
"not_in_any_album": "In keinem Album",
"note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um eine Speicherpfadbezeichnung anzuwenden, starte den",
"note_unlimited_quota": "Hinweis: Verwende 0 für ein unlimitiertes Kontingent",
"notes": "Notizen",
"notification_toggle_setting_description": "E-Mail-Benachrichtigungen aktivieren",
"notifications": "Benachrichtigungen",
@@ -1079,6 +1083,8 @@
"remove_from_album": "Aus Album entfernen",
"remove_from_favorites": "Aus Favoriten entfernen",
"remove_from_shared_link": "Aus geteiltem Link entfernen",
"remove_memory": "Erinnerung entfernen",
"remove_photo_from_memory": "Foto aus dieser Erinnerung entfernen",
"remove_url": "URL entfernen",
"remove_user": "Nutzer entfernen",
"removed_api_key": "API-Schlüssel {name} wurde entfernt",
@@ -1149,6 +1155,7 @@
"searching_locales": "Suche nach Orten...",
"second": "Sekunde",
"see_all_people": "Alle Personen anzeigen",
"select": "Auswählen",
"select_album_cover": "Album-Cover auswählen",
"select_all": "Alles auswählen",
"select_all_duplicates": "Alle Duplikate auswählen",
@@ -1363,6 +1370,7 @@
"view_name": "Ansicht",
"view_next_asset": "Nächste Datei anzeigen",
"view_previous_asset": "Vorherige Datei anzeigen",
"view_qr_code": "QR code anzeigen",
"view_stack": "Stapel anzeigen",
"visibility_changed": "Sichtbarkeit für {count, plural, one {# Person} other {# Personen}} geändert",
"waiting": "Wartend",
@@ -1375,4 +1383,4 @@
"yes": "Ja",
"you_dont_have_any_shared_links": "Du hast keine geteilten Links",
"zoom_image": "Bild vergrößern"
}
}

View File

@@ -41,6 +41,7 @@
"backup_settings": "Ρυθμίσεις Αντιγράφων Ασφαλείας",
"backup_settings_description": "Διαχείρηση ρυθμίσεων των αντιγράφων ασφαλείας της βάσης δεδομένων",
"check_all": "Έλεγχος Όλων",
"cleanup": "Εκκαθάριση",
"cleared_jobs": "Εκκαθαρίστηκαν οι εργασίες για: {job}",
"config_set_by_file": "Η παραμετροποίηση γίνεται, προς το παρόν, μέσω ενός αρχείου παραμέτρων",
"confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "Εξαναγκαστική ανανέωση όλων των αρχείων της βιβλιοθήκης",
"image_format": "Μορφή",
"image_format_description": "Η μορφή WebP παράγει μικρότερα αρχεία από τη μορφή JPEG, αλλά είναι πιο αργή στην κωδικοποίηση.",
"image_fullsize_description": "Εικόνα πλήρους μεγέθους με απογυμνωμένα μεταδεδομένα, που χρησιμοποιείται κατά τη μεγέθυνση",
"image_fullsize_enabled": "Ενεργοποίηση δημιουργίας εικόνας πλήρους μεγέθους",
"image_fullsize_enabled_description": "Δημιουργία εικόνας πλήρους μεγέθους για μορφές που δεν είναι φιλικές προς το διαδίκτυο. Όταν είναι ενεργοποιημένη η επιλογή «Προτίμηση ενσωματωμένης προεπισκόπησης», οι ενσωματωμένες προεπισκοπήσεις χρησιμοποιούνται απευθείας χωρίς μετατροπή. Δεν επηρεάζει τις φιλικές προς το διαδίκτυο μορφές όπως το JPEG.",
"image_fullsize_quality_description": "Ποιότητα εικόνας πλήρους μεγέθους από 1-100. Η υψηλότερη είναι καλύτερη, αλλά παράγει μεγαλύτερα αρχεία.",
"image_fullsize_title": "Ρυθμίσεις εικόνας πλήρους μεγέθους",
"image_prefer_embedded_preview": "Προτίμηση ενσωματωμένης προεπισκόπησης",
"image_prefer_embedded_preview_setting_description": "Χρήση ενσωματωμένων προεπισκοπίσεων σε RAW εικόνες ως είσοδο για την επεξεργασία εικόνας εφόσον είναι διαθέσιμες. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρώματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερες αλλοιώσεις στην εικόνα λόγω συμπίεσης.",
"image_prefer_wide_gamut": "Προτίμηση ευρέος φάσματος",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Ενεργοποίηση περιοδικής σάρωσης βιβλιοθήκης",
"library_settings": "Εξωτερική Βιβλιοθήκη",
"library_settings_description": "Διαχείριση ρυθμίσεων εξωτερικής βιβλιοθήκης",
"library_tasks_description": "Εκτελούν εργασίες της βιβλιοθήκης",
"library_tasks_description": "Σάρωση εξωτερικών βιβλιοθηκών για νέα ή/και αλλαγμένα στοιχεία",
"library_watching_enable_description": "Παρακολούθηση εξωτερικών βιβλιοθηκών για τροποποιήσεις αρχείων",
"library_watching_settings": "Παρακολούθηση βιβλιοθήκης (ΠΕΙΡΑΜΑΤΙΚΟ)",
"library_watching_settings_description": "Αυτόματη παρακολούθηση για τροποποιημένα αρχεία",
@@ -161,7 +167,6 @@
"no_pattern_added": "Δεν προστέθηκε μοτίβο",
"note_apply_storage_label_previous_assets": "Σημείωση: Για να εφαρμοστεί η Ετικέτα Αποθήκευσης σε στοιχεία που είχαν αναρτηθεί παλαιότερα, εκτέλεσε το",
"note_cannot_be_changed_later": "ΣΗΜΕΊΩΣΗ: Αυτό δεν μπορεί να τροποποιηθεί αργότερα!",
"note_unlimited_quota": "Σημείωση: Εισαγάγετε 0 για απεριόριστο όριο",
"notification_email_from_address": "Διεύθυνση αποστολέα",
"notification_email_from_address_description": "Διεύθυνση αποστολέα, πχ: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Πάροχος του email server (πχ smtp.immich.app)",
@@ -242,7 +247,7 @@
"storage_template_hash_verification_enabled_description": "Ενεργοποιεί την επαλήθευση hash. Μην το απενεργοποιήσεις εκτός αν είσαι βέβαιος/α για τις συνέπειες",
"storage_template_migration": "Μεταφορά προτύπων αποθήκευσης",
"storage_template_migration_description": "Εφαρμογή του τρέχοντος <link>{template}</link> στα αρχεία που έχουν ανέβει προηγουμένως",
"storage_template_migration_info": "Οι αλλαγές στο πρότυπο θα ισχύσουν μόνο για τα νέα αρχεία. Για να εφαρμόσετε αναδρομικά το πρότυπο, σε αρχεία που έχουν ανέβει προηγουμένως, εκτελέστε το <link>{job}</link>.",
"storage_template_migration_info": "Το πρότυπο αποθήκευσης θα μετατρέψει όλες τις επεκτάσεις σε πεζά γράμματα. Οι αλλαγές στο πρότυπο θα ισχύουν μόνο για νέα περιουσιακά στοιχεία. Για να εφαρμόσετε αναδρομικά το πρότυπο σε περιουσιακά στοιχεία που έχουν μεταφορτωθεί προηγουμένως, εκτελέστε το <link>{job}</link>.",
"storage_template_migration_job": "Εργασία Μεταφοράς Προτύπων Αποθήκευσης",
"storage_template_more_details": "Για περισσότερες λεπτομέρειες σχετικά με αυτήν τη δυνατότητα, ανατρέξτε στο <template-link>Πρότυπο Αποθήκευσης</template-link> και στις <implications-link>συνέπειές</implications-link> του",
"storage_template_onboarding_description": "Όταν ενεργοποιηθεί, αυτή η δυνατότητα θα οργανώνει αυτόματα τα αρχεία με βάση ένα πρότυπο που καθορίζεται από τον χρήστη. Λόγω θεμάτων σταθερότητας, η δυνατότητα είναι απενεργοποιημένη από προεπιλογή. Για περισσότερες πληροφορίες, παρακαλώ δείτε την <link>τεκμηρίωση</link>.",
@@ -387,12 +392,13 @@
"albums_count": "{count, plural, one {{count, number} Άλμπουμ} other {{count, number} Άλμπουμ}}",
"all": "Όλα",
"all_albums": "Όλα τα άλμπουμ",
"all_people": "Όλοι οι άνθρωποι",
"all_people": "Όλα τα άτομα",
"all_videos": "Όλα τα βίντεο",
"allow_dark_mode": "Επιτρέψτε τη σκοτεινή λειτουργία",
"allow_edits": "Επιτρέψτε τις τροποποιήσεις",
"allow_public_user_to_download": "Επιτρέψτε σε δημόσιο χρήστη να κατεβάσει",
"allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει",
"alt_text_qr_code": "Εικόνα κωδικού QR",
"anti_clockwise": "Αντίθετα με τη φορά του ρολογιού",
"api_key": "Κλειδί API",
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
@@ -450,7 +456,7 @@
"camera_model": "Μοντέλο κάμερας",
"cancel": "Ακύρωση",
"cancel_search": "Ακύρωση αναζήτησης",
"cannot_merge_people": "Αδύνατη η συγχώνευση προσώπων",
"cannot_merge_people": "Αδύνατη η συγχώνευση ατόμων",
"cannot_undo_this_action": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια!",
"cannot_update_the_description": "Αδύνατη η ενημέρωση της περιγραφής",
"change_date": "Αλλαγή ημερομηνίας",
@@ -616,7 +622,7 @@
"cant_change_metadata_assets_count": "Δεν μπορείτε να αλλάξετε τα μεταδεδομένα του {count, plural, one {# αρχείου} other {# αρχείων}}",
"cant_get_faces": "Δεν είναι δυνατή η ανάκτηση προσώπων",
"cant_get_number_of_comments": "Δεν είναι δυνατή η ανάκτηση του αριθμού των σχολίων",
"cant_search_people": "Δεν μπορείτε να αναζητήσετε άτομα",
"cant_search_people": "Αδύνατη η αναζήτηση ατόμων",
"cant_search_places": "Δεν μπορείτε να αναζητήσετε τοποθεσίες",
"cleared_jobs": "Εκκαθαρισμένες εργασίες για: {job}",
"error_adding_assets_to_album": "Σφάλμα κατά την προσθήκη στοιχείων στο άλμπουμ",
@@ -857,6 +863,7 @@
"loop_videos": "Επανάληψη βίντεο",
"loop_videos_description": "Ενεργοποιήστε την αυτόματη επανάληψη ενός βίντεο στο πρόγραμμα προβολής λεπτομερειών.",
"main_branch_warning": "Χρησιμοποιείτε μια έκδοση σε ανάπτυξη· συνιστούμε ανεπιφύλακτα τη χρήση μιας επίσημης έκδοσης!",
"main_menu": "Κύριο μενού",
"make": "Κατασκευαστής",
"manage_shared_links": "Διαχείριση κοινόχρηστων συνδέσμων",
"manage_sharing_with_partners": "Διαχειριστείτε την κοινή χρήση με συνεργάτες",
@@ -889,6 +896,7 @@
"month": "Μήνας",
"more": "Περισσότερα",
"moved_to_trash": "Μετακινήθηκε στον κάδο απορριμμάτων",
"mute_memories": "Σίγαση Αναμνήσεων",
"my_albums": "Τα άλμπουμ μου",
"name": "Όνομα",
"name_or_nickname": "Όνομα ή ψευδώνυμο",
@@ -920,7 +928,6 @@
"no_shared_albums_message": "Δημιουργήστε ένα άλμπουμ για να μοιράζεστε φωτογραφίες και βίντεο με άτομα στο δίκτυό σας",
"not_in_any_album": "Σε κανένα άλμπουμ",
"note_apply_storage_label_to_previously_uploaded assets": "Σημείωση: Για να εφαρμόσετε την Ετικέτα Αποθήκευσης σε στοιχεία που έχουν μεταφορτωθεί προηγουμένως, εκτελέστε το",
"note_unlimited_quota": "Σημείωση: Εισαγάγετε 0 για απεριόριστο όριο",
"notes": "Σημειώσεις",
"notification_toggle_setting_description": "Ενεργοποίηση ειδοποιήσεων μέσω email",
"notifications": "Ειδοποιήσεις",
@@ -984,6 +991,7 @@
"permanently_deleted_asset": "Οριστικά διαγραμμένο στοιχείο",
"permanently_deleted_assets_count": "Οριστική διαγραφή {count, plural, one {# στοιχείου} other {# στοιχείων}}",
"person": "Άτομο",
"person_birthdate": "Γεννηθείς στις {date}",
"person_hidden": "{name}{hidden, select, true { (κρυφό)} other {}}",
"photo_shared_all_users": "Φαίνεται ότι μοιραστήκατε τις φωτογραφίες σας με όλους τους χρήστες ή δεν έχετε κανέναν χρήστη για κοινή χρήση.",
"photos": "Φωτογραφίες",
@@ -1075,6 +1083,8 @@
"remove_from_album": "Αφαίρεση από το άλμπουμ",
"remove_from_favorites": "Αφαίρεση από τα αγαπημένα",
"remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο",
"remove_memory": "Αφαίρεση ανάμνησης",
"remove_photo_from_memory": "Αφαίρεση φωτογραφίας από την ανάμνηση",
"remove_url": "Αφαίρεση Συνδέσμου",
"remove_user": "Αφαίρεση χρήστη",
"removed_api_key": "Αφαιρέθηκε το API Key: {name}",
@@ -1091,6 +1101,7 @@
"repository": "Αποθετήριο",
"require_password": "Απαιτείται κωδικός πρόσβασης",
"require_user_to_change_password_on_first_login": "Ο χρήστης απαιτείται να αλλάξει τον κωδικό πρόσβασής του κατά την πρώτη σύνδεση",
"rescan": "Εκ νέου σάρωση",
"reset": "Επαναφορά",
"reset_password": "Επαναφορά κωδικού πρόσβασης",
"reset_people_visibility": "Επαναφορά προβολής ατόμων",
@@ -1144,6 +1155,7 @@
"searching_locales": "Αναζήτηση τοποθεσιών...",
"second": "Δευτερόλεπτο",
"see_all_people": "Προβολή όλων των ατόμων",
"select": "Επιλογή",
"select_album_cover": "Επιλέξτε εξώφυλλο άλμπουμ",
"select_all": "Επιλογή όλων",
"select_all_duplicates": "Επιλογή όλων των διπλότυπων",
@@ -1299,6 +1311,7 @@
"unlink_motion_video": "Αποσυνδέστε το βίντεο κίνησης",
"unlink_oauth": "Αποσύνδεση OAuth",
"unlinked_oauth_account": "Ο λογαριασμός OAuth αποσυνδέθηκε",
"unmute_memories": "Αποσυνδέστε τις αναμνήσεις",
"unnamed_album": "Ανώνυμο Άλμπουμ",
"unnamed_album_delete_confirmation": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το άλμπουμ;",
"unnamed_share": "Ανώνυμη Κοινή Χρήση",
@@ -1352,10 +1365,12 @@
"view_all": "Προβολή Όλων",
"view_all_users": "Προβολή όλων των χρηστών",
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
"view_link": "Προβολή σύνδεσμου",
"view_links": "Προβολή συνδέσμων",
"view_name": "Προβολή",
"view_next_asset": "Προβολή επόμενου στοιχείου",
"view_previous_asset": "Προβολή προηγούμενου στοιχείου",
"view_qr_code": "Προβολή κωδικού QR",
"view_stack": "Προβολή της στοίβας",
"visibility_changed": "Η ορατότητα άλλαξε για {count, plural, one {# άτομο} other {# άτομα}}",
"waiting": "Στοιχεία σε αναμονή",
@@ -1368,4 +1383,4 @@
"yes": "Ναι",
"you_dont_have_any_shared_links": "Δεν έχετε κοινόχρηστους συνδέσμους",
"zoom_image": "Ζουμ Εικόνας"
}
}

View File

@@ -65,8 +65,13 @@
"forcing_refresh_library_files": "Forcing refresh of all library files",
"image_format": "Format",
"image_format_description": "WebP produces smaller files than JPEG, but is slower to encode.",
"image_fullsize_enabled": "Enable full-size image generation",
"image_fullsize_enabled_description": "Generate full-size image for non-web-friendly formats. When \"Prefer embedded preview\" is enabled, embedded previews are used directly without conversion. Does not affect web-friendly formats like JPEG.",
"image_fullsize_quality_description": "Full-size image quality from 1-100. Higher is better, but produces larger files.",
"image_fullsize_title": "Full-size Image Settings",
"image_fullsize_description": "Full-size image with stripped metadata, used when zoomed in",
"image_prefer_embedded_preview": "Prefer embedded preview",
"image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.",
"image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing and when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.",
"image_prefer_wide_gamut": "Prefer wide gamut",
"image_prefer_wide_gamut_setting_description": "Use Display P3 for thumbnails. This better preserves the vibrance of images with wide colorspaces, but images may appear differently on old devices with an old browser version. sRGB images are kept as sRGB to avoid color shifts.",
"image_preview_description": "Medium-size image with stripped metadata, used when viewing a single asset and for machine learning",
@@ -159,7 +164,6 @@
"no_pattern_added": "No pattern added",
"note_apply_storage_label_previous_assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
"note_cannot_be_changed_later": "NOTE: This cannot be changed later!",
"note_unlimited_quota": "Note: Enter 0 for unlimited quota",
"notification_email_from_address": "From address",
"notification_email_from_address_description": "Sender email address, for example: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Host of the email server (e.g. smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Loop videos",
"loop_videos_description": "Enable to automatically loop a video in the detail viewer.",
"main_branch_warning": "Youre using a development version; we strongly recommend using a release version!",
"main_menu": "Main menu",
"make": "Make",
"manage_shared_links": "Manage shared links",
"manage_sharing_with_partners": "Manage sharing with partners",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Create an album to share photos and videos with people in your network",
"not_in_any_album": "Not in any album",
"note_apply_storage_label_to_previously_uploaded assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
"note_unlimited_quota": "Note: Enter 0 for unlimited quota",
"notes": "Notes",
"notification_toggle_setting_description": "Enable email notifications",
"notifications": "Notifications",
@@ -1082,7 +1086,9 @@
"remove_url": "Remove URL",
"remove_user": "Remove user",
"removed_api_key": "Removed API Key: {name}",
"remove_memory": "Remove memory",
"removed_memory": "Removed memory",
"remove_photo_from_memory": "Remove photo from this memory",
"removed_photo_from_memory": "Removed photo from memory",
"removed_from_archive": "Removed from archive",
"removed_from_favorites": "Removed from favorites",
@@ -1365,6 +1371,7 @@
"view_next_asset": "View next asset",
"view_previous_asset": "View previous asset",
"view_stack": "View Stack",
"view_qr_code": "View QR code",
"visibility_changed": "Visibility changed for {count, plural, one {# person} other {# people}}",
"waiting": "Waiting",
"warning": "Warning",
@@ -1376,4 +1383,4 @@
"yes": "Yes",
"you_dont_have_any_shared_links": "You don't have any shared links",
"zoom_image": "Zoom Image"
}
}

View File

@@ -66,8 +66,13 @@
"forcing_refresh_library_files": "Forzando la recarga de todos los elementos en la biblioteca",
"image_format": "Formato",
"image_format_description": "WebP genera archivos más pequeños que JPEG, pero es más lento al codificarlos.",
"image_fullsize_description": "Imagen de tamaño completo con metadatos removidos, usado cuando se hace zoom",
"image_fullsize_enabled": "Activar generación de imágenes a tamaño completo",
"image_fullsize_enabled_description": "Generar imágenes a tamaño completo para formatos no aptos para web. Cuando \"Preferir vista previa incrustada\" está activada, las vistas previas incrustadas se utilizan directamente sin conversión. No afecta a los formatos aptos para la web, como JPEG.",
"image_fullsize_quality_description": "De 1 a 100, calidad de imágenes de tamaño completo. Mientras más alto es mejor, pero genera archivos de mayor tamaño.",
"image_fullsize_title": "Configuraciones de imágenes de tamaño completo",
"image_prefer_embedded_preview": "Preferir vista previa embebida",
"image_prefer_embedded_preview_setting_description": "Usar vistas previas embebidas en fotos RAW como entrada para el procesamiento de imágenes cuando estén disponibles. Esto puede producir colores más precisos en algunas imágenes, pero la calidad de la vista previa depende de la cámara y la imagen puede tener más artefactos de compresión.",
"image_prefer_embedded_preview_setting_description": "Usar vistas previas embebidas en fotos RAW como entrada para el procesamiento de imágenes y cuando estén disponibles. Esto puede producir colores más precisos en algunas imágenes, pero la calidad de la vista previa depende de la cámara y la imagen puede tener más artefactos de compresión.",
"image_prefer_wide_gamut": "Preferir 'gamut' amplio",
"image_prefer_wide_gamut_setting_description": "Usar \"Display P3\" para las miniaturas. Preserva mejor la vivacidad de las imágenes con espacios de color amplios pero las imágenes pueden aparecer de manera diferente en dispositivos antiguos con una versión antigua del navegador. Las imágenes sRGB se mantienen como sRGB para evitar cambios de color.",
"image_preview_description": "Imagen de tamaño mediano con metadatos eliminados. Es utilizado al visualizar un solo activo y para el aprendizaje automático",
@@ -161,8 +166,7 @@
"no_paths_added": "No se han añadido carpetas",
"no_pattern_added": "No se han añadido patrones",
"note_apply_storage_label_previous_assets": "Nota: para aplicar una Etiqueta de Almacenamient a un elemento anteriormente cargado, lanza el",
"note_cannot_be_changed_later": "NOTA: No se puede cambiar posteriormente!",
"note_unlimited_quota": "Nota: usa 0 para espacio sin límites",
"note_cannot_be_changed_later": "NOTA: ¡No se puede cambiar posteriormente!",
"notification_email_from_address": "Desde",
"notification_email_from_address_description": "Dirección de correo electrónico del remitente, por ejemplo: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Host del servidor de correo electrónico (por ejemplo: smtp.immich.app)",
@@ -414,7 +418,7 @@
"asset_description_updated": "La descripción del elemento ha sido actualizada",
"asset_filename_is_offline": "El archivo {filename} está offline",
"asset_has_unassigned_faces": "El archivo no tiene rostros asignados",
"asset_hashing": "Hashing…",
"asset_hashing": "Calculando hash…",
"asset_offline": "Archivos sin conexión",
"asset_offline_description": "Este activo externo ya no se encuentra en el disco. Por favor, póngase en contacto con su administrador de Immich para obtener ayuda.",
"asset_skipped": "Omitido",
@@ -442,7 +446,7 @@
"blurred_background": "Fondo borroso",
"bugs_and_feature_requests": "Errores y solicitudes de funciones",
"build": "Compilación",
"build_image": "Crear imagen",
"build_image": "Imagen de compilación",
"bulk_delete_duplicates_confirmation": "¿Estás seguro de que deseas eliminar de forma masiva {count, plural, one {# elemento duplicado} other {# elementos duplicados}}? Esto mantendrá el activo más grande de cada grupo y eliminará permanentemente todos los demás duplicados. ¡Esta acción no se puede deshacer!",
"bulk_keep_duplicates_confirmation": "¿Estas seguro de que desea mantener {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto resolverá todos los grupos duplicados sin borrar nada.",
"bulk_trash_duplicates_confirmation": "¿Estas seguro de que desea eliminar masivamente {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto mantendrá el archivo más grande de cada grupo y eliminará todos los demás duplicados.",
@@ -554,7 +558,7 @@
"direction": "Dirección",
"disabled": "Deshabilitado",
"disallow_edits": "Bloquear edición",
"discord": "Discord",
"discord": "",
"discover": "Descubrir",
"dismiss_all_errors": "Descartar todos los errores",
"dismiss_error": "Descartar error",
@@ -859,6 +863,7 @@
"loop_videos": "Vídeos en bucle",
"loop_videos_description": "Habilite la reproducción automática de un video en el visor de detalles.",
"main_branch_warning": "Estás ejecutando una compilación desde la rama principal. ¡Recomendamos encarecidamente usar una versión de lanzamiento!",
"main_menu": "Menú principal",
"make": "Marca",
"manage_shared_links": "Administrar enlaces compartidos",
"manage_sharing_with_partners": "Administrar el uso compartido con invitados",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red",
"not_in_any_album": "Sin álbum",
"note_apply_storage_label_to_previously_uploaded assets": "Nota: Para aplicar la etiqueta de almacenamiento a los archivos cargados previamente, ejecute el",
"note_unlimited_quota": "Nota: Ingrese 0 para cuota ilimitada",
"notes": "Notas",
"notification_toggle_setting_description": "Habilitar notificaciones de correo electrónico",
"notifications": "Notificaciones",
@@ -1079,6 +1083,8 @@
"remove_from_album": "Eliminar del álbum",
"remove_from_favorites": "Quitar de favoritos",
"remove_from_shared_link": "Eliminar desde enlace compartido",
"remove_memory": "Quitar memoria",
"remove_photo_from_memory": "Quitar foto de esta memoria",
"remove_url": "Eliminar URL",
"remove_user": "Eliminar usuario",
"removed_api_key": "Clave API eliminada: {name}",
@@ -1149,6 +1155,7 @@
"searching_locales": "Buscando sitios...",
"second": "Segundo",
"see_all_people": "Ver todas las personas",
"select": "Selecciona",
"select_album_cover": "Seleccionar portada del álbum",
"select_all": "Seleccionar todo",
"select_all_duplicates": "Seleccionar todos los duplicados",
@@ -1238,7 +1245,7 @@
"stack_select_one_photo": "Selecciona una imagen principal para la pila",
"stack_selected_photos": "Apilar fotos seleccionadas",
"stacked_assets_count": "Apilado(s) {count, plural, one {# activo} other {# activos}}",
"stacktrace": "Stacktrace",
"stacktrace": "Seguimiento de pila",
"start": "Inicio",
"start_date": "Fecha de inicio",
"state": "Estado",
@@ -1347,7 +1354,7 @@
"version_announcement_closing": "Tu amigo, Alex",
"version_announcement_message": "¡Hola! Hay una nueva versión de Immich disponible. Tómese un tiempo para leer las <link> notas de la versión </link> para asegurarse de que su configuración esté actualizada y evitar errores de configuración, especialmente si utiliza WatchTower o cualquier mecanismo que se encargue de actualizar su instancia de Immich automáticamente.",
"version_history": "Historial de versiones",
"version_history_item": "Instalada la {version} el {date}",
"version_history_item": "Instalada {version} el {date}",
"video": "Vídeo",
"video_hover_setting": "Iniciar vídeo al pasar por encima",
"video_hover_setting_description": "Reproducir el vídeo cuando el ratón está encima de un vídeo. Aunque esté desactivado, se iniciará cuando el cursor del ratón esté sobre el icono de \"reproducir\".",
@@ -1363,6 +1370,7 @@
"view_name": "Ver",
"view_next_asset": "Mostrar siguiente elemento",
"view_previous_asset": "Mostrar elemento anterior",
"view_qr_code": "Ver código QR",
"view_stack": "Ver Pila",
"visibility_changed": "Visibilidad cambiada para {count, plural, one {# persona} other {# personas}}",
"waiting": "Esperando",
@@ -1375,4 +1383,4 @@
"yes": "Sí",
"you_dont_have_any_shared_links": "No tienes ningún enlace compartido",
"zoom_image": "Acercar Imagen"
}
}

View File

@@ -66,6 +66,11 @@
"forcing_refresh_library_files": "Kogu kõigi failide sundvärskendamine",
"image_format": "Formaat",
"image_format_description": "WebP failid on väiksemad kui JPEG, aga kodeerimine on aeglasem.",
"image_fullsize_description": "Täismõõdus pilt ilma metaandmeteta, kasutatakse sisse suumimisel",
"image_fullsize_enabled": "Luba täismõõdus piltide genereerimine",
"image_fullsize_enabled_description": "Genereeri mitte-veebisõbralike formaatide jaoks täismõõdus pilt. Kui \"Eelista manustatud eelvaadet\" on lubatud, kasutatakse manustatud eelvaateid otse ilma teisendamiseta. Ei mõjuta veebisõbralikke formaate nagu JPEG.",
"image_fullsize_quality_description": "Täismõõdus pildi kvaliteet vahemikus 1-100. Kõrgem väärtus on parem, aga tulemuseks on suuremad failid.",
"image_fullsize_title": "Täismõõdus pildi seaded",
"image_prefer_embedded_preview": "Eelista manustatud eelvaadet",
"image_prefer_embedded_preview_setting_description": "Kasuta pilditöötluse sisendina võimalusel RAW fotodesse manustatud eelvaateid. See võib mõnede piltide puhul anda tulemuseks täpsemad värvid, aga eelvaate kvaliteet sõltub konkreetsest kaamerast ning pildis võib olla rohkem tihendusmüra.",
"image_prefer_wide_gamut": "Eelista laia värvigammat",
@@ -162,7 +167,6 @@
"no_pattern_added": "Mustreid ei ole",
"note_apply_storage_label_previous_assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
"note_cannot_be_changed_later": "MÄRKUS: Seda ei saa hiljem muuta!",
"note_unlimited_quota": "Märkus: Piiramatu kvoodi jaoks sisesta 0",
"notification_email_from_address": "Saatja aadress",
"notification_email_from_address_description": "Saatja e-posti aadress, näiteks: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "E-posti serveri host (nt. smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Taasesita videod",
"loop_videos_description": "Lülita sisse, et detailvaates videot automaatselt taasesitada.",
"main_branch_warning": "Sa kasutad arendusversiooni; soovitame tungivalt kasutada väljalaskeversiooni!",
"main_menu": "Peamenüü",
"make": "Mark",
"manage_shared_links": "Halda jagatud linke",
"manage_sharing_with_partners": "Halda partneritega jagamist",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
"not_in_any_album": "Pole üheski albumis",
"note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
"note_unlimited_quota": "Märkus: Piiramatu kvoodi jaoks sisesta 0",
"notes": "Märkused",
"notification_toggle_setting_description": "Luba e-posti teel teavitused",
"notifications": "Teavitused",
@@ -1079,6 +1083,8 @@
"remove_from_album": "Eemalda albumist",
"remove_from_favorites": "Eemalda lemmikutest",
"remove_from_shared_link": "Eemalda jagatud lingist",
"remove_memory": "Eemalda mälestus",
"remove_photo_from_memory": "Eemalda foto sellest mälestusest",
"remove_url": "Eemalda URL",
"remove_user": "Eemalda kasutaja",
"removed_api_key": "API võti eemaldatud: {name}",
@@ -1149,6 +1155,7 @@
"searching_locales": "Lokaatide otsimine...",
"second": "Sekund",
"see_all_people": "Vaata kõiki isikuid",
"select": "Vali",
"select_album_cover": "Vali albumi kaanepilt",
"select_all": "Vali kõik",
"select_all_duplicates": "Vali kõik duplikaadid",
@@ -1363,6 +1370,7 @@
"view_name": "Vaade",
"view_next_asset": "Vaata järgmist üksust",
"view_previous_asset": "Vaata eelmist üksust",
"view_qr_code": "Vaata QR-koodi",
"view_stack": "Vaata virna",
"visibility_changed": "{count, plural, one {# isiku} other {# isiku}} nähtavus muudetud",
"waiting": "Ootel",
@@ -1375,4 +1383,4 @@
"yes": "Jah",
"you_dont_have_any_shared_links": "Sul pole ühtegi jagatud linki",
"zoom_image": "Suumi pilti"
}
}

1
i18n/eu.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -132,7 +132,6 @@
"no_pattern_added": "هیچ الگوی اضافه نشده",
"note_apply_storage_label_previous_assets": "توجه: برای اعمال برچسب ذخیره سازی به دارایی هایی که قبلاً بارگذاری شده اند، دستور زیر را اجرا کنید",
"note_cannot_be_changed_later": "توجه: این را نمی توان بعداً تغییر داد!",
"note_unlimited_quota": "توجه: برای سهمیه نامحدود، عدد 0 را وارد کنید",
"notification_email_from_address": "آدرس فرستنده",
"notification_email_from_address_description": "آدرس ایمیل فرستنده، به عنوان مثال:\"Immich سرور عکس <noreply@example.com>\"",
"notification_email_host_description": "میزبان سرور ایمیل (مثلاً smtp.immich.app)",
@@ -664,7 +663,6 @@
"no_shared_albums_message": "",
"not_in_any_album": "در هیچ آلبومی نیست",
"note_apply_storage_label_to_previously_uploaded assets": "",
"note_unlimited_quota": "",
"notes": "یادداشت‌ها",
"notification_toggle_setting_description": "اعلان‌های ایمیلی را فعال کنید",
"notifications": "اعلان‌ها",
@@ -926,4 +924,4 @@
"yes": "بله",
"you_dont_have_any_shared_links": "",
"zoom_image": "بزرگنمایی تصویر"
}
}

View File

@@ -159,7 +159,6 @@
"no_pattern_added": "Kaavoja ei lisättynä",
"note_apply_storage_label_previous_assets": "Huom: Asettaaksesi nimikkeen aiemmin ladatulle aineistolle, aja",
"note_cannot_be_changed_later": "Huom: Tätä ei voi enää myöhemmin vaihtaa!",
"note_unlimited_quota": "Huom: Määritä 0 rajoittamattomaksi kiintiöksi",
"notification_email_from_address": "Lähettäjän osoite",
"notification_email_from_address_description": "Lähettäjän sähköpostiosoite. Esimerkiksi \"Immich-kuvapalvelin <noreply@example.com>\"",
"notification_email_host_description": "Sähköpostipalvelin (esim. smtp.immich.app)",
@@ -219,7 +218,7 @@
"reset_settings_to_default": "Nollaa asetukset oletuksille",
"reset_settings_to_recent_saved": "Palauta aiemmin tallennetut asetukset",
"scanning_library": "Kirjastoa skannataan",
"search_jobs": "Etsi tehtäviä...",
"search_jobs": "Etsi tehtäviä",
"send_welcome_email": "Lähetä tervetuloviesti",
"server_external_domain_settings": "Ulkoinen osoite",
"server_external_domain_settings_description": "Osoite julkisille linkeille, http(s):// mukaan lukien",
@@ -406,11 +405,11 @@
"are_these_the_same_person": "Ovatko he sama henkilö?",
"are_you_sure_to_do_this": "Haluatko varmasti tehdä tämän?",
"asset_added_to_album": "Lisätty albumiin",
"asset_adding_to_album": "Lisätään albumiin...",
"asset_adding_to_album": "Lisätään albumiin",
"asset_description_updated": "Kohteen kuvaus on päivitetty",
"asset_filename_is_offline": "Kohde {filename} on offline-tilassa",
"asset_has_unassigned_faces": "Kohteella on määrittämättömiä kasvoja",
"asset_hashing": "Hajautetaan...",
"asset_hashing": "Hajautetaan",
"asset_offline": "Aineisto offline-tilassa",
"asset_offline_description": "Tätä ulkoista resurssia ei enää löydy levyltä. Ole hyvä ja ota yhteyttä Immich-järjestelmänvalvojaan saadaksesi apua.",
"asset_skipped": "Ohitettu",
@@ -914,7 +913,6 @@
"no_shared_albums_message": "Luo albumi, jotta voit jakaa kuvia ja videoita toisille",
"not_in_any_album": "Ei yhdessäkään albumissa",
"note_apply_storage_label_to_previously_uploaded assets": "Huom: Jotta voit soveltaa tallennustunnistetta aiemmin ladattuihin kohteisiin, suorita",
"note_unlimited_quota": "Huomio: Syötä 0 rajoittamatonta kiintiötä varten",
"notes": "Muistiinpanot",
"notification_toggle_setting_description": "Ota sähköposti-ilmoitukset käyttöön",
"notifications": "Ilmoitukset",
@@ -1352,4 +1350,4 @@
"yes": "Kyllä",
"you_dont_have_any_shared_links": "Sinulla ei ole jaettuja linkkejä",
"zoom_image": "Zoomaa kuvaa"
}
}

View File

@@ -66,6 +66,11 @@
"forcing_refresh_library_files": "Forcer le rafraîchissement de tous les fichiers de la bibliothèque",
"image_format": "Format",
"image_format_description": "WebP produit des fichiers plus petits que JPEG, mais son encodage est plus lent.",
"image_fullsize_description": "Image en taille réelle, sans métadonnées, utilisée lors d'un zoom",
"image_fullsize_enabled": "Activer la génération d'image en taille d'origine",
"image_fullsize_enabled_description": "Générer une image en taille réelle pour les formats non compatibles avec le web. Lorsque l'option « Préférer l'aperçu intégré » est activée, les aperçus intégrés sont utilisés directement sans conversion. Cette option n'affecte pas les formats compatibles avec le web tels que JPEG.",
"image_fullsize_quality_description": "Qualité de l'image en taille réelle de 1 à 100. Une valeur plus élevée est meilleure, mais produit des fichiers plus volumineux.",
"image_fullsize_title": "Paramètres des images en taille réelle",
"image_prefer_embedded_preview": "Préférer l'aperçu intégré",
"image_prefer_embedded_preview_setting_description": "Utiliser les miniatures intégrées dans les photos au format RAW comme entrées pour le traitement d'image quand elles sont disponibles. Cela peut donner des couleurs plus justes pour certaines images, mais la qualité des miniatures est dépendant de l'appareil photo et l'image peut avoir des artéfacts de compression.",
"image_prefer_wide_gamut": "Préférer une gamme de couleurs étendue",
@@ -162,7 +167,6 @@
"no_pattern_added": "Aucun schéma d'exclusion n'a été ajouté",
"note_apply_storage_label_previous_assets": "Remarque: pour appliquer l'étiquette de stockage à des médias précédemment envoyés, exécutez la commande",
"note_cannot_be_changed_later": "REMARQUE: Il n'est pas possible de modifier ce paramètre ultérieurement!",
"note_unlimited_quota": "Note: saisir 0 pour un quota illimité",
"notification_email_from_address": "Depuis l'adresse",
"notification_email_from_address_description": "Adresse courriel de l'expéditeur, par exemple: « Serveur de photos Immich <nepasrepondre@exemple.org> »",
"notification_email_host_description": "Hôte du serveur de messagerie électronique (par exemple, smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Vidéos en boucle",
"loop_videos_description": "Activer pour voir la vidéo en boucle dans le lecteur détaillé.",
"main_branch_warning": "Vous utilisez une version de développement. Nous vous recommandons fortement d'utiliser une version stable!",
"main_menu": "Menu principal",
"make": "Marque",
"manage_shared_links": "Gérer les liens partagés",
"manage_sharing_with_partners": "Gérer le partage avec les partenaires",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Créer un album pour partager vos photos et vidéos avec les personnes de votre réseau",
"not_in_any_album": "Dans aucun album",
"note_apply_storage_label_to_previously_uploaded assets": "Note: Pour appliquer l'étiquette de stockage aux médias déjà envoyés, lancer la",
"note_unlimited_quota": "Note: Saisir 0 pour définir un quota illimité",
"notes": "Notes",
"notification_toggle_setting_description": "Activer les notifications par courriel",
"notifications": "Notifications",
@@ -987,6 +991,7 @@
"permanently_deleted_asset": "Média supprimé définitivement",
"permanently_deleted_assets_count": "{count, plural, one {# média définitivement supprimé} other {# médias définitivement supprimés}}",
"person": "Personne",
"person_birthdate": "Né(e) le {date}",
"person_hidden": "{name}{hidden, select, true { (caché)} other {}}",
"photo_shared_all_users": "Il semble que vous ayez partagé vos photos avec tous les utilisateurs ou que vous n'ayez aucun utilisateur avec qui les partager.",
"photos": "Photos",
@@ -1078,6 +1083,8 @@
"remove_from_album": "Supprimer de l'album",
"remove_from_favorites": "Supprimer des favoris",
"remove_from_shared_link": "Supprimer des liens partagés",
"remove_memory": "Supprimer le souvenir",
"remove_photo_from_memory": "Supprimer la photo de ce souvenir",
"remove_url": "Supprimer l'URL",
"remove_user": "Supprimer l'utilisateur",
"removed_api_key": "Clé API supprimée: {name}",
@@ -1148,6 +1155,7 @@
"searching_locales": "Recherche des paramètres régionaux...",
"second": "Seconde",
"see_all_people": "Voir toutes les personnes",
"select": "Sélectionner",
"select_album_cover": "Sélectionner la couverture d'album",
"select_all": "Tout sélectionner",
"select_all_duplicates": "Sélectionner tous les doublons",
@@ -1362,6 +1370,7 @@
"view_name": "Vue",
"view_next_asset": "Voir le média suivant",
"view_previous_asset": "Voir le média précédent",
"view_qr_code": "Voir le QR code",
"view_stack": "Afficher la pile",
"visibility_changed": "Visibilité changée pour {count, plural, one {# personne} other {# personnes}}",
"waiting": "En attente",
@@ -1374,4 +1383,4 @@
"yes": "Oui",
"you_dont_have_any_shared_links": "Vous n'avez aucun lien partagé",
"zoom_image": "Zoomer"
}
}

62
i18n/gl.json Normal file
View File

@@ -0,0 +1,62 @@
{
"about": "Acerca de",
"account": "Conta",
"account_settings": "Configuración da conta",
"acknowledge": "De acordo",
"action": "Acción",
"actions": "Accións",
"active": "Activo",
"activity": "Actividade",
"activity_changed": "A actividade está {enabled, select, true {habilitada} other {deshabilitada}}",
"add": "Engadir",
"add_a_description": "Engadir unha descrición",
"add_a_location": "Engadir unha localización",
"add_a_name": "Engadir un nome",
"add_a_title": "Engadir un título",
"add_exclusion_pattern": "Engadir patrón de exclusión",
"add_import_path": "Engadir ruta de importación",
"add_location": "Engadir localización",
"add_more_users": "Engadir máis usuarios",
"add_partner": "Engadir compañeiro",
"add_path": "Engadir ruta",
"add_photos": "Engadir fotos",
"add_to": "Engadir a…",
"add_to_album": "Engadir ao álbum",
"add_to_shared_album": "Engadir ao álbum compartido",
"add_url": "Engadir URL",
"added_to_archive": "Engadido ao arquivo",
"added_to_favorites": "Engadido a favoritos",
"added_to_favorites_count": "Engadidos {count, number} a favoritos",
"admin": {
"authentication_settings": "Configuración de autenticación",
"authentication_settings_description": "Xestionar contrasinal, OAuth e outros parámetros de autenticación",
"authentication_settings_disable_all": "Estás seguro de deshabilitar todos os métodos de inicio de sesión? Iniciar a sesión quedará completamente deshabilitado.",
"authentication_settings_reenable": "Para rehabilitala, usa un <link>Comando do servidor</link>.",
"background_task_job": "Tarefas en segundo plano",
"backup_database": "Respaldo da base de datos",
"backup_database_enable_description": "Habilitar as copias de seguridade da base de datos",
"backup_keep_last_amount": "Cantidade de copias de seguridade previas a manter",
"backup_settings": "Configuración de copias de seguridade",
"backup_settings_description": "Xestionar a configuración das copias de seguridade da base de datos",
"check_all": "Comprobar todo",
"cleared_jobs": "Traballos borrados para: {job}",
"config_set_by_file": "As configuracións están actualmente seleccionadas por un ficheiro de configuracións",
"confirm_delete_library": "Estás seguro de que queres eliminar a biblioteca {library}?",
"exclusion_pattern_description": "Os patróns de exclusión permítenche ignorar ficheiros e cartafoles ao escanear a túa biblioteca. Isto é útil se tes cartafoles que conteñen ficheiros que non queres importar, coma ficheiros RAW.",
"external_library_created_at": "Biblioteca externa (creada o {date})",
"external_library_management": "Xestión de bibliotecas externas",
"face_detection": "Detección de caras",
"job_settings": "Configuración de tarefas",
"job_settings_description": "Administrar tarefas simultáneas",
"job_status": "Estado da tarefa",
"jobs_failed": "{jobCount, one {# errado}, plural, other {# errados}}",
"note_cannot_be_changed_later": "NOTA: Non editable posteriormente!",
"notification_email_host_description": "Host do servidor de correo electrónico (p. ex.: smtp.immich.app)",
"notification_email_ignore_certificate_errors": "Ignorar erros de certificado",
"notification_email_ignore_certificate_errors_description": "Ignorar erros de validación de certificados TLS (non recomendado)",
"notification_settings": "Configuración de notificacións"
},
"year": "Ano",
"yes": "Si",
"zoom_image": "Acercar imaxe"
}

View File

@@ -44,11 +44,11 @@
"cleanup": "ניקוי",
"cleared_jobs": "נוקו משימות עבור: {job}",
"config_set_by_file": "התצורה מוגדרת כעת על ידי קובץ תצורה",
"confirm_delete_library": "האם את/ה בטוח/ה שברצונך למחוק את הספרייה {library}?",
"confirm_delete_library_assets": "האם את/ה בטוח/ה שברצונך למחוק את הספרייה הזו? זה ימחק את {count, plural, one {נכס # המוכל} other {כל # הנכסים המוכלים}} בה מ-Immich ואינו ניתן לביטול. קבצים יישארו בדיסק.",
"confirm_delete_library": "האם באמת ברצונך למחוק את הספרייה {library}?",
"confirm_delete_library_assets": "האם באמת ברצונך למחוק את הספרייה הזו? זה ימחק את {count, plural, one {נכס # המוכל} other {כל # הנכסים המוכלים}} בה מ-Immich ואינו ניתן לביטול. קבצים יישארו בדיסק.",
"confirm_email_below": "כדי לאשר, יש להקליד \"{email}\" למטה",
"confirm_reprocess_all_faces": "האם את/ה בטוח/ה שברצונך לעבד מחדש את כל הפנים? זה גם ינקה אנשים בעלי שם.",
"confirm_user_password_reset": "האם את/ה בטוח/ה שברצונך לאפס את הסיסמה של המשתמש {user}?",
"confirm_reprocess_all_faces": "האם באמת ברצונך לעבד מחדש את כל הפנים? זה גם ינקה אנשים בעלי שם.",
"confirm_user_password_reset": "האם באמת ברצונך לאפס את הסיסמה של המשתמש {user}?",
"create_job": "צור עבודה",
"cron_expression": "ביטוי cron",
"cron_expression_description": "הגדר את מרווח הסריקה באמצעות תבנית ה- cron. למידע נוסף נא לפנות למשל אל <link>Crontab Guru</link>",
@@ -66,12 +66,17 @@
"forcing_refresh_library_files": "כפיית רענון של כל קבצי הספרייה",
"image_format": "פורמט",
"image_format_description": "WebP מפיק קבצים קטנים יותר מ JPEG, אך הוא איטי יותר לקידוד.",
"image_fullsize_description": "תמונה בגודל מלא עם מטא-נתונים שהוסרו, משמשת כאשר התמונה מוצגת מקרוב",
"image_fullsize_enabled": "אפשר יצירה של תמונות בגודל מלא",
"image_fullsize_enabled_description": "צור תמונה בגודל מלא עבור פורמטים לא ידידותיים לרשת. כאשר האפשרות \"העדף תצוגה מקדימה מוטמעת\" מופעלת, תצוגות מקדימות מוטמעות משמשות ישירות ללא המרה. אין השפעה על פורמטים ידידותיים לרשת כמו JPEG.",
"image_fullsize_quality_description": "איכות תמונה בגודל מלא מ-1 עד 100. איכות גבוהה יותר היא טובה יותר, אבל מייצרת קבצים גדולים יותר.",
"image_fullsize_title": "הגדרות תמונה בגודל מלא",
"image_prefer_embedded_preview": "העדף תצוגה מקדימה מוטמעת",
"image_prefer_embedded_preview_setting_description": "השתמש בתצוגות מקדימות מוטמעות בתמונות RAW כקלט לעיבוד תמונה כאשר זמינות. זה יכול להפיק צבעים מדויקים יותר עבור תמונות מסוימות, אבל האיכות של התצוגה המקדימה היא תלוית מצלמה ולתמונה עשויים להיות יותר פגמי דחיסה.",
"image_prefer_embedded_preview_setting_description": "השתמש בתצוגות מקדימות מוטמעות בתמונות RAW כקלט לעיבוד תמונה וכאשר זמינות. זה יכול להפיק צבעים מדויקים יותר עבור תמונות מסוימות, אבל האיכות של התצוגה המקדימה היא תלוית מצלמה ולתמונה עשויים להיות יותר פגמי דחיסה.",
"image_prefer_wide_gamut": "העדף סולם צבעים רחב",
"image_prefer_wide_gamut_setting_description": "השתמש ב-Display P3 לתמונות ממוזערות. זה משמר טוב יותר את החיוניות של תמונות עם מרחבי צבע רחבים, אבל תמונות עשויות להופיע אחרת במכשירים ישנים עם גרסת דפדפן ישנה. תמונות sRGB נשמרות כ-sRGB כדי למנוע שינויי צבע.",
"image_preview_description": "תמונה בגודל בינוני עם מטא-נתונים שהוסרו, משמשת בעת צפייה בנכס בודד ועבור למידת מכונה",
"image_preview_quality_description": "איכות תצוגה מקדימה בין 1-100. גבוה יותר הוא טוב יותר, אבל מייצר קבצים גדולים יותר ויכול להפחית את תגובתיות היישום. הגדרת ערך נמוך עשויה להשפיע על איכות תוצאות של למידת מכונה.",
"image_preview_quality_description": "איכות תצוגה מקדימה מ-1 עד 100. איכות גבוהה יותר היא טובה יותר, אבל מייצרת קבצים גדולים יותר ויכולה להפחית את תגובתיות היישום. הגדרת ערך נמוך עשויה להשפיע על איכות תוצאות של למידת מכונה.",
"image_preview_title": "הגדרות תצוגה מקדימה",
"image_quality": "איכות",
"image_resolution": "רזולוציה",
@@ -79,7 +84,7 @@
"image_settings": "הגדרות תמונה",
"image_settings_description": "ניהול האיכות והרזולוציה של תמונות שנוצרו",
"image_thumbnail_description": "תמונה ממוזערת קטנה עם מטא-נתונים שהוסרו, משמשת בעת צפייה בקבוצות של תמונות כמו ציר הזמן הראשי",
"image_thumbnail_quality_description": "איכות תמונה ממוזערת בין 1-100. גבוה יותר הוא טוב יותר, אבל מייצר קבצים גדולים יותר ויכול להפחית את תגובתיות היישום.",
"image_thumbnail_quality_description": "איכות תמונה ממוזערת מ-1 עד 100. איכות גבוהה יותר היא טובה יותר, אבל מייצרת קבצים גדולים יותר ויכולה להפחית את תגובתיות היישום.",
"image_thumbnail_title": "הגדרות תמונה ממוזערת",
"job_concurrency": "בו-זמניות של {job}",
"job_created": "עבודה נוצרה",
@@ -162,7 +167,6 @@
"no_pattern_added": "לא נוספה תבנית",
"note_apply_storage_label_previous_assets": "הערה: כדי להחיל את תווית האחסון על נכסים שהועלו בעבר, הפעל את",
"note_cannot_be_changed_later": "הערה: אי אפשר לשנות זאת מאוחר יותר!",
"note_unlimited_quota": "הערה: הזן 0 עבור מכסת אחסון בלתי מוגבלת",
"notification_email_from_address": "מכתובת",
"notification_email_from_address_description": "כתובת דוא\"ל של השולח, לדוגמה: \"Immich שרת תמונות <noreply@example.com>\"",
"notification_email_host_description": "מארח שרת הדוא\"ל (למשל smtp.immich.app)",
@@ -225,7 +229,7 @@
"search_jobs": "חיפוש עבודות…",
"send_welcome_email": "שלח דוא\"ל ברוכים הבאים",
"server_external_domain_settings": "דומיין חיצוני",
"server_external_domain_settings_description": "דומיין עבור קישורים משותפים ציבוריים, כולל http(s)://",
"server_external_domain_settings_description": "דומיין עבור קישורים משותפים ציבוריים, כולל //:http(s)",
"server_public_users": "משתמשים ציבוריים",
"server_public_users_description": "כל המשתמשים (שם ודוא\"ל) מופיעים בעת הוספת משתמש לאלבומים משותפים. כאשר התכונה מושבתת, רשימת המשתמשים תהיה זמינה רק למשתמשים בעלי הרשאות ניהול.",
"server_settings": "הגדרות שרת",
@@ -240,7 +244,7 @@
"storage_template_date_time_sample": "זמן לדוגמא {date}",
"storage_template_enable_description": "הפעל מנוע תבנית אחסון",
"storage_template_hash_verification_enabled": "אימות גיבוב מופעל",
"storage_template_hash_verification_enabled_description": "מאפשר אימות גיבוב, אל תשבית/י זאת אלא אם כן את/ה בטוח/ה בהשלכות",
"storage_template_hash_verification_enabled_description": "מאפשר אימות גיבוב, אין להשבית זאת אלא אם יש לך ודאות לגבי ההשלכות",
"storage_template_migration": "העברת תבנית אחסון",
"storage_template_migration_description": "החל את ה<link>{template}</link> הנוכחית על נכסים שהועלו בעבר",
"storage_template_migration_info": "תבנית האחסון תמיר את כל ההרחבות לאותיות קטנות. שינויים בתבנית יחולו רק על נכסים חדשים. כדי להחיל באופן רטרואקטיבי את התבנית על נכסים שהועלו בעבר, הפעל את <link>{job}</link>.",
@@ -369,16 +373,16 @@
"album_added": "אלבום נוסף",
"album_added_notification_setting_description": "קבלת הודעת דוא\"ל כאשר מוסיפים אותך לאלבום משותף",
"album_cover_updated": "עטיפת האלבום עודכנה",
"album_delete_confirmation": "את/ה בטוח/ה שברצונך למחוק את האלבום {album}?",
"album_delete_confirmation": "האם באמת ברצונך למחוק את האלבום {album}?",
"album_delete_confirmation_description": "אם האלבום הזה משותף, משתמשים אחרים לא יוכלו לגשת אליו יותר.",
"album_info_updated": "מידע האלבום עודכן",
"album_leave": "לעזוב אלבום?",
"album_leave_confirmation": "האם את/ה בטוח/ה שברצונך לעזוב את {album}?",
"album_leave_confirmation": "האם באמת ברצונך לעזוב את {album}?",
"album_name": "שם האלבום",
"album_options": "אפשרויות האלבום",
"album_remove_user": "להסיר משתמש?",
"album_remove_user_confirmation": "האם את/ה בטוחה שברצונך להסיר את {user}?",
"album_share_no_users": "נראה שאת/ה שיתפת את האלבום הזה עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
"album_remove_user_confirmation": "האם באמת ברצונך להסיר את {user}?",
"album_share_no_users": "נראה ששיתפת את האלבום הזה עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
"album_updated": "אלבום עודכן",
"album_updated_setting_description": "קבל הודעת דוא\"ל כאשר לאלבום משותף יש נכסים חדשים",
"album_user_left": "עזב את {album}",
@@ -408,7 +412,7 @@
"archive_size_description": "הגדר את גודל הארכיון להורדות (ב-GiB)",
"archived_count": "{count, plural, other {# הועברו לארכיון}}",
"are_these_the_same_person": "האם אלה אותו האדם?",
"are_you_sure_to_do_this": "האם את/ה בטוח/ה שברצונך לעשות את זה?",
"are_you_sure_to_do_this": "האם באמת ברצונך לעשות את זה?",
"asset_added_to_album": "נוסף לאלבום",
"asset_adding_to_album": "מוסיף לאלבום…",
"asset_description_updated": "תיאור הנכס עודכן",
@@ -429,7 +433,7 @@
"assets_moved_to_trash_count": "{count, plural, one {נכס # הועבר} other {# נכסים הועברו}} לאשפה",
"assets_permanently_deleted_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
"assets_removed_count": "{count, plural, one {נכס # הוסר} other {# נכסים הוסרו}}",
"assets_restore_confirmation": "האם את/ה בטוח/ה שברצונך לשחזר את כל הנכסים שבאשפה? את/ה לא יכול/ה לבטל את הפעולה הזו! שים לב שלא ניתן לשחזר נכסים לא מקוונים בדרך זו.",
"assets_restore_confirmation": "האם באמת ברצונך לשחזר את כל הנכסים שבאשפה? אין באפשרותך לבטל את הפעולה הזו! יש לשים לב שלא ניתן לשחזר נכסים לא מקוונים בדרך זו.",
"assets_restored_count": "{count, plural, one {נכס # שוחזר} other {# נכסים שוחזרו}}",
"assets_trashed_count": "{count, plural, one {נכס # הושלך} other {# נכסים הושלכו}} לאשפה",
"assets_were_part_of_album_count": "{count, plural, one {נכס היה} other {נכסים היו}} כבר חלק מהאלבום",
@@ -443,9 +447,9 @@
"bugs_and_feature_requests": "באגים & בקשות לתכונות",
"build": "גרסת בנייה",
"build_image": "גרסת תוכנה",
"bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!",
"bulk_keep_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להשאיר {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה יפתור את כל הקבוצות הכפולות מבלי למחוק דבר.",
"bulk_trash_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להעביר לאשפה בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הגדול ביותר של כל קבוצה ויעביר לאשפה את כל שאר הכפילויות.",
"bulk_delete_duplicates_confirmation": "האם באמת ברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. אין באפשרותך לבטל את הפעולה הזו!",
"bulk_keep_duplicates_confirmation": "האם באמת ברצונך להשאיר {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה יפתור את כל הקבוצות הכפולות מבלי למחוק דבר.",
"bulk_trash_duplicates_confirmation": "האם באמת ברצונך להעביר לאשפה בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הגדול ביותר של כל קבוצה ויעביר לאשפה את כל שאר הכפילויות.",
"buy": "רכוש את Immich",
"camera": "מצלמה",
"camera_brand": "מותג המצלמה",
@@ -453,7 +457,7 @@
"cancel": "ביטול",
"cancel_search": "ביטול חיפוש",
"cannot_merge_people": "לא ניתן למזג אנשים",
"cannot_undo_this_action": ת/ה לא יכול/ה לבטל את הפעולה הזו!",
"cannot_undo_this_action": ין באפשרותך לבטל את הפעולה הזו!",
"cannot_update_the_description": "לא ניתן לעדכן את התיאור",
"change_date": "שנה תאריך",
"change_expiration_time": "שנה את זמן התפוגה",
@@ -461,7 +465,7 @@
"change_name": "שנה שם",
"change_name_successfully": "השם שונה בהצלחה",
"change_password": "שינוי סיסמה",
"change_password_description": "זאת או הפעם הראשונה שאת/ה מתחבר/ת למערכת או שנעשתה בקשה לשינוי הסיסמה שלך. נא להזין את הסיסמה החדשה למטה.",
"change_password_description": "זאת או הפעם הראשונה שהתחברת למערכת או שנעשתה בקשה לשינוי הסיסמה שלך. נא להזין את הסיסמה החדשה למטה.",
"change_your_password": "החלף את הסיסמה שלך",
"changed_visibility_successfully": "הנראות שונתה בהצלחה",
"check_all": "לסמן הכל",
@@ -485,9 +489,9 @@
"comments_are_disabled": "תגובות מושבתות",
"confirm": "אישור",
"confirm_admin_password": "אישור סיסמת מנהל",
"confirm_delete_face": "האם את/ה בטוח/ה שברצונך למחוק את הפנים של {name} מהנכס?",
"confirm_delete_shared_link": "האם את/ה בטוח/ה שברצונך למחוק את הקישור המשותף הזה?",
"confirm_keep_this_delete_others": "כל שאר הנכסים בערימה יימחקו למעט נכס זה. האם את/ה בטוח/ה שברצונך להמשיך?",
"confirm_delete_face": "האם באמת ברצונך למחוק את הפנים של {name} מהנכס?",
"confirm_delete_shared_link": "האם באמת ברצונך למחוק את הקישור המשותף הזה?",
"confirm_keep_this_delete_others": "כל שאר הנכסים בערימה יימחקו למעט נכס זה. האם באמת ברצונך להמשיך?",
"confirm_password": "אשר סיסמה",
"contain": "מכיל",
"context": "הקשר",
@@ -536,8 +540,8 @@
"default_locale_description": "פורמט תאריכים ומספרים מבוסס שפת הדפדפן שלך",
"delete": "מחק",
"delete_album": "מחק אלבום",
"delete_api_key_prompt": "האם את/ה בטוח/ה שברצונך למחוק מפתח ה-API הזה?",
"delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק לצמיתות את הכפילויות האלה?",
"delete_api_key_prompt": "האם באמת ברצונך למחוק מפתח ה-API הזה?",
"delete_duplicates_confirmation": "האם באמת ברצונך למחוק לצמיתות את הכפילויות האלה?",
"delete_face": "מחק פנים",
"delete_key": "מחק מפתח",
"delete_library": "מחק ספרייה",
@@ -545,7 +549,7 @@
"delete_others": "מחק אחרים",
"delete_shared_link": "מחק קישור משותף",
"delete_tag": "מחק תג",
"delete_tag_confirmation_prompt": "האם את/ה בטוח/ה שברצונך למחוק תג {tagName}?",
"delete_tag_confirmation_prompt": "האם באמת ברצונך למחוק תג {tagName}?",
"delete_user": "מחק משתמש",
"deleted_shared_link": "קישור משותף נמחק",
"deletes_missing_assets": "מוחק נכסים שחסרים בדיסק",
@@ -601,7 +605,7 @@
"editor_crop_tool_h2_rotation": "סיבוב",
"email": "דוא\"ל",
"empty_trash": "רוקן אשפה",
"empty_trash_confirmation": "האם את/ה בטוח/ה שברצונך לרוקן את האשפה? זה יסיר לצמיתות את כל הנכסים באשפה מImmich.\nאת/ה לא יכול/ה לבטל פעולה זו!",
"empty_trash_confirmation": "האם באמת ברצונך לרוקן את האשפה? זה יסיר לצמיתות את כל הנכסים באשפה מImmich.\nאין באפשרותך לבטל פעולה זו!",
"enable": "אפשר",
"enabled": "מופעל",
"end_date": "תאריך סיום",
@@ -645,7 +649,7 @@
"incorrect_email_or_password": "דוא\"ל או סיסמה שגויים",
"paths_validation_failed": "{paths, plural, one {נתיב # נכשל} other {# נתיבים נכשלו}} אימות",
"profile_picture_transparent_pixels": "תמונות פרופיל אינן יכולות לכלול פיקסלים שקופים. נא להגדיל ו/או להזיז את התמונה.",
"quota_higher_than_disk_size": "את/ה מגדיר/ה מכסה גבוהה יותר מגודל הדיסק",
"quota_higher_than_disk_size": "הגדרת מכסה גבוהה יותר מגודל הדיסק",
"repair_unable_to_check_items": "לא ניתן לסמן {count, select, one {פריט} other {פריטים}}",
"unable_to_add_album_users": "לא ניתן להוסיף משתמשים לאלבום",
"unable_to_add_assets_to_shared_link": "לא ניתן להוסיף נכסים לקישור משותף",
@@ -665,7 +669,7 @@
"unable_to_complete_oauth_login": "לא ניתן להשלים התחברות OAuth",
"unable_to_connect": "לא ניתן להתחבר",
"unable_to_connect_to_server": "לא ניתן להתחבר לשרת",
"unable_to_copy_to_clipboard": "לא ניתן להעתיק ללוח, ודא שאת/ה ניגש/ת לדף דרך https",
"unable_to_copy_to_clipboard": "לא ניתן להעתיק ללוח, יש לודא שניגשת לדף דרך https",
"unable_to_create_admin_account": "לא ניתן ליצור חשבון מנהל",
"unable_to_create_api_key": "לא ניתן ליצור מפתח API חדש",
"unable_to_create_library": "לא ניתן ליצור ספרייה",
@@ -827,7 +831,7 @@
"kept_this_deleted_others": "נכס זה נשמר ונמחקו {count, plural, one {נכס #} other {# נכסים}}",
"keyboard_shortcuts": "קיצורי מקלדת",
"language": "שפה",
"language_setting_description": "בחר/י את השפה המועדפת עליך",
"language_setting_description": "בחר את השפה המועדפת עליך",
"last_seen": "נראה לאחרונה",
"latest_version": "גרסה עדכנית ביותר",
"latitude": "קו רוחב",
@@ -852,13 +856,14 @@
"logged_out_device": "מכשיר מנותק",
"login": "כניסה",
"login_has_been_disabled": "הכניסה הושבתה.",
"logout_all_device_confirmation": "את/ה בטוח/ה שברצונך להתנתק מכל המכשירים?",
"logout_this_device_confirmation": "את/ה בטוח/ה שברצונך להתנתק מהמכשיר הזה?",
"logout_all_device_confirmation": "האם באמת ברצונך להתנתק מכל המכשירים?",
"logout_this_device_confirmation": "האם באמת ברצונך להתנתק מהמכשיר הזה?",
"longitude": "קו אורך",
"look": "מראה",
"loop_videos": "הפעלה חוזרת של סרטונים",
"loop_videos_description": "אפשר הפעלה חוזרת אוטומטית של סרטון במציג הפרטים.",
"main_branch_warning": "את/ה משתמש/ת בגרסת פיתוח; אנחנו ממליצים בחום להשתמש בגרסה יציבה!",
"main_branch_warning": "הגרסה המותקנת היא גרסת פיתוח; אנחנו ממליצים בחום להשתמש בגרסה יציבה!",
"main_menu": "תפריט ראשי",
"make": "תוצרת",
"manage_shared_links": "ניהול קישורים משותפים",
"manage_sharing_with_partners": "ניהול שיתוף עם שותפים",
@@ -874,14 +879,14 @@
"matches": "התאמות",
"media_type": "סוג מדיה",
"memories": "זכרונות",
"memories_setting_description": יהול מה שאת/ה רואה בזכרונות שלך",
"memories_setting_description": הל את מה שרואים בזכרונות שלך",
"memory": "זיכרון",
"memory_lane_title": "משעול הזיכרונות {title}",
"menu": "תפריט",
"merge": "מזג",
"merge_people": "מזג אנשים",
"merge_people_limit": "את/ה יכול/ה למזג רק עד 5 פנים בכל פעם",
"merge_people_prompt": "האם את/ה רוצה למזג את האנשים האלה? פעולה זו היא בלתי הפיכה.",
"merge_people_limit": "באפשרותך למזג רק עד 5 פנים בכל פעם",
"merge_people_prompt": "האם ברצונך למזג את האנשים האלה? פעולה זו היא בלתי הפיכה.",
"merge_people_successfully": "מיזוג אנשים בוצע בהצלחה",
"merged_people_count": "{count, plural, one {אדם # מוזג} other {# אנשים מוזגו}}",
"minimize": "מזער",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "צור אלבום כדי לשתף תמונות וסרטונים עם אנשים ברשת שלך",
"not_in_any_album": "לא בשום אלבום",
"note_apply_storage_label_to_previously_uploaded assets": "הערה: כדי להחיל את תווית האחסון על נכסים שהועלו בעבר, הפעל את",
"note_unlimited_quota": "הערה: הזן 0 עבור מכסה בלתי מוגבלת",
"notes": "הערות",
"notification_toggle_setting_description": "אפשר התראות דוא\"ל",
"notifications": "התראות",
@@ -937,9 +941,9 @@
"oldest_first": "הישן ביותר ראשון",
"onboarding": "היכרות",
"onboarding_privacy_description": "התכונות (האופציונליות) הבאות מסתמכות על שירותים חיצוניים, וניתנות לביטול בכל עת בהגדרות הניהול.",
"onboarding_theme_description": "בחר/י את צבע ערכת הנושא עבור ההתקנה שלך. את/ה יכול/ה לשנות את זה מאוחר יותר בהגדרות שלך.",
"onboarding_theme_description": "יש לבחור את צבע ערכת הנושא עבור ההתקנה שלך. באפשרותך לשנות את זה מאוחר יותר בהגדרות שלך.",
"onboarding_welcome_description": "בואו נכין את ההתקנה שלכם עם כמה הגדרות נפוצות.",
"onboarding_welcome_user": "ברוכ/ה הבא/ה, {user}",
"onboarding_welcome_user": "ברוך בואך, {user}",
"online": "מקוון",
"only_favorites": "רק מועדפים",
"open_in_map_view": "פתח בתצוגת מפה",
@@ -983,12 +987,13 @@
"permanent_deletion_warning_setting_description": "הצג אזהרה בעת מחיקת נכסים לצמיתות",
"permanently_delete": "מחק לצמיתות",
"permanently_delete_assets_count": "מחק לצמיתות {count, plural, one {נכס} other {נכסים}}",
"permanently_delete_assets_prompt": "האם את/ה בטוח/ה שברצונך למחוק לצמיתות {count, plural, one {נכס זה?} other {<b>#</b> נכסים אלה?}}זה גם יסיר {count, plural, one {אותו מאלבומו} other {אותם מאלבומם}}.",
"permanently_delete_assets_prompt": "האם באמת ברצונך למחוק לצמיתות {count, plural, one {נכס זה?} other {<b>#</b> נכסים אלה?}}זה גם יסיר {count, plural, one {אותו מאלבומו} other {אותם מאלבומם}}.",
"permanently_deleted_asset": "נכס נמחק לצמיתות",
"permanently_deleted_assets_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
"person": "אדם",
"person_birthdate": "נולד בתאריך {date}",
"person_hidden": "{name}{hidden, select, true { (מוסתר)} other {}}",
"photo_shared_all_users": "נראה שאת/ה שיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
"photo_shared_all_users": "נראה ששיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
"photos": "תמונות",
"photos_and_videos": "תמונות & סרטונים",
"photos_count": "{count, plural, one {תמונה {count, number}} other {{count, number} תמונות}}",
@@ -1038,9 +1043,9 @@
"purchase_per_server": "עבור שרת",
"purchase_per_user": "עבור משתמש",
"purchase_remove_product_key": "הסר מפתח מוצר",
"purchase_remove_product_key_prompt": "האם את/ה בטוח/ה שאת/ה רוצה להסיר את מפתח המוצר?",
"purchase_remove_product_key_prompt": "האם באמת ברצונך להסיר את מפתח המוצר?",
"purchase_remove_server_product_key": "הסר מפתח מוצר של שרת",
"purchase_remove_server_product_key_prompt": "האם את/ה בטוח/ה שאת/ה רוצה להסיר את מפתח המוצר של השרת?",
"purchase_remove_server_product_key_prompt": "האם באמת ברצונך להסיר את מפתח המוצר של השרת?",
"purchase_server_description_1": "עבור כל השרת",
"purchase_server_description_2": "מעמד תומך",
"purchase_server_title": "שרת",
@@ -1070,14 +1075,16 @@
"refreshing_metadata": "מרענן מטא-נתונים",
"regenerating_thumbnails": "מחדש תמונות ממוזערות",
"remove": "הסר",
"remove_assets_album_confirmation": "האם את/ה בטוח/ה שברצונך להסיר {count, plural, one {נכס #} other {# נכסים}} מהאלבום?",
"remove_assets_shared_link_confirmation": "האם את/ה בטוח/ה שברצונך להסיר {count, plural, one {נכס #} other {# נכסים}} מהקישור המשותף הזה?",
"remove_assets_album_confirmation": "האם באמת ברצונך להסיר {count, plural, one {נכס #} other {# נכסים}} מהאלבום?",
"remove_assets_shared_link_confirmation": "האם באמת ברצונך להסיר {count, plural, one {נכס #} other {# נכסים}} מהקישור המשותף הזה?",
"remove_assets_title": "הסר נכסים?",
"remove_custom_date_range": "הסר טווח תאריכים מותאם",
"remove_deleted_assets": "הסר קבצים לא מקוונים",
"remove_from_album": "הסר מאלבום",
"remove_from_favorites": "הסר מהמועדפים",
"remove_from_shared_link": "הסר מקישור משותף",
"remove_memory": "הסר זיכרון",
"remove_photo_from_memory": "הסר תמונה מזיכרון זה",
"remove_url": "הסר URL",
"remove_user": "הסר משתמש",
"removed_api_key": "מפתח API הוסר: {name}",
@@ -1115,7 +1122,7 @@
"saved_api_key": "מפתח API שמור",
"saved_profile": "פרופיל שמור",
"saved_settings": "הגדרות שמורות",
"say_something": "תגיד/י משהו",
"say_something": "להגיד משהו",
"scan_all_libraries": "סרוק את כל הספריות",
"scan_library": "סרוק",
"scan_settings": "הגדרות סריקה",
@@ -1148,6 +1155,7 @@
"searching_locales": "מחפש אזורי שפה...",
"second": "שנייה",
"see_all_people": "ראה את כל האנשים",
"select": "בחר",
"select_album_cover": "בחר עטיפת אלבום",
"select_all": "בחר הכל",
"select_all_duplicates": "בחר את כל הכפילויות",
@@ -1305,7 +1313,7 @@
"unlinked_oauth_account": "בוטל קישור חשבון OAuth",
"unmute_memories": "בטל השתקת זיכרונות",
"unnamed_album": "אלבום ללא שם",
"unnamed_album_delete_confirmation": "את/ה בטוח/ה שברצונך למחוק את האלבום הזה?",
"unnamed_album_delete_confirmation": "האם באמת ברצונך למחוק את האלבום הזה?",
"unnamed_share": "שיתוף ללא שם",
"unsaved_change": "שינוי לא נשמר",
"unselect_all": "בטל בחירה בהכל",
@@ -1344,7 +1352,7 @@
"variables": "משתנים",
"version": "גרסה",
"version_announcement_closing": "החבר שלך, אלכס",
"version_announcement_message": "שלום לך! זמינה גרסה חדשה של Immich. אנא קח/י זמן מה לקרוא את <link>הערות הפרסום</link> כדי לוודא שההתקנה שלך עדכנית על מנת למנוע תצורות שגויות, במיוחד אם את/ה משתמש/ת ב-WatchTower או בכל מנגנון שמטפל בעדכון מופע ה-Immich שלך באופן אוטומטי.",
"version_announcement_message": "שלום לך! זמינה גרסה חדשה של Immich. נא לקחת זמן מה לקרוא את <link>הערות הפרסום</link> כדי לוודא שההתקנה שלך עדכנית על מנת למנוע תצורות שגויות, במיוחד אם נעשה שימוש ב-WatchTower או בכל מנגנון שמטפל בעדכון מופע ה-Immich שלך באופן אוטומטי.",
"version_history": "היסטוריית גרסאות",
"version_history_item": "{version} הותקנה ב-{date}",
"video": "סרטון",
@@ -1374,4 +1382,4 @@
"yes": "כן",
"you_dont_have_any_shared_links": "אין לך קישורים משותפים",
"zoom_image": "זום לתמונה"
}
}

View File

@@ -29,11 +29,17 @@
"added_to_favorites_count": "पसंदीदा में {count, number} जोड़ा गया",
"admin": {
"add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।",
"asset_offline_description": "यह बाहरी लाइब्रेरी एसेट अब डिस्क पर मौजूद नहीं है और इसे ट्रैश में डाल दिया गया है। यदि फ़ाइल को लाइब्रेरी के भीतर कहीं ले जाया गया था, तो नई संबंधित एसेट के लिए अपनी टाइमलाइन देखें। इस एसेट को वापस पाने के लिए, कृपया सुनिश्चित करें कि नीचे दिए गए फ़ाइल पथ को इम्मिच द्वारा एक्सेस किया जा सकता है और फिर लाइब्रेरी को स्कैन करें।",
"authentication_settings": "प्रमाणीकरण सेटिंग्स",
"authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें",
"authentication_settings_disable_all": "क्या आप वाकई सभी लॉगिन विधियों को अक्षम करना चाहते हैं? लॉगिन पूरी तरह से अक्षम कर दिया जाएगा।",
"authentication_settings_reenable": "पुनः सक्षम करने के लिए, <link>Server Command</link> का प्रयोग करे।",
"background_task_job": "पृष्ठभूमि कार्य",
"backup_database": "बैकअप डाटाबेस",
"backup_database_enable_description": "बैकअप डेटाबेस सक्रिय करें",
"backup_keep_last_amount": "पूर्व बैकअप क्षमता",
"backup_settings": "बैकअप सेटिंग्स",
"backup_settings_description": "डेटाबेस बैकअप सेटिंग्स प्रबंधन",
"check_all": "सभी चेक करें",
"cleared_jobs": "{job}: के लिए कार्य साफ़ कर दिए गए",
"config_set_by_file": "Config वर्तमान में एक config फ़ाइल द्वारा सेट किया गया है",
@@ -42,6 +48,9 @@
"confirm_email_below": "पुष्टि करने के लिए नीचे \"{email}\" टाइप करें",
"confirm_reprocess_all_faces": "क्या आप वाकई सभी चेहरों को दोबारा संसाधित करना चाहते हैं? इससे नामित लोग भी साफ हो जायेंगे।",
"confirm_user_password_reset": "क्या आप वाकई {user} का पासवर्ड रीसेट करना चाहते हैं?",
"create_job": "जॉब बनाएँ",
"cron_expression": "क्रॉन अभिव्यक्ति",
"cron_expression_description": "क्रॉन प्रारूप का उपयोग करके स्कैनिंग अंतराल सेट करें। अधिक जानकारी के लिए कृपया <link>क्रोनटैब गुरु</link> देखें",
"disable_login": "लॉगिन अक्षम करें",
"duplicate_detection_job_description": "समान छवियों का पता लगाने के लिए संपत्तियों पर मशीन लर्निंग चलाएं। यह कार्यक्षमता स्मार्ट खोज पर निर्भर करती है",
"exclusion_pattern_description": "Exclusion पैटर्न आपको अपनी लाइब्रेरी को स्कैन करते समय फ़ाइलों और फ़ोल्डरों को अनदेखा करने देता है। यह उपयोगी है यदि आपके पास ऐसे फ़ोल्डर हैं जिनमें ऐसी फ़ाइलें हैं जिन्हें आप आयात नहीं करना चाहते हैं, जैसे RAW फ़ाइलें।",
@@ -53,11 +62,14 @@
"failed_job_command": "कार्य {job} के लिए आदेश {command} विफल",
"force_delete_user_warning": "चेतावनी: इससे उपयोगकर्ता और सारा डेटा तुरंत हट जाएगा। इसे पूर्ववत नहीं किया जा सकता और फ़ाइलें पुनर्प्राप्त नहीं की जा सकतीं।",
"forcing_refresh_library_files": "सभी लाइब्रेरी फ़ाइलों को जबरन सामयिक करें",
"image_format": "प्रारूप",
"image_format_description": "वेबपी, जेपीईजी की तुलना में छोटी फ़ाइलें बनाता है, लेकिन एनकोड करने में धीमा है।",
"image_prefer_embedded_preview": "एम्बेडेड पूर्वावलोकन को प्राथमिकता दें",
"image_prefer_embedded_preview_setting_description": "जब उपलब्ध हो तो RAW फ़ोटो में एम्बेडेड पूर्वावलोकन का उपयोग इमेज प्रोसेसिंग के इनपुट के रूप में करें। यह कुछ छवियों के लिए अधिक सटीक रंग उत्पन्न कर सकता है, लेकिन पूर्वावलोकन की गुणवत्ता कैमरे पर निर्भर करती है और छवि में अधिक संपीड़न कलाकृतियाँ हो सकती हैं।",
"image_prefer_wide_gamut": "विस्तृत सरगम को प्राथमिकता दें",
"image_prefer_wide_gamut_setting_description": "थंबनेल के लिए डिस्प्ले P3 का उपयोग करें। यह विस्तृत कलरस्पेस वाली छवियों की जीवंतता को बेहतर ढंग से संरक्षित करता है, लेकिन पुराने ब्राउज़र संस्करण वाले पुराने डिवाइस पर छवियां अलग-अलग दिखाई दे सकती हैं। रंग परिवर्तन से बचने के लिए sRGB छवियों को sRGB के रूप में रखा जाता है।",
"image_preview_description": "मेटाडेटा रहित मध्यम आकार की छवि, जिसका उपयोग एकल संपत्ति देखने और मशीन लर्निंग के लिए होता है",
"image_preview_title": "पूर्वदर्शन सेटिंग्स",
"image_quality": "गुणवत्ता",
"image_settings": "छवि सेटिंग्स",
"image_settings_description": "उत्पन्न छवियों की गुणवत्ता और रिज़ॉल्यूशन प्रबंधित करें",
@@ -134,7 +146,6 @@
"no_pattern_added": "कोई पैटर्न नहीं जोड़ा गया",
"note_apply_storage_label_previous_assets": "नोट: पहले अपलोड की गई संपत्तियों पर स्टोरेज लेबल लागू करने के लिए, चलाएँ",
"note_cannot_be_changed_later": "नोट: इसे बाद में बदला नहीं जा सकता!",
"note_unlimited_quota": "नोट: असीमित कोटा के लिए 0 दर्ज करें",
"notification_email_from_address": "इस पते से",
"notification_email_from_address_description": "प्रेषक का ईमेल पता, उदाहरण के लिए: \"इमिच फोटो सर्वर <noreply@example.com>\"",
"notification_email_host_description": "ईमेल सर्वर का होस्ट (उदा. smtp.immitch.app)",
@@ -757,7 +768,6 @@
"no_shared_albums_message": "अपने नेटवर्क में लोगों के साथ फ़ोटो और वीडियो साझा करने के लिए एक एल्बम बनाएं",
"not_in_any_album": "किसी एलबम में नहीं",
"note_apply_storage_label_to_previously_uploaded assets": "नोट: पहले अपलोड की गई संपत्तियों पर स्टोरेज लेबल लागू करने के लिए, चलाएँ",
"note_unlimited_quota": "नोट: असीमित कोटा के लिए 0 दर्ज करें",
"notes": "टिप्पणियाँ",
"notification_toggle_setting_description": "ईमेल सूचनाएं सक्षम करें",
"notifications": "सूचनाएं",
@@ -1093,6 +1103,7 @@
"view_album": "एल्बम देखें",
"view_all": "सभी को देखें",
"view_all_users": "सभी उपयोगकर्ताओं को देखें",
"view_in_timeline": "टाइमलाइन में देखें",
"view_links": "लिंक देखें",
"view_next_asset": "अगली संपत्ति देखें",
"view_previous_asset": "पिछली संपत्ति देखें",

View File

@@ -159,7 +159,6 @@
"no_pattern_added": "Nije dodan uzorak",
"note_apply_storage_label_previous_assets": "Napomena: da biste primijenili Oznaku Pohrane na prethodno prenesena sredstva, pokrenite",
"note_cannot_be_changed_later": "NAPOMENA: Ovo se ne može promijeniti kasnije!",
"note_unlimited_quota": "Napomena: Unesite 0 za neograničenu kvotu",
"notification_email_from_address": "Od adrese",
"notification_email_from_address_description": "E-mail adresa pošiljatelja, na primjer: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Poslužitelja e-pošte (npr. smtp.immich.app)",
@@ -893,7 +892,6 @@
"no_shared_albums_message": "Stvorite album za dijeljenje fotografija i videozapisa s osobama u svojoj mreži",
"not_in_any_album": "Ni u jednom albumu",
"note_apply_storage_label_to_previously_uploaded assets": "Napomena: Da biste primijenili Oznaku za skladištenje na prethodno prenesena sredstva, pokrenite",
"note_unlimited_quota": "napomena: Unesite 0 za neograni%C4%8Denu kvotu",
"notes": "Bilješke",
"notification_toggle_setting_description": "Omogući obavijesti putem e-pošte",
"notifications": "Obavijesti",
@@ -1253,4 +1251,4 @@
"yes": "",
"you_dont_have_any_shared_links": "",
"zoom_image": ""
}
}

View File

@@ -35,7 +35,7 @@
"authentication_settings_disable_all": "Biztosan letiltod az összes bejelentkezési módot? A bejelentkezés teljesen le lesz tiltva.",
"authentication_settings_reenable": "Az újbóli engedélyezéshez használj egy<link>Szerver Parancsot</link>.",
"background_task_job": "Háttérfeladatok",
"backup_database": "Tartalék Adatbázis",
"backup_database": "Adatbázis Biztonsági Mentése",
"backup_database_enable_description": "Adatbázis biztonsági mentések engedélyezése",
"backup_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma",
"backup_settings": "Biztonsági mentés beállításai",
@@ -66,6 +66,11 @@
"forcing_refresh_library_files": "A képtár összes fájljának frissítése",
"image_format": "Formátum",
"image_format_description": "WebP a JPEG-nél kisebb fájlokat készít, de lassabban.",
"image_fullsize_description": "Teljes méretű kép eltávolított metaadatokkal, nagyításkor használva",
"image_fullsize_enabled": "Teljes méretű képgenerálás engedélyezése",
"image_fullsize_enabled_description": "Teljes méretű kép generálása nem webbarát formátumokhoz. Ha a „Beágyazott előnézet preferálása” engedélyezve van, a beágyazott előnézetek közvetlenül, átalakítás nélkül kerülnek felhasználásra. Nem érinti a webbarát formátumokat, például a JPEG-et.",
"image_fullsize_quality_description": "Teljes méretű képminőség 1-100 között. A magasabb érték jobb minőséget eredményez, de nagyobb fájlméretet is.",
"image_fullsize_title": "Teljes méretű képbeállítások",
"image_prefer_embedded_preview": "Beágyazott előnézeti kép előnyben részesítése",
"image_prefer_embedded_preview_setting_description": "Nyers (RAW) fotók esetén használja a beépített előnézeti képet (ha van) a képek feldogozásához. Ez néhány kép esetében pontosabb színeket eredményezhet, de az előnézeti kép minősége erősen fényképezőgép függő, és a képen előfordulhatnak tömörítési hibák.",
"image_prefer_wide_gamut": "Széles színtér preferálása",
@@ -149,7 +154,7 @@
"map_settings_description": "Térkép beállítások kezelése",
"map_style_description": "Egy style.json térképtémára mutató URL cím",
"memory_cleanup_job": "Memória takarítás",
"memory_generate_job": "Emlék létrehozása",
"memory_generate_job": "Emlék generálálsa",
"metadata_extraction_job": "Metaadatok kinyerése",
"metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből",
"metadata_faces_import_setting": "Arc importálás engedélyezése",
@@ -162,7 +167,6 @@
"no_pattern_added": "Nincs megadva minta (pattern)",
"note_apply_storage_label_previous_assets": "Megjegyzés: Ha a korábban feltöltött elemekhez is szeretne Tárhely Címkéket társítani, akkor futtassa ezt",
"note_cannot_be_changed_later": "FIGYELEM: ezt később nem lehet megváltoztatni!",
"note_unlimited_quota": "Megjegyzés: 0 = korlátlan kvóta",
"notification_email_from_address": "Feladó cím",
"notification_email_from_address_description": "Küldő email címe, például: \"Immich Fotószerver <noreply@example.com>\"",
"notification_email_host_description": "Email szerver kiszolgálója (pl. smtp.immich.app)",
@@ -243,7 +247,7 @@
"storage_template_hash_verification_enabled_description": "Engedélyezi a hash-érték ellenőrzést - csak akkor kapcsold ki, ha tisztában vagy a következményekkel",
"storage_template_migration": "Tárhely sablon migrálása",
"storage_template_migration_description": "A jelenlegi <link>{template}</link> alkalmazása a már feltöltött elemekre",
"storage_template_migration_info": "A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.",
"storage_template_migration_info": "A sablon az összes kiterjesztést kisbetűssé alakítja át. A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.",
"storage_template_migration_job": "Tárhely Sablon Migrációja",
"storage_template_more_details": "További részletekért erről a funkcióról lásd a <template-link>Tárhely Sablon</template-link> és annak <implications-link>következményeit</implications-link> a dokumentációban",
"storage_template_onboarding_description": "Ha ez a funkció engedélyezve van, akkor a fájlokat automatikusan az egyéni sablon alapján rendszerezi el. Stabilitási problémák miatt a funkció alapértelmezés szerint ki van kapcsolva. További információkért lásd a <link>dokumentációt</link>.",
@@ -859,6 +863,7 @@
"loop_videos": "Videók ismétlése",
"loop_videos_description": "Engedélyezi a videók folyamatosan ismételt lejátszását.",
"main_branch_warning": "Fejlesztői verziót használsz. Javasoljuk a stabil verzió használatát!",
"main_menu": "Főmenü",
"make": "Gyártó",
"manage_shared_links": "Megosztási linkek kezelése",
"manage_sharing_with_partners": "Partnerekkel való megosztás kezelése",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Hozz létre egy új albumot, hogy megoszthasd fényképeid és videóid másokkal",
"not_in_any_album": "Nincs albumban",
"note_apply_storage_label_to_previously_uploaded assets": "Megjegyzés: a korábban feltöltött elemek Tárhely Címkézéséhez futtasd a(z)",
"note_unlimited_quota": "Megjegyzés: korlátlan kvótához írj 0-t",
"notes": "Megjegyzések",
"notification_toggle_setting_description": "Email értesítések engedélyezése",
"notifications": "Értesítések",
@@ -987,6 +991,7 @@
"permanently_deleted_asset": "Elem véglegesen törölve",
"permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve",
"person": "Személy",
"person_birthdate": "Született: {date}",
"person_hidden": "{name}{hidden, select, true { (rejtett)} other {}}",
"photo_shared_all_users": "Úgy tűnik, hogy már mindenkivel megosztottad a fényképeidet, vagy nincs senki, akivel meg tudnád osztani.",
"photos": "Fényképek",
@@ -1078,6 +1083,8 @@
"remove_from_album": "Eltávolítás az albumból",
"remove_from_favorites": "Eltávolítás a kedvencekből",
"remove_from_shared_link": "Eltávolítás a megosztott linkből",
"remove_memory": "Emlék eltávolítása",
"remove_photo_from_memory": "Kép eltávolítása az emlékből",
"remove_url": "URL eltávolítása",
"remove_user": "Felhasználó eltávolítása",
"removed_api_key": "API Kulcs eltávolítva: {name}",
@@ -1148,6 +1155,7 @@
"searching_locales": "Helyszín keresése...",
"second": "Másodperc",
"see_all_people": "Minden személy megtekintése",
"select": "Kiválsztás",
"select_album_cover": "Albumborító kiválasztása",
"select_all": "Összes kijelölése",
"select_all_duplicates": "Minden duplikátum kijelölése",
@@ -1374,4 +1382,4 @@
"yes": "Igen",
"you_dont_have_any_shared_links": "Nincsenek megosztott linkjeid",
"zoom_image": "Kép Nagyítása"
}
}

View File

@@ -116,7 +116,6 @@
"no_pattern_added": "",
"note_apply_storage_label_previous_assets": "",
"note_cannot_be_changed_later": "",
"note_unlimited_quota": "",
"notification_email_from_address": "",
"notification_email_from_address_description": "",
"notification_email_host_description": "",
@@ -614,7 +613,6 @@
"no_shared_albums_message": "",
"not_in_any_album": "",
"note_apply_storage_label_to_previously_uploaded assets": "",
"note_unlimited_quota": "",
"notes": "",
"notification_toggle_setting_description": "",
"notifications": "",

View File

@@ -162,7 +162,6 @@
"no_pattern_added": "Tidak ada pola yang ditambahkan",
"note_apply_storage_label_previous_assets": "Catatan: Untuk menerapkan Label Penyimpanan untuk aset yang telah diunggah sebelumnya, jalankan",
"note_cannot_be_changed_later": "CATATAN: Ini tidak akan dapat diubah lagi!",
"note_unlimited_quota": "Catatan: Masukkan 0 untuk kuota tidak terbatas",
"notification_email_from_address": "Dari alamat",
"notification_email_from_address_description": "Alamat surel pengirim, misalnya: \"Server Foto Immich <noreply@example.com>\"",
"notification_email_host_description": "Hos server surel (mis. smtp.immich.app)",
@@ -923,7 +922,6 @@
"no_shared_albums_message": "Buat sebuah album untuk membagikan foto dan video dengan orang-orang dalam jaringan Anda",
"not_in_any_album": "Tidak ada dalam album apa pun",
"note_apply_storage_label_to_previously_uploaded assets": "Catatan: Untuk menerapkan Label Penyimpanan pada aset yang sebelumnya telah diunggah, jalankan",
"note_unlimited_quota": "Catatan: Masukkan 0 untuk kuota tidak terbatas",
"notes": "Catatan",
"notification_toggle_setting_description": "Aktifkan notifikasi surel",
"notifications": "Notifikasi",
@@ -987,6 +985,7 @@
"permanently_deleted_asset": "Aset dihapus secara permanen",
"permanently_deleted_assets_count": "{count, plural, one {# aset} other {# aset}} dihapus secara permanen",
"person": "Orang",
"person_birthdate": "Lahir pada {date}",
"person_hidden": "{name}{hidden, select, true { (tersembunyi)} other {}}",
"photo_shared_all_users": "Sepertinya Anda membagikan foto Anda dengan semua pengguna atau Anda tidak memiliki pengguna siapa pun untuk dibagikan.",
"photos": "Foto",
@@ -1078,6 +1077,8 @@
"remove_from_album": "Hapus dari album",
"remove_from_favorites": "Hapus dari favorit",
"remove_from_shared_link": "Hapus dari tautan terbagi",
"remove_memory": "Hapus kenangan",
"remove_photo_from_memory": "Hapus foto dari kenangan ini",
"remove_url": "Hapus URL",
"remove_user": "Keluarkan pengguna",
"removed_api_key": "Kunci API Dihapus: {name}",
@@ -1148,6 +1149,7 @@
"searching_locales": "Mencari lokal...",
"second": "Detik",
"see_all_people": "Lihat semua orang",
"select": "Pilih",
"select_album_cover": "Pilih kover album",
"select_all": "Pilih semua",
"select_all_duplicates": "Pilih semua duplikat",
@@ -1374,4 +1376,4 @@
"yes": "Ya",
"you_dont_have_any_shared_links": "Anda tidak memiliki tautan terbagi",
"zoom_image": "Perbesar Gambar"
}
}

View File

@@ -49,7 +49,7 @@
"confirm_email_below": "Per confermare, scrivi \"{email}\" qui sotto",
"confirm_reprocess_all_faces": "Sei sicuro di voler riprocessare tutti i volti? Questo cancellerà tutte le persone nominate.",
"confirm_user_password_reset": "Sei sicuro di voler resettare la password di {user}?",
"create_job": "Crea un lavoro",
"create_job": "Crea Processo",
"cron_expression": "Espressione Cron",
"cron_expression_description": "Imposta il tempo di scansione utilizzando il formato Cron. Per ulteriori informazioni fare riferimento a <link>Crontab Guru</link>",
"cron_expression_presets": "Espressione Cron preimpostata",
@@ -66,6 +66,11 @@
"forcing_refresh_library_files": "Forzando l'aggiornamento completo della libreria",
"image_format": "Formato",
"image_format_description": "WebP produce file più piccoli rispetto a JPEG, ma l'encoding è più lento.",
"image_fullsize_description": "Le immagini con dimensioni reali senza metadati sono utilizzate durante lo zoom",
"image_fullsize_enabled": "Abilita la generazione delle immagini con dimensioni reali",
"image_fullsize_enabled_description": "Genera immagini con dimensioni reali per i formati non web-friendly. Quando \"Preferisci l'anteprima integrata\" è abilitata, le anteprime integrate saranno usate senza conversione. Non riguarda le immagini web-friendly come il JPEG.",
"image_fullsize_quality_description": "Qualità delle immagini con dimensioni reali da 1 a 100. Più è alto il valore più la qualità sarà alta come anche la grandezza dei file.",
"image_fullsize_title": "Impostazioni Immagini con dimensioni reali",
"image_prefer_embedded_preview": "Preferisci l'anteprima integrata",
"image_prefer_embedded_preview_setting_description": "Usa l'anteprima integrata nelle foto RAW come input per l'elaborazione delle immagini, se disponibile. Questo permette un miglioramento dei colori per alcune immagini, ma la qualità delle anteprime dipende dalla macchina fotografica. Inoltre le immagini potrebbero presentare artefatti di compressione.",
"image_prefer_wide_gamut": "Preferisci gamut più ampio",
@@ -82,7 +87,7 @@
"image_thumbnail_quality_description": "Qualità delle miniature da 1 a 100. Un valore più alto è migliore, ma produce file più grandi e può ridurre la reattività dell'app.",
"image_thumbnail_title": "Impostazioni della copertina",
"job_concurrency": "Concorrenza {job}",
"job_created": "Lavoro creato",
"job_created": "Processo creato",
"job_not_concurrency_safe": "Questo processo non è eseguibile in maniera concorrente.",
"job_settings": "Impostazioni dei processi",
"job_settings_description": "Gestisci la concorrenza dei processi",
@@ -162,7 +167,6 @@
"no_pattern_added": "Nessun pattern aggiunto",
"note_apply_storage_label_previous_assets": "Nota: Per assegnare l'etichetta storage ad asset precedentemente caricati, esegui",
"note_cannot_be_changed_later": "NOTA: Non potrà essere modificato in futuro!",
"note_unlimited_quota": "Nota: Inserisci 0 per una quota illimitata",
"notification_email_from_address": "Indirizzo mittente",
"notification_email_from_address_description": "Indirizzo email mittente, ad esempio: \"Server Foto Immich <noreply@example.com>\"",
"notification_email_host_description": "Host del server email (es. smtp.immich.app)",
@@ -859,6 +863,7 @@
"loop_videos": "Riproduci video in loop",
"loop_videos_description": "Abilita per riprodurre automaticamente un video in loop nella vista dettagli.",
"main_branch_warning": "Stai usando una versione di sviluppo. Consigliamo vivamente di utilizzare una versione di rilascio!",
"main_menu": "Menu Principale",
"make": "Produttore",
"manage_shared_links": "Gestisci link condivisi",
"manage_sharing_with_partners": "Gestisci la condivisione con i compagni",
@@ -886,7 +891,7 @@
"merged_people_count": "{count, plural, one {Unita # persona} other {Unite # persone}}",
"minimize": "Minimizza",
"minute": "Minuto",
"missing": "Mancante",
"missing": "Mancanti",
"model": "Modello",
"month": "Mese",
"more": "Di più",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Crea un album per condividere foto e video con le persone nella tua rete",
"not_in_any_album": "In nessun album",
"note_apply_storage_label_to_previously_uploaded assets": "Nota: Per aggiungere l'etichetta dell'archiviazione agli asset caricati in precedenza, esegui",
"note_unlimited_quota": "Nota: Inserisci 0 per archiviazione illimitata",
"notes": "Note",
"notification_toggle_setting_description": "Attiva le notifiche via email",
"notifications": "Notifiche",
@@ -987,6 +991,7 @@
"permanently_deleted_asset": "Asset eliminato definitivamente",
"permanently_deleted_assets_count": "Cancellati {count, plural, one {# asset} other {# assets}} definitivamente",
"person": "Persona",
"person_birthdate": "Nato il {date}",
"person_hidden": "{name}{hidden, select, true { (nascosto)} other {}}",
"photo_shared_all_users": "Sembra che tu abbia condiviso le foto con tutti gli utenti, oppure che non ci siano utenti con i quali condividerle.",
"photos": "Foto",
@@ -997,7 +1002,7 @@
"place": "Posizione",
"places": "Luoghi",
"places_count": "{count, plural, one {{count, number} Luogo} other {{count, number} Places}}",
"play": "Avvia",
"play": "Riproduci",
"play_memories": "Avvia ricordi",
"play_motion_photo": "Avvia Foto in movimento",
"play_or_pause_video": "Avvia o metti in pausa il video",
@@ -1078,6 +1083,8 @@
"remove_from_album": "Rimuovere dall'album",
"remove_from_favorites": "Rimuovi dai preferiti",
"remove_from_shared_link": "Rimuovi dal link condiviso",
"remove_memory": "Rimuovi ricordo",
"remove_photo_from_memory": "Rimuovi foto da questo ricordo",
"remove_url": "Rimuovi URL",
"remove_user": "Rimuovi utente",
"removed_api_key": "Rimossa chiave API: {name}",
@@ -1148,6 +1155,7 @@
"searching_locales": "Cerca localizzazioni...",
"second": "Secondo",
"see_all_people": "Vedi tutte le persone",
"select": "Seleziona",
"select_album_cover": "Seleziona copertina album",
"select_all": "Seleziona tutto",
"select_all_duplicates": "Seleziona tutti i duplicati",
@@ -1238,7 +1246,7 @@
"stack_selected_photos": "Impila foto selezionate",
"stacked_assets_count": "{count, plural, one {Raggruppato # asset} other {Raggruppati # asset}}",
"stacktrace": "Traccia dell'errore",
"start": "Inizio",
"start": "Avvia",
"start_date": "Data di inizio",
"state": "Provincia",
"status": "Stato",
@@ -1362,6 +1370,7 @@
"view_name": "Visualizza",
"view_next_asset": "Visualizza risorsa successiva",
"view_previous_asset": "Visualizza risorsa precedente",
"view_qr_code": "Visualizza Codice QR",
"view_stack": "Visualizza Raggruppamento",
"visibility_changed": "Visibilità modificata per {count, plural, one {# persona} other {# persone}}",
"waiting": "In Attesa",
@@ -1374,4 +1383,4 @@
"yes": "Si",
"you_dont_have_any_shared_links": "Non è presente alcun link condiviso",
"zoom_image": "Ingrandisci immagine"
}
}

View File

@@ -7,7 +7,7 @@
"actions": "アクション",
"active": "アクティブ",
"activity": "アクティビティ",
"activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}されました",
"activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}になりました",
"add": "追加",
"add_a_description": "説明を追加",
"add_a_location": "場所を追加",
@@ -20,20 +20,28 @@
"add_partner": "パートナーを追加",
"add_path": "パスを追加",
"add_photos": "写真を追加",
"add_to": "追加先...",
"add_to": "追加先",
"add_to_album": "アルバムに追加",
"add_to_shared_album": "共有アルバムに追加",
"add_url": "URLを追加",
"added_to_archive": "アーカイブに追加済",
"added_to_favorites": "お気に入りに追加済",
"added_to_favorites_count": "{count, number} 枚の画像をお気に入りに追加済",
"admin": {
"add_exclusion_pattern_description": "除外パターンを追加します。ワイルドカード「*」「**」「?」を使用できます。すべてのディレクトリで「Raw」と名前が付いたファイルを無視するには、「**/Raw/**」を使用します。また、「.tif」で終わるファイルをすべて無視するには、「**/*.tif」を使用します。さらに、絶対パスを無視するには「/path/to/ignore/**」を使用します。",
"asset_offline_description": "この外部ライブラリのアセットはディスク上に見つからなくなってゴミ箱に移動されました。ファイルがライブラリの中で移動された場合はタイムラインで新しい対応するアセットを確認してください。このアセットを復元するには以下のファイルパスがImmichからアクセスできるか確認してライブラリをスキャンしてください。",
"authentication_settings": "認証設定",
"authentication_settings_description": "認証設定の管理パスワード、OAuth、その他",
"authentication_settings_disable_all": "本当に全てのログイン方法を無効にしますか? ログインは完全に無効になります。",
"authentication_settings_reenable": "再び有効にするには、<link>サーバーコマンド</link>を使用してください。",
"background_task_job": "バックグラウンドタスク",
"backup_database": "データベースのバックアップ",
"backup_database_enable_description": "データベースのバックアップを有効にする",
"backup_keep_last_amount": "過去のバックアップの保持数",
"backup_settings": "バックアップ設定",
"backup_settings_description": "データベースのバックアップ設定の管理",
"check_all": "すべてを選択",
"cleanup": "クリーンアップ",
"cleared_jobs": "{job}のジョブをクリアしました",
"config_set_by_file": "設定は現在 Config File で設定されている",
"confirm_delete_library": "本当に {library} を削除しますか?",
@@ -41,6 +49,10 @@
"confirm_email_below": "確認のため、以下に \"{email}\" と入力してください",
"confirm_reprocess_all_faces": "本当にすべての顔を再処理しますか? これにより名前が付けられた人物も消去されます。",
"confirm_user_password_reset": "本当に {user} のパスワードをリセットしますか?",
"create_job": "ジョブの作成",
"cron_expression": "Cron式",
"cron_expression_description": "cronのフォーマットを使ってスキャン間隔を設定します。詳しくは<link>Crontab Guru</link>などを参照してください",
"cron_expression_presets": "Cron式のプリセット",
"disable_login": "ログインを無効にする",
"duplicate_detection_job_description": "機械学習を用いて類似画像の検出を行います。(スマートサーチに依存)",
"exclusion_pattern_description": "除外パターンを使用すると、ライブラリをスキャンする際にファイルやフォルダを無視することができます。RAWファイルなど、インポートしたくないファイルを含むフォルダがある場合に便利です。",
@@ -52,15 +64,29 @@
"failed_job_command": "ジョブ {job}のコマンド {command}が失敗しました",
"force_delete_user_warning": "警告:この操作を行うと、ユーザーとすべてのアセットが直ちに削除されます。これは元に戻せず、ファイルも復元できません。",
"forcing_refresh_library_files": "すべてのライブラリファイルを強制更新",
"image_format": "フォーマット",
"image_format_description": "WebPはJPEGよりもファイルサイズが小さいですが、エンコードに時間がかかります。",
"image_fullsize_description": "画像を拡大する時に使われるメタデータを取り除いた原寸大画像",
"image_fullsize_enabled": "原寸大画像生成を有効にする",
"image_fullsize_quality_description": "1から100まで原寸大画像の質です。高いほうがいいがファイルが大きくなります。",
"image_fullsize_title": "原寸大画像設定",
"image_prefer_embedded_preview": "埋め込みプレビューを優先",
"image_prefer_embedded_preview_setting_description": "RAW写真の埋め込みプレビューが利用可能な場合に画像処理の入力として使用します。これにより、いくつかの画像でより正確な色を得ることができますが、プレビューの品質はカメラによって異なり、画像により多くの圧縮アーティファクトが含まれる場合があります。",
"image_prefer_wide_gamut": "広色域に対応させる",
"image_prefer_wide_gamut_setting_description": "サムネイルにはDisplay P3を使用します。これにより、広色域の画像の鮮やかさをよりよく保つことができますが、古いデバイスや古いブラウザバージョンでは画像が異なって見える場合があります。sRGBの画像は、色の変化を避けるためにsRGBのままにします。",
"image_preview_description": "単一のアセットを表示する時や機械学習に使われるメタデータを取り除いた中サイズの画像",
"image_preview_quality_description": "プレビューの画質は1〜100で設定できます。値が高いほど品質は良くなりますがファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。低い値を設定すると機械学習の品質に影響を与えるおそれがあります。",
"image_preview_title": "プレビュー設定",
"image_quality": "品質",
"image_resolution": "解像度",
"image_resolution_description": "解像度を上げるとより精細に保存できますが、エンコードに時間がかかりファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。",
"image_settings": "画像設定",
"image_settings_description": "生成される画像の品質と解像度の設定",
"image_thumbnail_description": "メインのタイムラインのような写真グループで表示する際に使われるメタデータを取り除いた小さなサムネイル",
"image_thumbnail_quality_description": "サムネイルの画質を1〜100の間で設定できます。値が大きいほど良い品質ですがファイルサイズが大きくなりアプリの応答性が低下します。",
"image_thumbnail_title": "サムネイル設定",
"job_concurrency": "{job} の同時実行数",
"job_created": "ジョブを作成しました",
"job_not_concurrency_safe": "このジョブは安全に同時実行できません。",
"job_settings": "ジョブ設定",
"job_settings_description": "ジョブの同時実行を管理します",
@@ -75,7 +101,7 @@
"library_scanning_enable_description": "ライブラリ定期スキャンの有効化",
"library_settings": "外部ライブラリ",
"library_settings_description": "外部ライブラリ設定を管理します",
"library_tasks_description": "ライブラリのタスクを実行する",
"library_tasks_description": "アセットが追加または変更された外部ライブラリをスキャンする",
"library_watching_enable_description": "外部ライブラリのファイル変更を監視",
"library_watching_settings": "ライブラリ監視(実験的)",
"library_watching_settings_description": "変更されたファイルを自動的に監視",
@@ -110,7 +136,7 @@
"machine_learning_smart_search_description": "CLIP埋め込みを使用して画像を意味的に検索します",
"machine_learning_smart_search_enabled": "スマートサーチを有効にします",
"machine_learning_smart_search_enabled_description": "無効にすると、画像はスマートサーチ用にエンコードされません。",
"machine_learning_url_description": "機械学習サーバーのURL",
"machine_learning_url_description": "機械学習サーバーのURL。複数のURLが設定された場合は1つずつサーバーが正常に応答するまで接続を試みます。応答のないサーバーはオンラインになるまで一時的に無視されます。",
"manage_concurrency": "同時実行数の管理",
"manage_log_settings": "ログ設定を管理します",
"map_dark_style": "ダークモード",
@@ -126,15 +152,20 @@
"map_settings": "地図",
"map_settings_description": "地図設定",
"map_style_description": "マップテーマstyle.jsonの参照先URL",
"memory_cleanup_job": "メモリーのクリーンアップ",
"memory_generate_job": "メモリーの生成",
"metadata_extraction_job": "メタデータの展開",
"metadata_extraction_job_description": "GPSや解像度などのメタデータを各アセットから抽出",
"metadata_faces_import_setting": "顔のインポートを有効にする",
"metadata_faces_import_setting_description": "画像のEXIFデータとサイドカーファイルから顔をインポート",
"metadata_settings": "メタデータ設定",
"metadata_settings_description": "メタデータの設定を管理します",
"migration_job": "マイグレーション",
"migration_job_description": "アセットおよび顔のサムネイルを最新のフォルダ構造に移行します",
"no_paths_added": "パスが追加されていません",
"no_pattern_added": "パターンが追加されていません",
"note_apply_storage_label_previous_assets": "注意: 以前にアップロードされたアセットにストレージラベルを適用するには、以下を実行してください",
"note_cannot_be_changed_later": "注意: 後から変更できません!",
"note_unlimited_quota": "注意: 無制限にする場合は0を入力してください",
"notification_email_from_address": "送信メールアドレス",
"notification_email_from_address_description": "送信メールアドレスを設定します(例: \"Immich Photo Server <noreply@example.com>\" ",
"notification_email_host_description": "送信メールサーバーを設定しますsmtp.immich.app",
@@ -182,6 +213,7 @@
"password_settings": "パスワード ログイン",
"password_settings_description": "パスワード ログイン設定を管理します",
"paths_validated_successfully": "すべてのパスが正常に検証されました",
"person_cleanup_job": "人物のクリーンアップ",
"quota_size_gib": "割り当て容量 (GiB)",
"refreshing_all_libraries": "すべてのライブラリを更新",
"registration": "管理者登録",
@@ -192,9 +224,13 @@
"require_password_change_on_login": "初回ログイン時にパスワード変更を要求する",
"reset_settings_to_default": "設定をデフォルトにリセットします",
"reset_settings_to_recent_saved": "前回の設定値に戻す",
"scanning_library": "ライブラリのスキャン",
"search_jobs": "ジョブを検索…",
"send_welcome_email": "ウェルカム メール を送信します",
"server_external_domain_settings": "外部ドメイン",
"server_external_domain_settings_description": "公開共有リンク用のドメイン( http(s):// を含める)",
"server_public_users": "公開ユーザー",
"server_public_users_description": "共有アルバムにユーザーを追加するとすべてのユーザー (名前とメールアドレス) がリスト化されます。無効にするとユーザーリストは管理者のみ利用可能になります。",
"server_settings": "サーバー設定",
"server_settings_description": "サーバー設定を管理します",
"server_welcome_message": "ウェルカム メッセージ",
@@ -210,7 +246,7 @@
"storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)",
"storage_template_migration": "ストレージ テンプレート の移行",
"storage_template_migration_description": "現在の<link>{template}</link>を以前にアップロードされたアセットに適用",
"storage_template_migration_info": "テンプレートの変更は新しいアセットにのみ適用されます。 以前にアップロードしたアセットにテンプレートを遡って適用するには、<link>{job}</link> を実行してください。",
"storage_template_migration_info": "ストレージテンプレートは全ての拡張子を小文字に変換します。テンプレートの変更は新しいアセットにのみ適用されます。 以前にアップロードしたアセットにテンプレートを遡って適用するには、<link>{job}</link> を実行してください。",
"storage_template_migration_job": "ストレージテンプレート移行ジョブ",
"storage_template_more_details": "この機能の詳細については、<template-link>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください",
"storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。",
@@ -219,6 +255,17 @@
"storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します",
"storage_template_user_label": "<code>{label}</code>はユーザーのストレージラベルです",
"system_settings": "システム設定",
"tag_cleanup_job": "タグのクリーンアップ",
"template_email_available_tags": "テンプレートで次の変数を使えます: {tags}",
"template_email_if_empty": "テンプレートが空の場合はデフォルトのメールが使われます。",
"template_email_invite_album": "アルバム招待のテンプレート",
"template_email_preview": "プレビュー",
"template_email_settings": "メールテンプレート",
"template_email_settings_description": "通知のメールテンプレートのカスタムを管理します",
"template_email_update_album": "アルバム更新のテンプレート",
"template_email_welcome": "ウェルカムメールのテンプレート",
"template_settings": "通知テンプレート",
"template_settings_description": "通知のためのカスタムテンプレートを管理します。",
"theme_custom_css_settings": "カスタムCSS",
"theme_custom_css_settings_description": "CSS を使って Immich のデザインをカスタマイズできます。",
"theme_settings": "テーマ設定",
@@ -248,6 +295,8 @@
"transcoding_constant_rate_factor": "CRF値 (-crf)",
"transcoding_constant_rate_factor_description": "出力動画の品質レベル。H.264の場合は23、HEVCの場合は28、VP9の場合は31、AV1の場合は35が一般的な値です。値が低いほど品質が良くなりますが、ファイルサイズが大きくなります。",
"transcoding_disabled_description": "動画をトランスコードしない設定にしますが、これにより一部のクライアントで再生ができなくなる可能性があります",
"transcoding_encoding_options": "エンコードオプション",
"transcoding_encoding_options_description": "エンコードされた動画のコーデック、解像度、画質、その他オプションの設定します",
"transcoding_hardware_acceleration": "ハードウェアアクセラレーション",
"transcoding_hardware_acceleration_description": "より高速ですが、同じビットレートではより低品質になります(実験的)",
"transcoding_hardware_decoding": "ハードウェアデコード",
@@ -260,6 +309,8 @@
"transcoding_max_keyframe_interval": "最大キーフレーム間隔",
"transcoding_max_keyframe_interval_description": "キーフレーム間の最大フレーム間隔を設定します。値を低くすると圧縮効率が悪化しますが、シーク時間が改善され、動きの速いシーンの品質が向上する場合があります。\"0\" に設定すると、この値が自動的に設定されます。",
"transcoding_optimal_description": "設定解像度を超える動画、または容認されていない形式の動画",
"transcoding_policy": "トランスコードポリシー",
"transcoding_policy_description": "動画がいつトランスコードされるかを設定します",
"transcoding_preferred_hardware_device": "推奨ハードウェアデバイス",
"transcoding_preferred_hardware_device_description": "VAAPI と QSV のみに適用されます。 ハードウェアトランスコードに使用されるdriードを設定します。",
"transcoding_preset_preset": "プリセット (-preset)",
@@ -268,7 +319,7 @@
"transcoding_reference_frames_description": "特定のフレームを圧縮するときに参照するフレームの数。より高い値は圧縮効率を改善しますが、エンコードが遅くなります。\"0\" に設定すると、この値が自動的に設定されます。",
"transcoding_required_description": "許容されていない動画形式のみ",
"transcoding_settings": "動画トランスコード設定",
"transcoding_settings_description": "動画ファイルの解像度とエンコード情報を管理します",
"transcoding_settings_description": "トランスコードする動画とその処理方法を管理します",
"transcoding_target_resolution": "解像度",
"transcoding_target_resolution_description": "解像度を高くすると細かなディテールを保持できますが、エンコードに時間がかかり、ファイルサイズが大きくなり、アプリの応答性が低下する可能性があります。",
"transcoding_temporal_aq": "適応的量子化(Temporal AQ)",
@@ -290,6 +341,7 @@
"trash_settings_description": "ごみ箱の設定を管理します",
"untracked_files": "追跡されていないファイル",
"untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります",
"user_cleanup_job": "ユーザーのクリーンアップ",
"user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。",
"user_delete_delay_settings": "遅延削除",
"user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。",
@@ -345,6 +397,7 @@
"allow_edits": "編集を許可",
"allow_public_user_to_download": "一般ユーザーによるダウンロードを許可",
"allow_public_user_to_upload": "一般ユーザーによるアップロードを許可",
"alt_text_qr_code": "QRコード画像",
"anti_clockwise": "反時計回り",
"api_key": "APIキー",
"api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。",
@@ -368,8 +421,9 @@
"asset_offline": "アセットはオフラインです",
"asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。",
"asset_skipped": "スキップ済",
"asset_skipped_in_trash": "ゴミ箱の中",
"asset_uploaded": "アップロード済",
"asset_uploading": "アップロード中...",
"asset_uploading": "アップロード中",
"assets": "アセット",
"assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました",
"assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました",
@@ -378,7 +432,7 @@
"assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"assets_removed_count": "{count, plural, one {#個} other {#個}}のアセットを削除しました",
"assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません!",
"assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません! オフラインのアセットはこの方法では復元できません。",
"assets_restored_count": "{count, plural, one {#個} other {#個}}のアセットを復元しました",
"assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です",
@@ -389,6 +443,7 @@
"birthdate_saved": "生年月日が正常に保存されました",
"birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。",
"blurred_background": "ぼやけた背景",
"bugs_and_feature_requests": "バグと機能のリクエスト",
"build": "ビルド",
"build_image": "ビルドイメージ",
"bulk_delete_duplicates_confirmation": "本当に {count, plural, one {#個} other {#個}}の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!",
@@ -433,7 +488,9 @@
"comments_are_disabled": "コメントは無効化されています",
"confirm": "確認",
"confirm_admin_password": "管理者パスワードを確認",
"confirm_delete_face": "本当に『{name}』の顔をアセットから削除しますか?",
"confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?",
"confirm_keep_this_delete_others": "このアセット以外のアセットがスタックから削除されます。本当に削除しますか?",
"confirm_password": "確認",
"contain": "収める",
"context": "状況",
@@ -474,25 +531,33 @@
"date_range": "日付",
"day": "ライトモード",
"deduplicate_all": "全て重複排除",
"deduplication_criteria_1": "バイト単位の画像サイズ",
"deduplication_criteria_2": "EXIFデータ数",
"deduplication_info": "重複排除情報",
"deduplication_info_description": "アセットを自動的に選択して重複を一括で削除するには次のようにします:",
"default_locale": "デフォルトのロケール",
"default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします",
"delete": "削除",
"delete_album": "アルバムを削除",
"delete_api_key_prompt": "本当にこのAPI キーを削除しますか?",
"delete_duplicates_confirmation": "本当にこれらの重複を完全に削除しますか?",
"delete_face": "顔の削除",
"delete_key": "キーを削除",
"delete_library": "ライブラリを削除",
"delete_link": "リンクを削除",
"delete_others": "ほかを削除",
"delete_shared_link": "共有リンクを消す",
"delete_tag": "タグを削除する",
"delete_tag_confirmation_prompt": "本当に{tagName}タグを削除しますか?",
"delete_user": "ユーザーを削除",
"deleted_shared_link": "共有リンクを削除",
"deletes_missing_assets": "ディスクからなくなったアセットを削除する",
"description": "概要欄",
"details": "詳細",
"direction": "方向",
"disabled": "無効",
"disallow_edits": "編集を許可しない",
"discord": "Discord",
"discover": "探索",
"dismiss_all_errors": "全てのエラーを無視",
"dismiss_error": "エラーを無視",
@@ -501,6 +566,7 @@
"display_original_photos": "オリジナルの写真を表示",
"display_original_photos_setting_description": "オリジナルのアセットが Web 互換である場合は、アセットを表示するときにサムネイルではなく元の写真を優先して表示します。これにより写真の表示速度が遅くなる可能性があります。",
"do_not_show_again": "このメッセージを再び表示しない",
"documentation": "ドキュメント",
"done": "完了",
"download": "ダウンロード",
"download_include_embedded_motion_videos": "埋め込まれた動画",
@@ -543,6 +609,7 @@
"enabled": "有効",
"end_date": "終了日",
"error": "エラー",
"error_delete_face": "アセットから顔の削除ができませんでした",
"error_loading_image": "画像の読み込みエラー",
"error_title": "エラー - 問題が発生しました",
"errors": {
@@ -570,6 +637,7 @@
"failed_to_create_shared_link": "共有リンクを作成できませんでした",
"failed_to_edit_shared_link": "共有リンクを編集できませんでした",
"failed_to_get_people": "人物を取得できませんでした",
"failed_to_keep_this_delete_others": "ほかのアセットを削除できませんでした",
"failed_to_load_asset": "アセットを読み込めませんでした",
"failed_to_load_assets": "アセットを読み込めませんでした",
"failed_to_load_people": "人物を読み込めませんでした",
@@ -621,6 +689,7 @@
"unable_to_get_comments_number": "コメント数を取得できません",
"unable_to_get_shared_link": "共有リンクの取得に失敗しました",
"unable_to_hide_person": "人物を非表示にできません",
"unable_to_link_motion_video": "モーションビデオをリンクできません",
"unable_to_link_oauth_account": "OAuth アカウントをリンクできません",
"unable_to_load_album": "アルバムを読み込めません",
"unable_to_load_asset_activity": "アセットのアクティビティを読み込めません",
@@ -659,6 +728,7 @@
"unable_to_submit_job": "ジョブを送信できません",
"unable_to_trash_asset": "アセットをゴミ箱に移動できません",
"unable_to_unlink_account": "アカウントのリンクを解除できません",
"unable_to_unlink_motion_video": "モーションビデオのリンクを解除できません",
"unable_to_update_album_cover": "アルバムカバーを更新できません",
"unable_to_update_album_info": "アルバム情報を更新できません",
"unable_to_update_library": "ライブラリを更新できません",
@@ -682,6 +752,7 @@
"external": "外部",
"external_libraries": "外部ライブラリ",
"face_unassigned": "未割り当て",
"failed_to_load_assets": "アセットのロードに失敗しました",
"favorite": "お気に入り",
"favorite_or_unfavorite_photo": "写真をお気に入りまたはお気に入り解除",
"favorites": "お気に入り",
@@ -702,10 +773,13 @@
"get_help": "助けを求める",
"getting_started": "はじめる",
"go_back": "戻る",
"go_to_folder": "フォルダへ",
"go_to_search": "検索へ",
"group_albums_by": "これでアルバムをグループ化…",
"group_country": "国でグループ化",
"group_no": "グループ化なし",
"group_owner": "所有者でグループ化",
"group_places_by": "グループ分け...",
"group_year": "年でグループ化",
"has_quota": "クォータ有り",
"hi_user": "こんにちは、{name}( {email})さん",
@@ -738,6 +812,7 @@
"include_shared_albums": "共有アルバムを含める",
"include_shared_partner_assets": "パートナーがシェアしたアセットを含める",
"individual_share": "1枚の共有",
"individual_shares": "個人の共有",
"info": "情報",
"interval": {
"day_at_onepm": "毎日午後1時",
@@ -751,6 +826,8 @@
"jobs": "ジョブ",
"keep": "保持",
"keep_all": "全て保持",
"keep_this_delete_others": "これを残してほかを削除する",
"kept_this_deleted_others": "このアセットを残して{count, plural, other {#件のアセット}}を削除する",
"keyboard_shortcuts": "キーボードショートカット",
"language": "言語",
"language_setting_description": "優先言語を選択してください",
@@ -758,12 +835,14 @@
"latest_version": "最新バージョン",
"latitude": "緯度",
"leave": "標高",
"lens_model": "レンズモデル",
"let_others_respond": "他のユーザーの返信を許可する",
"level": "レベル",
"library": "ライブラリ",
"library_options": "ライブラリ設定",
"light": "ライトモード",
"like_deleted": "いいねが削除されました",
"link_motion_video": "モーションビデオのリンク",
"link_options": "リンクのオプション",
"link_to_oauth": "OAuthへリンクする",
"linked_oauth_account": "リンクされたOAuthアカウント",
@@ -782,6 +861,8 @@
"look": "見た目",
"loop_videos": "動画をループ",
"loop_videos_description": "有効にすると詳細表示で自動的に動画がループします。",
"main_branch_warning": "開発版を使っているようです。リリース版の使用を強く推奨します!",
"main_menu": "メインメニュー",
"make": "メーカー",
"manage_shared_links": "共有済みのリンクを管理",
"manage_sharing_with_partners": "パートナーとの共有を管理します",
@@ -814,6 +895,7 @@
"month": "月",
"more": "もっと表示",
"moved_to_trash": "ゴミ箱に移動しました",
"mute_memories": "メモリーのミュート",
"my_albums": "私のアルバム",
"name": "名前",
"name_or_nickname": "名前またはニックネーム",
@@ -843,14 +925,14 @@
"no_results": "結果がありません",
"no_results_description": "同義語やより一般的なキーワードを試してください",
"no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう",
"not_in_any_album": "どのアルバムにも入っていません",
"not_in_any_album": "どのアルバムにも入っていない",
"note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください",
"note_unlimited_quota": "注: 容量を無制限にするには0を入力してください",
"notes": "注意",
"notification_toggle_setting_description": "メール通知を有効化",
"notifications": "通知",
"notifications_setting_description": "通知を管理します",
"oauth": "OAuth",
"official_immich_resources": "公式Immichリソース",
"offline": "オフライン",
"offline_paths": "オフラインのパス",
"offline_paths_description": "これらの結果は、外部ライブラリの一部ではないファイルを手動で削除したことが原因である可能性があります。",
@@ -908,6 +990,7 @@
"permanently_deleted_asset": "アセットを完全に削除しました",
"permanently_deleted_assets_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"person": "人物",
"person_birthdate": "{date}生まれ",
"person_hidden": "{name}{hidden, select, true { (非表示)} other {}}",
"photo_shared_all_users": "写真をすべてのユーザーと共有したか、共有するユーザーがいないようです。",
"photos": "写真",
@@ -917,6 +1000,7 @@
"pick_a_location": "場所を選択",
"place": "場所",
"places": "撮影場所",
"places_count": "{count, plural, other {{count, number}箇所}}",
"play": "再生",
"play_memories": "メモリーを再生",
"play_motion_photo": "モーションビデオを再生",
@@ -976,14 +1060,17 @@
"reassigned_assets_to_new_person": "{count, plural, one {#個} other {#個}}のアセットを新しい人物に割り当てました",
"reassing_hint": "選択されたアセットを既存の人物に割り当て",
"recent": "最近",
"recent-albums": "最近のアルバム",
"recent_searches": "最近の検索",
"refresh": "更新",
"refresh_encoded_videos": "エンコードされた動画を更新",
"refresh_faces": "顔認識を更新",
"refresh_metadata": "メタデータを更新",
"refresh_thumbnails": "サムネイルを更新",
"refreshed": "更新済",
"refreshes_every_file": "すべてのファイルを更新",
"refreshing_encoded_video": "エンコードされた動画を更新中",
"refreshing_faces": "顔認識を更新中",
"refreshing_metadata": "メタデータを更新中",
"regenerating_thumbnails": "サムネイルを再生成中",
"remove": "削除",
@@ -995,11 +1082,16 @@
"remove_from_album": "アルバムから削除",
"remove_from_favorites": "お気に入りから削除",
"remove_from_shared_link": "共有リンクから削除",
"remove_memory": "メモリーの削除",
"remove_photo_from_memory": "メモリーから写真を削除",
"remove_url": "URLの削除",
"remove_user": "ユーザーを削除",
"removed_api_key": "削除されたAPI キー: {name}",
"removed_from_archive": "アーカイブから削除されました",
"removed_from_favorites": "お気に入りから削除しました",
"removed_from_favorites_count": "{count, plural, other {#項目}}お気に入りから削除しました",
"removed_memory": "削除されたメモリー",
"removed_photo_from_memory": "メモリーから削除された写真",
"removed_tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}からタグを削除しました",
"rename": "リネーム",
"repair": "修復",
@@ -1008,6 +1100,7 @@
"repository": "リポジトリ",
"require_password": "パスワードを要求",
"require_user_to_change_password_on_first_login": "ユーザーに初回ログイン時にパスワードの変更を要求する",
"rescan": "再スキャン",
"reset": "リセット",
"reset_password": "パスワードをリセット",
"reset_people_visibility": "人物の非表示設定をリセット",
@@ -1030,22 +1123,29 @@
"saved_settings": "設定を保存しました",
"say_something": "何か書き込みましょう",
"scan_all_libraries": "全てのライブラリをスキャン",
"scan_library": "スキャン",
"scan_settings": "スキャン設定",
"scanning_for_album": "アルバムをスキャン中…",
"search": "検索",
"search_albums": "アルバムを検索",
"search_by_context": "状況で検索",
"search_by_description": "概要で検索",
"search_by_description_example": "サパでハイキングした日",
"search_by_filename": "ファイル名もしくは拡張子で検索",
"search_by_filename_example": "例: IMG_1234.JPG もしくは PNG",
"search_camera_make": "カメラメーカーを検索…",
"search_camera_model": "カメラのモデルを検索…",
"search_city": "市町村を検索…",
"search_country": "国を検索…",
"search_for": "検索",
"search_for_existing_person": "既存の人物を検索",
"search_no_people": "人物がいません",
"search_no_people_named": "「{name}」という名前の人物がいません",
"search_options": "検索オプション",
"search_people": "人物を検索",
"search_places": "場所を検索",
"search_rating": "レートで検索...",
"search_settings": "検索設定",
"search_state": "都道府県を検索…",
"search_tags": "タグを検索...",
"search_timezone": "タイムゾーンを検索…",
@@ -1054,6 +1154,7 @@
"searching_locales": "ロケールを検索…",
"second": "秒",
"see_all_people": "全ての人物を見る",
"select": "選択",
"select_album_cover": "アルバムカバーを選択",
"select_all": "全て選択",
"select_all_duplicates": "全ての重複を選択",
@@ -1076,6 +1177,7 @@
"server_version": "サーバーバージョン",
"set": "設定",
"set_as_album_cover": "アルバムカバーとして設定",
"set_as_featured_photo": "人物写真に設定",
"set_as_profile_picture": "プロフィール画像として設定",
"set_date_of_birth": "生年月日を設定",
"set_profile_picture": "プロフィール画像を設定",
@@ -1090,6 +1192,7 @@
"shared_from_partner": "{partner} による写真",
"shared_link_options": "共有リンクのオプション",
"shared_links": "共有リンク",
"shared_links_description": "写真や動画をリンクで共有",
"shared_photos_and_videos_count": "{assetCount, plural, other {#個の共有された写真と動画}}",
"shared_with_partner": "{partner} と共有しました",
"sharing": "共有",
@@ -1112,6 +1215,8 @@
"show_person_options": "人物設定を表示",
"show_progress_bar": "プログレスバーを表示",
"show_search_options": "検索オプションを表示",
"show_shared_links": "共有リンクを表示",
"show_slideshow_transition": "スライドショーのトランジションを表示",
"show_supporter_badge": "サポーターバッジ",
"show_supporter_badge_description": "サポーターバッジを表示",
"shuffle": "ランダム",
@@ -1121,6 +1226,8 @@
"sign_up": "登録",
"size": "サイズ",
"skip_to_content": "コンテンツへスキップ",
"skip_to_folders": "フォルダへスキップ",
"skip_to_tags": "タグへスキップ",
"slideshow": "スライドショー",
"slideshow_settings": "スライドショー設定",
"sort_albums_by": "この順序でアルバムをソート…",
@@ -1128,6 +1235,7 @@
"sort_items": "アイテムの数",
"sort_modified": "変更日",
"sort_oldest": "古い写真",
"sort_people_by_similarity": "似ている順に人物を並び替える",
"sort_recent": "最新の写真",
"sort_title": "タイトル",
"source": "ソース",
@@ -1151,12 +1259,17 @@
"submit": "送信",
"suggestions": "ユーザーリスト",
"sunrise_on_the_beach": "海岸の日の出",
"support": "サポート",
"support_and_feedback": "サポートとフィードバック",
"support_third_party_description": "Immichのインストールはサードパーティーによってパッケージ化されています。遭遇した問題はそのパッケージに起因している可能性があるので以下のリンクを使って最初にそのパッケージに問題を提起してください。",
"swap_merge_direction": "統合する方向を入れ替え",
"sync": "同期",
"tag": "タグ付けする",
"tag_assets": "アセットにタグ付けする",
"tag_created": "タグ: {tag} を作成しました",
"tag_feature_description": "意味を持たせたタグトでグループ化して写真と動画を閲覧する",
"tag_not_found_question": "タグが見つかりませんか? <link>こちら</link>からタグを作成できます",
"tag_people": "人物タグ",
"tag_updated": "タグ: {tag} を更新しました",
"tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}をタグ付けしました",
"tags": "タグ",
@@ -1165,15 +1278,19 @@
"theme_selection": "テーマ選択",
"theme_selection_description": "ブラウザのシステム設定に基づいてテーマを明色または暗色に自動的に設定します",
"they_will_be_merged_together": "これらは一緒に統合されます",
"third_party_resources": "サードパーティーリソース",
"time_based_memories": "時間によるメモリー",
"timeline": "タイムライン",
"timezone": "タイムゾーン",
"to_archive": "アーカイブ",
"to_change_password": "パスワードを変更",
"to_favorite": "お気に入り",
"to_login": "ログイン",
"to_parent": "上位の階層へ",
"to_trash": "ゴミ箱",
"toggle_settings": "設定をトグル",
"toggle_theme": "ダークテーマを切り替え",
"total": "合計",
"total_usage": "総使用量",
"trash": "ゴミ箱",
"trash_all": "全て削除",
@@ -1187,10 +1304,13 @@
"unfavorite": "お気に入りから外す",
"unhide_person": "人物の非表示を解除",
"unknown": "不明",
"unknown_country": "不明な国",
"unknown_year": "不明な年",
"unlimited": "無制限",
"unlink_motion_video": "モーションビデオのリンクを解除",
"unlink_oauth": "OAuthのリンクを解除",
"unlinked_oauth_account": "リンクが解除されたOAuthアカウント",
"unmute_memories": "メモリーのミュートを解除",
"unnamed_album": "無名のアルバム",
"unnamed_album_delete_confirmation": "本当にこのアルバムを削除しますか?",
"unnamed_share": "無名の共有",
@@ -1231,7 +1351,9 @@
"variables": "変数",
"version": "バージョン",
"version_announcement_closing": "あなたの友人、Alex",
"version_announcement_message": "こんにちは、親愛なる皆様へ。アプリの新しいバージョンがありますので、構成の不整合を防ぐために<link>リリースノート</link>にアクセスし、<code>docker-compose.yml</code>、及び<code>.cnv</code>の設定が最新か確認してください。特に自動的にアプリの更新を制御するWatchTowerやその他システムを利用している場合に当てはまります。",
"version_announcement_message": "こんにちは! 新しいバージョンのImmichがリリースされました。特にWatchTowerやImmichインスタンスを自動的に更新する仕組みを設けている場合は<link>リリースノート</link>をよく読んで設定が最新のものになっているか確認してください。",
"version_history": "バージョン履歴",
"version_history_item": "{date}に{version}をインストール",
"video": "動画",
"video_hover_setting": "ホバー時にサムネイルで動画を再生",
"video_hover_setting_description": "マウスが項目の上にあるときに動画のサムネイルを再生します。無効時でも再生アイコンにカーソルを合わせると再生を開始できます。",
@@ -1242,19 +1364,22 @@
"view_all": "すべて見る",
"view_all_users": "全てのユーザーを確認する",
"view_in_timeline": "タイムラインで見る",
"view_link": "リンクを見る",
"view_links": "リンクを確認する",
"view_name": "分類",
"view_next_asset": "次のアセットを見る",
"view_previous_asset": "前のアセットを見る",
"view_qr_code": "QRコードを見る",
"view_stack": "ビュースタック",
"visibility_changed": "{count, plural, one {#人} other {#人}}の人物の非表示設定が変更されました",
"waiting": "待機中",
"warning": "警告",
"week": "週",
"welcome": "ようこそ",
"welcome_to_immich": "immichにようこそ",
"welcome_to_immich": "Immichにようこそ",
"year": "年",
"years_ago": "{years, plural, one {#年} other {#年}}前",
"yes": "はい",
"you_dont_have_any_shared_links": "共有リンクはありません",
"zoom_image": "画像を拡大"
}
}

165
i18n/ka.json Normal file
View File

@@ -0,0 +1,165 @@
{
"about": "შესახებ",
"account": "ანგარიში",
"account_settings": "ანგარიშის პარამეტრები",
"acknowledge": "მიღება",
"action": "ქმედება",
"actions": "ქმედებები",
"active": "აქტიური",
"activity": "აქტივობა",
"add": "დამატება",
"add_a_description": "დაამატე აღწერა",
"add_a_location": "დაამატე ადგილი",
"add_a_name": "დაამატე სახელი",
"add_a_title": "დაასათაურე",
"add_import_path": "დაამატე საიმპორტო მისამართი",
"add_location": "დაამატე ადგილი",
"add_more_users": "დაამატე მომხმარებლები",
"add_partner": "დაამატე პარტნიორი",
"add_path": "დაამატე მისამართი",
"add_photos": "დაამატე ფოტოები",
"add_to_album": "დაამატე ალბომში",
"add_to_shared_album": "დაამატე საზიარო ალბომში",
"add_url": "დაამატე URL",
"added_to_archive": "დაარქივდა",
"added_to_favorites": "დაამატე რჩეულებში",
"added_to_favorites_count": "{count, number} დაემატა რჩეულებში",
"admin": {
"authentication_settings": "ავთენტიკაციის პარამეტრები",
"authentication_settings_description": "პაროლის, OAuth-ის და სხვა ავტენთიფიკაციის პარამეტრების მართვა",
"authentication_settings_disable_all": "ნამდვილად გინდა ავტორიზაციის ყველა მეთოდის გამორთვა? ავტორიზაციას ვეღარანაირად შეძლებ.",
"authentication_settings_reenable": "რეაქტივაციისთვის, გამოიყენე <link>სერვერის ბრძანება</link>.",
"background_task_job": "ფონური დავალებები",
"backup_database": "შექმენი სარეზერვო ასლი",
"backup_database_enable_description": "ჩართე სარეზერვო ასლების ფუნქცია",
"backup_keep_last_amount": "შესანახი სარეზერვო ასლების რაოდენობა",
"backup_settings": "სარეზერვო ასლების პარამეტრები",
"backup_settings_description": "მონაცემთა ბაზის სარეზერვო ასლების პარამეტრების მართვა",
"check_all": "შეამოწმე ყველა",
"cleanup": "გასუფთავება",
"confirm_delete_library": "ნამდვილად გინდა {library} ბიბლიოთეკის წაშლა?",
"confirm_email_below": "დასადასტურებლად, ქვემოთ აკრიფე \"{email}\"",
"confirm_user_password_reset": "ნამდვილად გინდა {user}-(ი)ს პაროლის დარესეტება?",
"disable_login": "გამორთე ავტორიზაცია",
"external_library_management": "გარე ბიბლიოთეკების მართვა",
"face_detection": "სახის ამოცნობა",
"image_format": "ფორმატი",
"image_fullsize_title": "სრული ზომის გამოსახულების პარამეტრები",
"image_quality": "ხარისხი",
"image_resolution": "გაფართოება",
"image_settings": "გამოსახულების პარამეტრები",
"image_settings_description": "გენერირებული ფოტოების ხარისხისა და რეზოლუციის მართვა",
"image_thumbnail_description": "მინიატურა მეტაინფორმაციის გარეშე, რომელიც ფოტოები ჯგუფურად თვალიერებისას გამოიყენება(მაგ. მთავარ თაიმლაინზე)",
"image_thumbnail_quality_description": "მინიატურის ხარისხი 1-დან 100-მდე. დიდი რიცხვი შეესაბამება უკეთეს ხარისხს, თუმცა, უფრო დიდ ფაილებს და აპლიკაციის შესაძლო შენელებას.",
"image_thumbnail_title": "მინიატურის პარამეტრები",
"library_created": "შეიქმნა ბიბლიოთეკა: {library}",
"library_deleted": "ბიბლიოთეკა წაიშალა",
"library_import_path_description": "აირჩიე დასაიმპორტებელი საქაღალდე. ფოტოები და ვიდეოები მოიძებნება ამ საქაღალდესა და მასში არსებულ საქაღალდეებში.",
"library_settings_description": "გარე ბიბლიოთეკების პარამეტრების მართვა",
"logging_settings": "ჟურნალი",
"map_settings": "რუკა",
"migration_job": "მიგრაცია",
"oauth_scope": "დიაპაზონი",
"oauth_settings": "OAuth",
"template_email_preview": "მინიატურა",
"transcoding_acceleration_vaapi": "VAAPI",
"transcoding_threads": "ნაკადები",
"transcoding_tone_mapping": "ტონების ასახვა"
},
"administration": "ადმინისტრაცია",
"advanced": "დამატებით",
"albums": "ალბომები",
"all": "ყველა",
"anti_clockwise": "საათის ისრის საწინააღმდეგო",
"archive": "არქივი",
"asset_hashing": "დაჰეშვა.…",
"asset_skipped": "გამოტოვებულია",
"asset_uploaded": "ატვირთულია",
"asset_uploading": "მიმდინარეობს ატვირთვა…",
"assets": "ობიექტები",
"back": "უკან",
"backward": "უკან გადასვლა",
"build": "აგება",
"camera": "კამერა",
"cancel": "გაუქმება",
"city": "ქალაქი",
"clear": "გასუფთავება",
"clockwise": "საათის ისრის მიმართულებით",
"close": "დახურვა",
"collapse": "აკეცვა",
"color": "ფერი",
"confirm": "დასტური",
"contain": "შეიცავს",
"context": "კონტექსტი",
"continue": "გაგრძელება",
"country": "ქვეყანა",
"cover": "ყდა",
"covers": "ყდები",
"create": "შექმნა",
"created": "შექმნილია",
"dark": "მუქი",
"day": "დღე",
"delete": "წაშლა",
"description": "აღწერა",
"details": "დეტალები",
"direction": "მიმართულება",
"disabled": "გათიშულია",
"discord": "Discord",
"discover": "აღმოჩენა",
"documentation": "დოკუმენტაცია",
"done": "მზადაა",
"download": "გადმოწერა",
"download_settings": "გადმოწერა",
"downloading": "მიმდინარეობს გადმოწერა",
"duplicates": "დუბლიკატები",
"duration": "ხანგრძლივობა",
"edit": "ჩასწორება",
"edited": "ჩასწორებულია",
"editor": "რედაქტორი",
"editor_crop_tool_h2_rotation": "ტრიალი",
"email": "ელფოსტა",
"enable": "ჩართვა",
"enabled": "ჩართულია",
"error": "შეცდომა",
"exif": "Exif",
"expired": "ვადაამოწურულია",
"explore": "დათვალიერება",
"explorer": "გამცილებელი",
"export": "გატანა",
"extension": "გაფართოება",
"external": "გარე",
"face_unassigned": "მიუნიჭებელი",
"favorite": "რჩეული",
"favorites": "რჩეულები",
"features": "თვისებები",
"filename": "ფაილის სახელი",
"filetype": "ფაილის ტიპი",
"folders": "საქაღალდეები",
"forward": "წინ",
"general": "ზოგადი",
"host": "ჰოსტი",
"hour": "საათი",
"image": "გამოსახულება",
"info": "ინფორმაცია",
"jobs": "დავალებები",
"keep": "შენარჩუნება",
"language": "ენა",
"latitude": "განედი",
"leave": "გასვლა",
"level": "დონე",
"library": "ბიბლიოთეკა",
"light": "ღია",
"list": "სია",
"loading": "ჩატვირთვა",
"login": "შესვლა",
"longitude": "გრძედი",
"look": "შეხედვა",
"make": "მწარმოებელი",
"map": "რუკა",
"matches": "დამთხვევები",
"memories": "მოგონებები",
"memory": "მეხსიერება",
"menu": "მენიუ",
"merge": "შერწყმა",
"minimize": "დაპატარავება"
}

1
i18n/kk.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -121,7 +121,6 @@
"no_pattern_added": "",
"note_apply_storage_label_previous_assets": "",
"note_cannot_be_changed_later": "",
"note_unlimited_quota": "",
"notification_email_from_address": "",
"notification_email_from_address_description": "",
"notification_email_host_description": "",
@@ -621,7 +620,6 @@
"no_shared_albums_message": "",
"not_in_any_album": "",
"note_apply_storage_label_to_previously_uploaded assets": "",
"note_unlimited_quota": "",
"notes": "",
"notification_toggle_setting_description": "",
"notifications": "",

Some files were not shown because too many files have changed in this diff Show More