Compare commits

...

90 Commits

Author SHA1 Message Date
bo0tzz 2f2e281b07 empty commit to allow PR? 2025-04-03 13:48:20 +02: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
432 changed files with 16480 additions and 9307 deletions
+3
View File
@@ -6,6 +6,9 @@ mobile/openapi/**/*.dart linguist-generated=true
mobile/lib/**/*.g.dart -diff -merge mobile/lib/**/*.g.dart -diff -merge
mobile/lib/**/*.g.dart linguist-generated=true 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 -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true open-api/typescript-sdk/fetch-client.ts linguist-generated=true
+1 -1
View File
@@ -62,7 +62,7 @@ jobs:
cache: 'gradle' cache: 'gradle'
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
+3 -3
View File
@@ -46,7 +46,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@5f8171a638ada777af81d42b55959a643bb29017 # v3 uses: github/codeql-action/init@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@@ -59,7 +59,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # 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) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@5f8171a638ada777af81d42b55959a643bb29017 # v3 uses: github/codeql-action/autobuild@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3
# ️ Command-line programs to run using the OS shell. # ️ 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 # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -72,6 +72,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh # ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@5f8171a638ada777af81d42b55959a643bb29017 # v3 uses: github/codeql-action/analyze@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3
with: with:
category: '/language:${{matrix.language}}' category: '/language:${{matrix.language}}'
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
steps: steps:
- name: Generate a token - name: Generate a token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: PR Conventional Commit Validation - name: PR Conventional Commit Validation
uses: ytanikin/PRConventionalCommits@1.3.0 uses: ytanikin/PRConventionalCommits@b628c5a234cc32513014b7bfdd1e47b532124d98 # 1.3.0
with: with:
task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]' task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]'
add_label: 'false' add_label: 'false'
+3 -3
View File
@@ -31,7 +31,7 @@ jobs:
steps: steps:
- name: Generate a token - name: Generate a token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
@@ -42,7 +42,7 @@ jobs:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5 uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
- name: Bump version - name: Bump version
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}" run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
@@ -70,7 +70,7 @@ jobs:
steps: steps:
- name: Generate a token - name: Generate a token
id: generate-token id: generate-token
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
+2 -2
View File
@@ -41,7 +41,7 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
@@ -55,7 +55,7 @@ jobs:
working-directory: ./mobile working-directory: ./mobile
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@6ed7632824d235029086612d4330d659005af687 # v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
+14 -14
View File
@@ -365,7 +365,7 @@ jobs:
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # v2 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
@@ -384,8 +384,8 @@ jobs:
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5 uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5 - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818) # TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
# with: # with:
# python-version: 3.11 # python-version: 3.11
@@ -395,16 +395,16 @@ jobs:
uv sync --extra cpu uv sync --extra cpu
- name: Lint with ruff - name: Lint with ruff
run: | run: |
uv run ruff check --output-format=github app export uv run ruff check --output-format=github immich_ml
- name: Check black formatting - name: Check black formatting
run: | run: |
uv run black --check app export uv run black --check immich_ml
- name: Run mypy type checking - name: Run mypy type checking
run: | run: |
uv run mypy --strict app/ uv run mypy --strict immich_ml/
- name: Run tests and coverage - name: Run tests and coverage
run: | run: |
uv run pytest app --cov=app --cov-report term-missing uv run pytest --cov=immich_ml --cov-report term-missing
github-files-formatting: github-files-formatting:
name: .github Files Formatting name: .github Files Formatting
@@ -417,10 +417,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './.github/.nvmrc' node-version-file: './.github/.nvmrc'
@@ -466,7 +466,7 @@ jobs:
run: make open-api run: make open-api
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@6ed7632824d235029086612d4330d659005af687 # v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
@@ -525,10 +525,10 @@ jobs:
- name: Generate new migrations - name: Generate new migrations
continue-on-error: true continue-on-error: true
run: npm run typeorm:migrations:generate ./src/migrations/TestMigration run: npm run migrations:generate TestMigration
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@6ed7632824d235029086612d4330d659005af687 # v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
@@ -538,7 +538,7 @@ jobs:
run: | run: |
echo "ERROR: Generated migration files not up to date!" echo "ERROR: Generated migration files not up to date!"
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}" echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
cat ./src/migrations/*-TestMigration.ts cat ./src/*-TestMigration.ts
exit 1 exit 1
- name: Run SQL generation - name: Run SQL generation
@@ -547,7 +547,7 @@ jobs:
DB_URL: postgres://postgres:postgres@localhost:5432/immich DB_URL: postgres://postgres:postgres@localhost:5432/immich
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@6ed7632824d235029086612d4330d659005af687 # v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-sql-files id: verify-changed-sql-files
with: with:
files: | files: |
+2 -1
View File
@@ -39,6 +39,7 @@
], ],
"explorer.fileNesting.enabled": true, "explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": { "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"
} }
} }
+1 -1
View File
@@ -104,7 +104,7 @@ For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoi
| Read-only gallery | Yes | Yes | | Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes | | Stacked Photos | Yes | Yes |
| Tags | No | Yes | | Tags | No | Yes |
| Folder View | No | Yes | | Folder View | Yes | Yes |
## Translations ## Translations
+10 -20
View File
@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js'; import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import tsParser from '@typescript-eslint/parser'; import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals'; import globals from 'globals';
import path from 'node:path'; import path from 'node:path';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); 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'], ignores: ['eslint.config.mjs', 'dist'],
}, },
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{ {
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: { languageOptions: {
globals: { globals: {
...globals.node, ...globals.node,
}, },
parser: tsParser, parser: typescriptEslint.parser,
ecmaVersion: 5, ecmaVersion: 5,
sourceType: 'module', sourceType: 'module',
@@ -58,4 +48,4 @@ export default [
'object-shorthand': ['error', 'always'], 'object-shorthand': ['error', 'always'],
}, },
}, },
]; ]);
+392 -608
View File
File diff suppressed because it is too large Load Diff
+4 -5
View File
@@ -1,6 +1,6 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.2.54", "version": "2.2.61",
"description": "Command Line Interface (CLI) for Immich", "description": "Command Line Interface (CLI) for Immich",
"type": "module", "type": "module",
"exports": "./dist/index.js", "exports": "./dist/index.js",
@@ -21,9 +21,7 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9", "@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1", "@types/mock-fs": "^4.13.1",
"@types/node": "^22.13.10", "@types/node": "^22.13.14",
"@typescript-eslint/eslint-plugin": "^8.15.0",
"@typescript-eslint/parser": "^8.15.0",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0", "byte-size": "^9.0.0",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
@@ -31,12 +29,13 @@
"eslint": "^9.14.0", "eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0", "eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^56.0.1", "eslint-plugin-unicorn": "^57.0.0",
"globals": "^16.0.0", "globals": "^16.0.0",
"mock-fs": "^5.2.0", "mock-fs": "^5.2.0",
"prettier": "^3.2.5", "prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-organize-imports": "^4.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"typescript-eslint": "^8.28.0",
"vite": "^6.0.0", "vite": "^6.0.0",
"vite-tsconfig-paths": "^5.0.0", "vite-tsconfig-paths": "^5.0.0",
"vitest": "^3.0.0", "vitest": "^3.0.0",

Before

Width:  |  Height:  |  Size: 4.9 MiB

After

Width:  |  Height:  |  Size: 4.9 MiB

@@ -71,7 +71,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
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`. 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. 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, rocm, 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. 4. Redeploy the `immich-machine-learning` container with these updated settings.
### Confirming Device Usage ### Confirming Device Usage
+415 -390
View File
@@ -45,7 +45,7 @@ Some search examples:
</TabItem> </TabItem>
<TabItem value="Mobile" label="Mobile"> <TabItem value="Mobile" label="Mobile">
<img src={require('./img/moblie-smart-serach.webp').default} width="30%" title='Smart search on mobile' /> <img src={require('./img/mobile-smart-search.webp').default} width="30%" title='Smart search on mobile' />
</TabItem> </TabItem>
</Tabs> </Tabs>
@@ -56,7 +56,20 @@ Navigating to `Administration > Settings > Machine Learning Settings > Smart Sea
### CLIP models ### CLIP models
More powerful models can be used for more accurate search results, but are slower and can require more server resources. Check the dropdowns below to see how they compare in memory usage, speed and quality by language. The default search model is fast, but there are many other options that can provide better search results. The tradeoff of using these models is that they're slower and/or use more memory (both when indexing images with background Smart Search jobs and when searching).
The first step of choosing the right model for you is to know which languages your users will search in.
If your users will only search in English, then the [CLIP][huggingface-clip] section is the first place to look. This is a curated list of the models that generally perform the best for their size class. The models here are ordered from higher to lower quality. This means that the top models will generally rank the most relevant results higher and have a higher capacity to understand descriptive, detailed, and/or niche queries. The models are also generally ordered from larger to smaller, so consider the impact on memory usage, job processing and search speed when deciding on one. The smaller models in this list are not too different in quality and many times faster.
[Multilingual models][huggingface-multilingual-clip] are also available so users can search in their native language. Use these models if you expect non-English searches to be common. They can be separated into two search patterns:
- `nllb` models expect the search query to be in the language specified in the user settings
- `xlm` and `siglip2` models understand search text regardless of the current language setting
`nllb` models tend to perform the best and are recommended when users primarily searches in their native, non-English language. `xlm` and `siglip2` models are more flexible and are recommended for mixed language search, where the same user might search in different languages at different times.
For more details, check the tables below to see how they compare in memory usage, speed and quality by language.
Once you've chosen a model, follow these steps: Once you've chosen a model, follow these steps:
@@ -81,7 +94,7 @@ Memory and execution time estimates were obtained without acceleration on a 7800
**Memory (MiB)**: The peak RSS usage of the process afer performing the above timing benchmark. Does not include image decoding, concurrent processing, the web server, etc., which are relatively constant factors. **Memory (MiB)**: The peak RSS usage of the process afer performing the above timing benchmark. Does not include image decoding, concurrent processing, the web server, etc., which are relatively constant factors.
**Recall (%)**: Evaluated on Crossmodal-3600, the average of the recall@1, recall@5 and recall@10 results for zeroshot image retrieval. **Recall (%)**: Evaluated on Crossmodal-3600, the average of the recall@1, recall@5 and recall@10 results for zeroshot image retrieval. Chinese (Simplified), English, French, German, Italian, Japanese, Korean, Polish, Russian, Spanish and Turkish are additionally tested on XTD-10. Chinese (Simplified) and English are additionally tested on Flickr30k. The recall metrics are the average across all tested datasets.
**Pareto Optimal**: Whether the model is not completely outclassed by another model. Try to use models that are optimal for the languages relevant to you. Specifically, for a given model and language, if there's another model that's better for that language in at least one respect (memory usage, execution time, recall) while being at least as good for that language in every other way, then the model is not optimal for that language. **Pareto Optimal**: Whether the model is not completely outclassed by another model. Try to use models that are optimal for the languages relevant to you. Specifically, for a given model and language, if there's another model that's better for that language in at least one respect (memory usage, execution time, recall) while being at least as good for that language in every other way, then the model is not optimal for that language.
@@ -93,59 +106,59 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>English</summary> <summary>English</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 75.73 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 85.99 | ✅ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 75.44 | | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 85.96 | |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 75.19 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 85.96 | |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 75.09 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 85.93 | ❌ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 75.07 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 85.78 | ❌ |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 75.01 | | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 85.75 | |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 74.92 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 85.62 | |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 74.9 | | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 85.53 | |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 74.87 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 85.48 | ❌ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 74.87 | | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 85.47 | |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 74.77 | ❌ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 85.09 | ❌ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 74.28 | | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 85.03 | |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 74.26 | ✅ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 84.86 | ✅ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 73.15 | | | ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 84.61 | |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 72.78 | | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 84.17 | |
| ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 72.58 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 83.51 | ❌ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 72.57 | | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 83.28 | |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 72.47 | | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 83.24 | |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 72.45 | | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 83.23 | |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 72.44 | | | ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 83.19 | |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 72.37 | ❌ | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 82.54 | ❌ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 71.64 | | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 82.43 | |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 71.63 | ❌ | | ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 82.36 | ❌ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 71.45 | | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 82.28 | |
| ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 71.33 | | | ViT-B-16-SigLIP__webli | 1081 | 5.77 | 81.9 | |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 71.19 | ❌ | | ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 81.9 | ❌ |
| ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 69.86 | ❌ | | ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 80.82 | ❌ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 69.66 | ❌ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 80.65 | ❌ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 69.38 | ❌ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 80.16 | ❌ |
| ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 68.78 | | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 79.78 | |
| ViT-L-14__laion400m_e31 | 2183 | 19.87 | 68.53 | ❌ | | ViT-L-14__laion400m_e31 | 2183 | 19.87 | 78.64 | ❌ |
| ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 68.53 | ❌ | | ViT-L-14__laion400m_e32 | 2218 | 19.73 | 78.6 | ❌ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 68.53 | ❌ | | ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 78.06 | ❌ |
| ViT-L-14__laion400m_e32 | 2218 | 19.73 | 68.51 | ❌ | | ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 78.06 | ❌ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 68.41 | | | ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 77.62 | |
| ViT-B-32__laion2b_e16 | 1004 | 2.38 | 68.41 | ❌ | | ViT-B-32__laion2b_e16 | 1004 | 2.38 | 77.47 | ❌ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 68.33 | ❌ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 76.91 | ❌ |
| ViT-B-16__laion400m_e31 | 991 | 5.04 | 66.96 | ✅ | | ViT-B-16__laion400m_e32 | 975 | 4.98 | 76.43 | ✅ |
| ViT-B-16__laion400m_e32 | 975 | 4.98 | 66.95 | | | ViT-B-16__laion400m_e31 | 991 | 5.04 | 76.35 | |
| ViT-B-32__laion400m_e31 | 999 | 2.28 | 65.65 | ✅ | | ViT-B-32__laion400m_e31 | 999 | 2.28 | 73.83 | ✅ |
| ViT-B-32__laion400m_e32 | 1003 | 2.35 | 65.49 | ❌ | | ViT-B-32__laion400m_e32 | 1003 | 2.35 | 73.62 | ❌ |
| ViT-L-14__openai | 2212 | 19.91 | 60.12 | ❌ | | RN50x64__openai | 5079 | 48.79 | 73.34 | ❌ |
| ViT-B-32__openai | 1004 | 2.26 | 59.37 | | | ViT-L-14__openai | 2212 | 19.91 | 72.99 | |
| RN50x64__openai | 5079 | 48.79 | 59.36 | ❌ | | ViT-L-14-336__openai | 2616 | 43.45 | 72.76 | ❌ |
| RN50x16__openai | 2221 | 15.87 | 59.17 | ❌ | | RN50x16__openai | 2221 | 15.87 | 72.59 | ❌ |
| ViT-L-14-336__openai | 2616 | 43.45 | 59.09 | ❌ | | RN50x4__openai | 1416 | 5.85 | 70.8 | ❌ |
| RN50__openai | 913 | 2.39 | 58.32 | | | ViT-B-16__openai | 985 | 5.03 | 70.01 | |
| ViT-B-16__openai | 985 | 5.03 | 58.27 | | | ViT-B-32__openai | 1004 | 2.26 | 69.9 | |
| RN50x4__openai | 1416 | 5.85 | 57.88 | ❌ | | RN101__openai | 1111 | 3.21 | 69.3 | ❌ |
| RN50__cc12m | 914 | 2.37 | 57.75 | ✅ | | RN50__openai | 913 | 2.39 | 69.02 | ✅ |
| RN101__openai | 1111 | 3.21 | 57.7 | | | RN50__cc12m | 914 | 2.37 | 64.59 | |
| RN101__yfcc15m | 1111 | 3.22 | 50.11 | ❌ | | RN101__yfcc15m | 1111 | 3.22 | 55.21 | ❌ |
| RN50__yfcc15m | 908 | 2.34 | 48.28 | ✅ | | RN50__yfcc15m | 908 | 2.34 | 53.63 | ✅ |
</details> </details>
<details> <details>
<summary>Arabic</summary> <summary>Arabic</summary>
@@ -156,8 +169,8 @@ Memory and execution time estimates were obtained without acceleration on a 7800
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 74.03 | ✅ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 74.03 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 73.19 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 73.19 | ✅ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 69.31 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 69.31 | ✅ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 69.29 | ❌ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 69.29 | ❌ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 69.29 | ❌ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 69.29 | ❌ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 68.64 | ✅ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 68.64 | ✅ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 68.35 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 68.35 | ✅ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 68.25 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 68.25 | ✅ |
@@ -195,25 +208,25 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>Chinese (Simplified)</summary> <summary>Chinese (Simplified)</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 77.49 | ✅ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 79.7 | ✅ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 77.19 | | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 78.94 | |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 76.98 | | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 75.22 | |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 72.89 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 74.8 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 72.65 | | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 73.91 | |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 72.52 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 72.8 | |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 67.83 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 72.77 | ❌ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 67.81 | | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 72.41 | |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 67.51 | | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 72.36 | |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 67.39 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 71.59 | ❌ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 67.33 | | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 71.37 | |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 67.23 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 71.3 | |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 67.05 | | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 71.11 | |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 66.87 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 70.95 | ✅ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 66.24 | | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 70.51 | |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 66.1 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 67.48 | ✅ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 65.56 | | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 66.84 | |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 64.39 | | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 65.7 | |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 62.56 | ❌ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 63.38 | ❌ |
</details> </details>
<details> <details>
<summary>Croatian</summary> <summary>Croatian</summary>
@@ -324,8 +337,8 @@ Memory and execution time estimates were obtained without acceleration on a 7800
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 80.05 | ✅ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 80.05 | ✅ |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 79.81 | ❌ | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 79.81 | ❌ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 79.72 | ❌ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 79.72 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 79.72 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 79.72 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 79.64 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 79.64 | ✅ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 79.49 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 79.49 | ✅ |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 79.41 | ❌ | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 79.41 | ❌ |
@@ -357,8 +370,8 @@ Memory and execution time estimates were obtained without acceleration on a 7800
| ViT-L-14__laion400m_e32 | 2218 | 19.73 | 29.56 | ❌ | | ViT-L-14__laion400m_e32 | 2218 | 19.73 | 29.56 | ❌ |
| ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 29.54 | ✅ | | ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 29.54 | ✅ |
| ViT-B-32__laion2b_e16 | 1004 | 2.38 | 29.36 | ❌ | | ViT-B-32__laion2b_e16 | 1004 | 2.38 | 29.36 | ❌ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 27.76 | ❌ |
| ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 27.76 | ❌ | | ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 27.76 | ❌ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 27.76 | ❌ |
| ViT-B-16__laion400m_e32 | 975 | 4.98 | 25.67 | ✅ | | ViT-B-16__laion400m_e32 | 975 | 4.98 | 25.67 | ✅ |
| ViT-B-32__laion400m_e32 | 1003 | 2.35 | 25.59 | ❌ | | ViT-B-32__laion400m_e32 | 1003 | 2.35 | 25.59 | ❌ |
| ViT-B-16__laion400m_e31 | 991 | 5.04 | 25.53 | ❌ | | ViT-B-16__laion400m_e31 | 991 | 5.04 | 25.53 | ❌ |
@@ -384,8 +397,8 @@ Memory and execution time estimates were obtained without acceleration on a 7800
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 34.27 | ❌ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 34.27 | ❌ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 34.14 | ❌ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 34.14 | ❌ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 33.98 | ❌ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 33.98 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 30.57 | ❌ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 30.57 | ❌ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 30.57 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 30.57 | ❌ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 30.05 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 30.05 | ✅ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 24.92 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 24.92 | ❌ |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 24.02 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 24.02 | ❌ |
@@ -422,110 +435,111 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>French</summary> <summary>French</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 88.01 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 86.5 | ✅ |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 87.74 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 86.5 | ❌ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 87.69 | | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 86.39 | |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 87.6 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 86.15 | |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 87.58 | | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 86.1 | |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 87.51 | | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 86.07 | |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 87.23 | ❌ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 86.06 | ❌ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 86.9 | ✅ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 85.89 | ✅ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 86.9 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 85.67 | ✅ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 86.44 | ✅ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 85.67 | ✅ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 86.44 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 85.63 | ❌ |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 86.28 | | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 85.39 | |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 86.11 | | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 85.35 | |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 86.08 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 84.97 | ✅ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 84.49 | | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 83.8 | |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 84.3 | | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 82.96 | |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 83.03 | ✅ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 82.91 | ✅ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 82.93 | ❌ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 82.52 | ❌ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 82.27 | ✅ | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 81.21 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 82.14 | | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 80.23 | |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 80.96 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 79.85 | ❌ |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 80.64 | | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 79.47 | |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 80.28 | | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 79.3 | |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 79.65 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 77.49 | ✅ |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 77.4 | ✅ | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 76.82 | ✅ |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 76.88 | ✅ | | ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 75.94 | ✅ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 76.3 | ✅ | | ViT-B-16-SigLIP__webli | 1081 | 5.77 | 75.3 | ✅ |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 75.68 | ❌ | | ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 75.24 | ❌ |
| ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 69.59 | ❌ | | ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 69.33 | ❌ |
| ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 68.36 | ❌ | | ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 64.41 | ❌ |
| ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 61.78 | ❌ | | ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 62.86 | ❌ |
| ViT-L-14__laion400m_e32 | 2218 | 19.73 | 58.4 | ❌ | | ViT-L-14__laion400m_e32 | 2218 | 19.73 | 59.27 | ❌ |
| ViT-L-14__laion400m_e31 | 2183 | 19.87 | 58.35 | ❌ | | ViT-L-14__laion400m_e31 | 2183 | 19.87 | 59.09 | ❌ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 57.17 | ❌ | | ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 58.25 | ❌ |
| ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 57.17 | ❌ | | ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 58.25 | ❌ |
| ViT-B-32__laion2b_e16 | 1004 | 2.38 | 57.05 | ✅ | | ViT-B-32__laion2b_e16 | 1004 | 2.38 | 56.97 | ✅ |
| ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 56.08 | ✅ | | ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 56.21 | ✅ |
| ViT-B-16__laion400m_e31 | 991 | 5.04 | 52.96 | ✅ | | ViT-B-32__laion400m_e31 | 999 | 2.28 | 53.36 | ✅ |
| ViT-B-16__laion400m_e32 | 975 | 4.98 | 52.83 | ✅ | | ViT-B-16__laion400m_e32 | 975 | 4.98 | 53.33 | ✅ |
| ViT-B-32__laion400m_e32 | 1003 | 2.35 | 51.88 | ❌ | | ViT-B-16__laion400m_e31 | 991 | 5.04 | 53.26 | ❌ |
| ViT-B-32__laion400m_e31 | 999 | 2.28 | 51.82 | | | ViT-B-32__laion400m_e32 | 1003 | 2.35 | 53.22 | |
| RN50x64__openai | 5079 | 48.79 | 42.86 | ❌ | | ViT-L-14__openai | 2212 | 19.91 | 46.34 | ❌ |
| ViT-L-14-336__openai | 2616 | 43.45 | 42.81 | ❌ | | RN50x64__openai | 5079 | 48.79 | 46.3 | ❌ |
| ViT-L-14__openai | 2212 | 19.91 | 42.54 | ❌ | | ViT-L-14-336__openai | 2616 | 43.45 | 45.95 | ❌ |
| RN50x16__openai | 2221 | 15.87 | 41.72 | ❌ | | RN50x16__openai | 2221 | 15.87 | 45.69 | ❌ |
| RN50x4__openai | 1416 | 5.85 | 38.85 | ❌ | | RN50x4__openai | 1416 | 5.85 | 42.48 | ❌ |
| RN101__openai | 1111 | 3.21 | 36.79 | ❌ | | RN101__openai | 1111 | 3.21 | 40.16 | ❌ |
| ViT-B-16__openai | 985 | 5.03 | 36.47 | ❌ | | ViT-B-16__openai | 985 | 5.03 | 40.1 | ❌ |
| ViT-B-32__openai | 1004 | 2.26 | 35.17 | ✅ | | ViT-B-32__openai | 1004 | 2.26 | 38.27 | ✅ |
| RN50__openai | 913 | 2.39 | 34.44 | ✅ | | RN50__openai | 913 | 2.39 | 37.8 | ✅ |
</details> </details>
<details> <details>
<summary>German</summary> <summary>German</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 90.04 | ✅ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 87.32 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 89.97 | | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 87.29 | |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 89.85 | ❌ | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 87.29 | ❌ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 89.81 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 87.21 | ✅ |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 89.77 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 87.18 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 89.69 | | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 87.14 | |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 89.45 | | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 87.07 | |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 89.44 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 86.83 | ❌ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 89.39 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 86.81 | ✅ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 89.35 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 86.75 | ✅ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 89.03 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 86.74 | |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 88.82 | | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 86.68 | |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 88.55 | | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 86.56 | |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 88.42 | | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 86.16 | |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 87.19 | ❌ | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 84.54 | ❌ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 86.44 | ✅ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 84.41 | ✅ |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 84.81 | ✅ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 84.25 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 84.81 | ❌ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 83.8 | ❌ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 84.58 | | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 82.59 | |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 84.44 | ✅ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 81.53 | ✅ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 83.33 | | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 81.34 | |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 82.75 | | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 81.15 | |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 82.32 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 81.05 | ❌ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 81.63 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 78.35 | ✅ |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 76.76 | ✅ | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 76.56 | ✅ |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 76.33 | ✅ | | ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 76.0 | ✅ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 75.19 | ✅ | | ViT-B-16-SigLIP__webli | 1081 | 5.77 | 75.21 | ✅ |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 75.07 | ❌ | | ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 75.14 | ❌ |
| ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 64.61 | ❌ | | ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 65.86 | ❌ |
| ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 52.81 | ❌ | | ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 56.87 | ❌ |
| ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 42.88 | ❌ | | ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 47.19 | ❌ |
| ViT-L-14__laion400m_e32 | 2218 | 19.73 | 38.65 | ❌ | | ViT-L-14__laion400m_e32 | 2218 | 19.73 | 43.36 | ❌ |
| ViT-L-14__laion400m_e31 | 2183 | 19.87 | 38.37 | ❌ | | ViT-L-14__laion400m_e31 | 2183 | 19.87 | 43.0 | ❌ |
| ViT-B-32__laion2b_e16 | 1004 | 2.38 | 37.65 | ✅ | | ViT-B-32__laion2b_e16 | 1004 | 2.38 | 41.81 | ✅ |
| ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 36.6 | ✅ | | ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 40.43 | ✅ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 35.44 | ❌ | | ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 40.41 | ❌ |
| ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 35.44 | ❌ | | ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 40.41 | ❌ |
| ViT-B-16__laion400m_e31 | 991 | 5.04 | 32.46 | ✅ | | ViT-B-16__laion400m_e31 | 991 | 5.04 | 37.71 | ✅ |
| ViT-B-16__laion400m_e32 | 975 | 4.98 | 32.31 | ✅ | | ViT-B-16__laion400m_e32 | 975 | 4.98 | 37.64 | ✅ |
| ViT-B-32__laion400m_e31 | 999 | 2.28 | 31.85 | ✅ | | ViT-B-32__laion400m_e31 | 999 | 2.28 | 36.04 | ✅ |
| ViT-B-32__laion400m_e32 | 1003 | 2.35 | 31.81 | ❌ | | ViT-B-32__laion400m_e32 | 1003 | 2.35 | 35.9 | ❌ |
| RN50x64__openai | 5079 | 48.79 | 28.41 | ❌ | | RN50x64__openai | 5079 | 48.79 | 34.19 | ❌ |
| ViT-L-14__openai | 2212 | 19.91 | 27.63 | ❌ | | ViT-L-14__openai | 2212 | 19.91 | 33.1 | ❌ |
| ViT-L-14-336__openai | 2616 | 43.45 | 27.09 | ❌ | | ViT-L-14-336__openai | 2616 | 43.45 | 32.25 | ❌ |
| RN50x16__openai | 2221 | 15.87 | 24.48 | ❌ | | RN50x16__openai | 2221 | 15.87 | 30.56 | ❌ |
| RN50x4__openai | 1416 | 5.85 | 23.49 | ❌ | | RN50x4__openai | 1416 | 5.85 | 29.2 | ❌ |
| RN50__openai | 913 | 2.39 | 20.91 | | | ViT-B-16__openai | 985 | 5.03 | 25.77 | |
| ViT-B-16__openai | 985 | 5.03 | 20.83 | ❌ | | RN101__openai | 1111 | 3.21 | 25.46 | ❌ |
| RN101__openai | 1111 | 3.21 | 20.39 | | | RN50__openai | 913 | 2.39 | 24.92 | |
| ViT-B-32__openai | 1004 | 2.26 | 24.13 | ✅ |
</details> </details>
<details> <details>
<summary>Greek</summary> <summary>Greek</summary>
@@ -542,10 +556,10 @@ Memory and execution time estimates were obtained without acceleration on a 7800
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 60.63 | ❌ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 60.63 | ❌ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 60.41 | ❌ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 60.41 | ❌ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 60.1 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 60.1 | ❌ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 60.06 | ❌ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 60.06 | ❌ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 60.06 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 59.44 | ❌ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 60.06 | ❌ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 59.44 | ❌ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 59.44 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 59.44 | ❌ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 59.43 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 59.43 | ✅ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 58.78 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 58.78 | ✅ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 53.42 | ❌ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 53.42 | ❌ |
@@ -670,99 +684,104 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>Italian</summary> <summary>Italian</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 88.6 | ✅ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 87.17 | ✅ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 88.25 | ✅ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 86.91 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 88.12 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 86.83 | |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 88.04 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 86.77 | ✅ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 87.97 | | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 86.67 | |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 87.69 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 86.42 | ❌ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 87.29 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 86.35 | ✅ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 87.06 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 86.34 | ❌ |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 86.91 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 86.18 | |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 86.88 | | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 86.17 | |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 86.68 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 85.84 | ✅ |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 86.61 | ❌ | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 85.8 | ❌ |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 85.55 | | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 85.7 | |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 85.37 | ❌ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 85.67 | ❌ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 83.78 | ✅ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 83.32 | ✅ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 83.0 | ❌ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 82.95 | ❌ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 81.81 | | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 82.73 | |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 81.77 | ❌ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 82.72 | ❌ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 81.32 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 81.07 | ❌ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 80.97 | | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 80.8 | |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 80.53 | ✅ | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 80.6 | ✅ |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 80.1 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 80.35 | ❌ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 79.71 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 78.79 | ✅ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 77.31 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 76.62 | ✅ |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 75.19 | ✅ | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 76.51 | ✅ |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 74.49 | ✅ | | ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 76.08 | ✅ |
| ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 74.04 | | | ViT-B-16-SigLIP__webli | 1081 | 5.77 | 75.29 | |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 73.68 | | | ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 75.29 | |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 73.57 | | | ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 74.84 | |
| ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 51.04 | ❌ | | ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 56.32 | ❌ |
| ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 41.73 | ❌ | | ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 47.25 | ❌ |
| ViT-L-14__laion400m_e32 | 2218 | 19.73 | 36.87 | ❌ | | ViT-L-14__laion400m_e32 | 2218 | 19.73 | 43.09 | ❌ |
| ViT-L-14__laion400m_e31 | 2183 | 19.87 | 36.84 | ❌ | | ViT-L-14__laion400m_e31 | 2183 | 19.87 | 42.99 | ❌ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 34.68 | ❌ | | ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 40.29 | ❌ |
| ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 34.68 | ❌ | | ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 40.29 | ❌ |
| ViT-B-32__laion2b_e16 | 1004 | 2.38 | 34.64 | ✅ | | ViT-B-32__laion2b_e16 | 1004 | 2.38 | 39.67 | ✅ |
| ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 33.8 | ✅ | | ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 39.03 | ✅ |
| ViT-B-16__laion400m_e32 | 975 | 4.98 | 30.11 | ✅ | | ViT-B-16__laion400m_e32 | 975 | 4.98 | 36.14 | ✅ |
| ViT-B-16__laion400m_e31 | 991 | 5.04 | 30.04 | ❌ | | ViT-B-16__laion400m_e31 | 991 | 5.04 | 35.89 | ❌ |
| ViT-B-32__laion400m_e32 | 1003 | 2.35 | 29.89 | ❌ | | ViT-B-32__laion400m_e32 | 1003 | 2.35 | 35.59 | ❌ |
| ViT-B-32__laion400m_e31 | 999 | 2.28 | 29.88 | ✅ | | ViT-B-32__laion400m_e31 | 999 | 2.28 | 35.56 | ✅ |
| RN50x64__openai | 5079 | 48.79 | 26.67 | ❌ | | RN50x64__openai | 5079 | 48.79 | 33.53 | ❌ |
| ViT-L-14__openai | 2212 | 19.91 | 25.51 | ❌ | | ViT-L-14__openai | 2212 | 19.91 | 32.19 | ❌ |
| ViT-L-14-336__openai | 2616 | 43.45 | 25.3 | ❌ | | ViT-L-14-336__openai | 2616 | 43.45 | 30.95 | ❌ |
| RN50x16__openai | 2221 | 15.87 | 21.37 | ❌ | | RN50x16__openai | 2221 | 15.87 | 28.85 | ❌ |
| RN50x4__openai | 1416 | 5.85 | 25.75 | ❌ |
| ViT-B-16__openai | 985 | 5.03 | 25.18 | ❌ |
| RN101__openai | 1111 | 3.21 | 24.48 | ❌ |
| RN50__openai | 913 | 2.39 | 23.89 | ✅ |
| ViT-B-32__openai | 1004 | 2.26 | 23.39 | ✅ |
</details> </details>
<details> <details>
<summary>Japanese</summary> <summary>Japanese</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 86.97 | ✅ | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 83.95 | ✅ |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 85.15 | ❌ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 82.21 | ❌ |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 84.69 | ❌ | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 81.55 | ❌ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 81.77 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 78.72 | ✅ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 81.26 | ❌ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 78.53 | ❌ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 81.19 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 75.93 | ✅ |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 69.99 | ❌ | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 66.86 | ❌ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 68.58 | ❌ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 65.59 | ❌ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 68.35 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 65.48 | ❌ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 68.29 | ❌ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 65.36 | ❌ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 67.99 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 64.47 | ❌ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 67.68 | ❌ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 64.17 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 67.67 | ❌ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 64.08 | ❌ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 66.85 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 63.69 | ✅ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 66.54 | ❌ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 63.33 | ❌ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 65.77 | ❌ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 63.02 | ❌ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 61.48 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 58.39 | ✅ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 58.1 | ❌ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 56.38 | ❌ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 55.31 | ❌ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 53.16 | ❌ |
</details> </details>
<details> <details>
<summary>Korean</summary> <summary>Korean</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 77.21 | ✅ | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 80.56 | ✅ |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 76.89 | ✅ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 80.53 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 75.72 | ✅ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 77.09 | ✅ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 75.06 | ✅ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 77.08 | ✅ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 74.94 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 76.97 | ❌ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 74.36 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 76.92 | ✅ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 74.09 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 76.58 | ✅ |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 73.61 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 76.2 | |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 73.55 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 75.95 | ✅ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 73.41 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 75.86 | ✅ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 73.18 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 75.67 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 72.79 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 75.49 | |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 72.27 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 74.6 | ❌ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 71.73 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 74.52 | ✅ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 71.12 | ❌ | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 73.88 | ❌ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 70.25 | ✅ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 71.09 | ✅ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 67.54 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 68.87 | ✅ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 67.37 | ✅ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 67.94 | ✅ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 65.44 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 66.39 | ✅ |
</details> </details>
<details> <details>
<summary>Maori</summary> <summary>Maori</summary>
@@ -834,34 +853,34 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>Polish</summary> <summary>Polish</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 80.6 | ✅ | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 83.49 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 80.17 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 83.45 | |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 80.06 | | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 83.11 | |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 80.04 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 82.99 | ✅ |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 79.98 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 82.96 | ❌ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 79.8 | | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 82.93 | |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 79.72 | | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 82.61 | |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 79.66 | | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 82.26 | |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 79.45 | ✅ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 82.24 | ✅ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 79.26 | | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 82.03 | |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 79.21 | ❌ | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 82.03 | ❌ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 79.14 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 81.92 | ✅ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 78.23 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 81.27 | ✅ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 75.33 | ✅ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 80.0 | ✅ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 74.7 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 79.65 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 74.63 | | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 76.75 | |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 73.69 | ✅ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 76.52 | ✅ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 73.44 | | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 75.1 | |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 70.34 | ❌ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 73.9 | ❌ |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 59.4 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 65.03 | ❌ |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 59.14 | ❌ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 64.89 | ❌ |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 48.74 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 51.6 | ❌ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 48.35 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 51.29 | ❌ |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 40.76 | ✅ | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 46.15 | ✅ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 39.13 | ✅ | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 41.55 | ✅ |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 39.09 | | | ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 41.17 | |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 38.55 | | | ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 40.9 | |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 38.46 | | | ViT-B-16-SigLIP__webli | 1081 | 5.77 | 40.76 | |
</details> </details>
<details> <details>
<summary>Portuguese</summary> <summary>Portuguese</summary>
@@ -955,84 +974,87 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>Russian</summary> <summary>Russian</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 87.65 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 84.54 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 87.62 | ❌ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 84.41 | ❌ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 87.4 | | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 84.36 | |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 87.39 | ❌ | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 84.31 | ❌ |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 86.88 | | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 84.22 | |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 86.87 | ✅ | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 83.9 | ✅ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 86.74 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 83.69 | ✅ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 86.26 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 83.5 | ✅ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 85.98 | | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 83.31 | |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 85.66 | ❌ | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 83.21 | ❌ |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 85.54 | | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 83.11 | |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 84.69 | ❌ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 82.7 | ❌ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 84.29 | | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 82.69 | |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 84.24 | | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 80.91 | |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 82.86 | | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 79.75 | |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 81.59 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 79.35 | ✅ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 80.56 | | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 78.91 | |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 80.44 | | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 78.06 | |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 79.99 | | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 76.44 | |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 39.51 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 42.81 | ❌ |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 39.16 | ❌ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 42.1 | ❌ |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 23.33 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 24.95 | ❌ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 22.4 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 24.25 | ❌ |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 20.85 | ✅ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 20.44 | ✅ |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 20.41 | ❌ |
</details> </details>
<details> <details>
<summary>Spanish</summary> <summary>Spanish</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 84.24 | ✅ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 85.47 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 83.94 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 85.44 | ✅ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 83.91 | | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 85.32 | |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 83.78 | | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 85.22 | |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 83.71 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 85.15 | |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 83.59 | | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 84.81 | |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 83.2 | | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 84.68 | |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 83.0 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 84.6 | |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 82.91 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 84.55 | ✅ |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 82.58 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 84.27 | ❌ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 82.5 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 84.15 | ✅ |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 82.48 | ❌ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 83.87 | ❌ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 82.22 | | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 83.74 | |
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 81.34 | | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 83.61 | |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 80.18 | ❌ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 83.15 | ❌ |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 80.14 | ❌ | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 81.7 | ❌ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 78.99 | | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 80.91 | |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 78.19 | ✅ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 80.73 | ✅ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 78.15 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 80.69 | ❌ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 77.93 | | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 80.3 | |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 77.64 | ❌ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 79.8 | ❌ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 77.21 | | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 79.71 | |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 76.36 | | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 79.64 | |
| ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 75.73 | ✅ | | ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 78.0 | ✅ |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 75.56 | | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 77.83 | |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 75.01 | ✅ | | ViT-B-16-SigLIP__webli | 1081 | 5.77 | 76.87 | ✅ |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 74.62 | | | ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 76.66 | |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 74.6 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 75.99 | ✅ |
| ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 70.31 | ❌ | | ViT-SO400M-14-SigLIP-384__webli | 4417 | 72.19 | 71.96 | ❌ |
| ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 58.31 | ❌ | | ViT-H-14__laion2b-s32b-b79k | 4676 | 39.06 | 62.06 | ❌ |
| ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 49.56 | ❌ | | ViT-L-14__laion2b-s32b-b82k | 2233 | 20.56 | 53.78 | ❌ |
| ViT-L-14__laion400m_e32 | 2218 | 19.73 | 46.69 | ❌ | | ViT-L-14__laion400m_e32 | 2218 | 19.73 | 50.13 | ❌ |
| ViT-L-14__laion400m_e31 | 2183 | 19.87 | 46.53 | ❌ | | ViT-L-14__laion400m_e31 | 2183 | 19.87 | 50.0 | ❌ |
| ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 44.05 | ❌ | | ViT-B-16-plus-240__laion400m_e32 | 1246 | 6.95 | 47.39 | ❌ |
| ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 44.05 | ❌ | | ViT-B-16-plus-240__laion400m_e31 | 1263 | 6.94 | 47.39 | ❌ |
| ViT-B-32__laion2b_e16 | 1004 | 2.38 | 43.67 | ✅ | | ViT-B-32__laion2b_e16 | 1004 | 2.38 | 46.47 | ✅ |
| ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 42.5 | ✅ | | ViT-B-32__laion2b-s34b-b79k | 1001 | 2.29 | 45.68 | ✅ |
| ViT-B-16__laion400m_e32 | 975 | 4.98 | 41.03 | ✅ | | ViT-B-16__laion400m_e31 | 991 | 5.04 | 44.0 | ✅ |
| ViT-B-16__laion400m_e31 | 991 | 5.04 | 40.91 | | | ViT-B-16__laion400m_e32 | 975 | 4.98 | 43.98 | |
| ViT-B-32__laion400m_e31 | 999 | 2.28 | 40.3 | | | ViT-B-32__laion400m_e32 | 1003 | 2.35 | 43.8 | |
| ViT-B-32__laion400m_e32 | 1003 | 2.35 | 40.3 | | | ViT-B-32__laion400m_e31 | 999 | 2.28 | 43.73 | |
| RN50x64__openai | 5079 | 48.79 | 37.92 | ❌ | | RN50x64__openai | 5079 | 48.79 | 43.01 | ❌ |
| ViT-L-14-336__openai | 2616 | 43.45 | 37.7 | ❌ | | ViT-L-14__openai | 2212 | 19.91 | 42.96 | ❌ |
| ViT-L-14__openai | 2212 | 19.91 | 37.59 | ❌ | | ViT-L-14-336__openai | 2616 | 43.45 | 41.67 | ❌ |
| RN50x16__openai | 2221 | 15.87 | 34.75 | ❌ | | RN50x16__openai | 2221 | 15.87 | 40.21 | ❌ |
| ViT-B-16__openai | 985 | 5.03 | 32.1 | ❌ | | RN50x4__openai | 1416 | 5.85 | 36.06 | ❌ |
| RN50x4__openai | 1416 | 5.85 | 32.08 | ❌ | | ViT-B-16__openai | 985 | 5.03 | 35.67 | ❌ |
| RN101__openai | 1111 | 3.21 | 30.77 | ❌ | | RN101__openai | 1111 | 3.21 | 34.62 | ❌ |
| RN50__openai | 913 | 2.39 | 30.2 | ✅ | | ViT-B-32__openai | 1004 | 2.26 | 32.6 | ✅ |
| ViT-B-32__openai | 1004 | 2.26 | 29.84 | ✅ | | RN50__openai | 913 | 2.39 | 31.79 | ✅ |
</details> </details>
<details> <details>
<summary>Swahili</summary> <summary>Swahili</summary>
@@ -1057,8 +1079,8 @@ Memory and execution time estimates were obtained without acceleration on a 7800
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 72.1 | ✅ | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 72.1 | ✅ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 72.06 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 72.06 | ✅ |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 71.84 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 71.84 | ✅ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 71.7 | ✅ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 71.7 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 71.7 | ✅ |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 71.7 | ✅ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 71.61 | ❌ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 71.61 | ❌ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 71.51 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 71.51 | ✅ |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 71.45 | ✅ | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 71.45 | ✅ |
@@ -1115,31 +1137,34 @@ Memory and execution time estimates were obtained without acceleration on a 7800
<summary>Turkish</summary> <summary>Turkish</summary>
| Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal | | Model | Memory (MiB) | Execution Time (ms) | Recall (%) | Pareto Optimal |
|------------------------------------------------------|--------------|---------------------|------------|----------------| |------------------------------------------------------|--------------|---------------------|------------|----------------|
| nllb-clip-large-siglip__mrl | 4248 | 75.44 | 81.15 | ✅ | | nllb-clip-large-siglip__mrl | 4248 | 75.44 | 83.91 | ✅ |
| nllb-clip-large-siglip__v1 | 4226 | 75.05 | 80.89 | ✅ | | nllb-clip-large-siglip__v1 | 4226 | 75.05 | 83.74 | ✅ |
| nllb-clip-base-siglip__mrl | 4696 | 16.95 | 78.11 | ✅ | | nllb-clip-base-siglip__mrl | 4696 | 16.95 | 81.26 | ✅ |
| ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 77.51 | ✅ | | nllb-clip-base-siglip__v1 | 4675 | 15.17 | 80.21 | ✅ |
| nllb-clip-base-siglip__v1 | 4675 | 15.17 | 77.36 | ✅ | | ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 79.34 | ✅ |
| ViT-SO400M-16-SigLIP2-512__webli | 4050 | 107.67 | 77.28 | | | ViT-SO400M-14-SigLIP2-378__webli | 3940 | 72.25 | 79.22 | |
| XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 77.24 | ✅ | | XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k | 4014 | 39.14 | 78.9 | ✅ |
| ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 77.01 | ✅ | | ViT-SO400M-16-SigLIP2-384__webli | 3854 | 56.57 | 78.85 | ✅ |
| ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 76.37 | | | ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 78.29 | |
| ViT-SO400M-16-SigLIP2-256__webli | 3611 | 27.84 | 75.92 | | | ViT-gopt-16-SigLIP2-384__webli | 6585 | 146.84 | 78.27 | |
| ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 75.69 | | | ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 78.0 | |
| ViT-gopt-16-SigLIP2-256__webli | 6475 | 64.51 | 75.68 | | | ViT-SO400M-14-SigLIP2__webli | 3622 | 27.63 | 77.81 | |
| ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 75.54 | ✅ | | ViT-L-16-SigLIP2-512__webli | 3358 | 92.59 | 77.67 | ✅ |
| ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 75.16 | ✅ | | ViT-L-16-SigLIP2-384__webli | 3057 | 51.7 | 77.33 | ✅ |
| ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 73.83 | ✅ | | ViT-L-16-SigLIP2-256__webli | 2830 | 23.77 | 76.42 | ✅ |
| ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 70.15 | ✅ | | ViT-B-16-SigLIP-i18n-256__webli | 3029 | 6.87 | 72.44 | ✅ |
| XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 69.19 | ✅ | | XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k | 3030 | 3.2 | 69.84 | ✅ |
| ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 66.72 | ❌ | | ViT-B-16-SigLIP2__webli | 3038 | 5.81 | 69.83 | ❌ |
| ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 64.76 | ❌ | | ViT-B-32-SigLIP2-256__webli | 3061 | 3.31 | 67.13 | ❌ |
| ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 38.8 | ❌ | | ViT-H-14-378-quickgelu__dfn5b | 5049 | 108.4 | 44.43 | ❌ |
| ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 38.48 | ❌ | | ViT-H-14-quickgelu__dfn5b | 4701 | 38.74 | 43.87 | ❌ |
| ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 30.83 | ❌ | | ViT-L-16-SigLIP-384__webli | 3396 | 47.6 | 35.1 | ❌ |
| ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 30.28 | ❌ | | ViT-L-16-SigLIP-256__webli | 3160 | 23.84 | 34.92 | ❌ |
| ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 21.31 | ✅ | | ViT-L-14-quickgelu__dfn2b | 2212 | 20.49 | 25.2 | ✅ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 20.08 | ✅ | | ViT-B-16-SigLIP-512__webli | 1828 | 26.17 | 24.55 | ✅ |
| ViT-B-16-SigLIP__webli | 1081 | 5.77 | 24.13 | ✅ |
| ViT-B-16-SigLIP-384__webli | 1128 | 13.53 | 24.08 | ❌ |
| ViT-B-16-SigLIP-256__webli | 1102 | 7.11 | 23.95 | ❌ |
</details> </details>
<details> <details>
<summary>Ukrainian</summary> <summary>Ukrainian</summary>
+2 -2
View File
@@ -23,12 +23,12 @@ name: immich_remote_ml
services: services:
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, 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 # Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # extends:
# file: hwaccel.ml.yml # file: hwaccel.ml.yml
# service: # set to one of [armnn, cuda, rocm, 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: volumes:
- model-cache:/cache - model-cache:/cache
restart: always restart: always
+4
View File
@@ -1,3 +1,7 @@
---
sidebar_position: 100
---
# Config File # Config File
A config file can be provided as an alternative to the UI configuration. A config file can be provided as an alternative to the UI configuration.
+1 -36
View File
@@ -69,39 +69,4 @@ If you get an error `can't set healthcheck.start_interval as feature require Doc
## Next Steps ## Next Steps
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below. Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
### 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
```
[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
+6
View File
@@ -41,3 +41,9 @@ A list of common steps to take after installing Immich include:
## Step 7 - Setup Server Backups ## Step 7 - Setup Server Backups
<ServerBackup /> <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
+1 -7
View File
@@ -67,10 +67,4 @@ Click "**Edit Rules**" and add the following firewall rules:
## Next Steps ## Next Steps
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below. Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
### 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
+4
View File
@@ -247,6 +247,10 @@ Some examples are: `IMMICH_VERSION`, `UPLOAD_LOCATION`, `DB_DATA_LOCATION`, `TZ`
## Updating the App ## 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. When updates become available, SCALE alerts and provides easy updates.
To update the app to the latest version: To update the app to the latest version:
+4
View File
@@ -131,6 +131,10 @@ For more information on how to use the application once installed, please refer
## Updating Steps ## 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. 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 <img
+32
View File
@@ -0,0 +1,32 @@
---
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
```
[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
+5
View File
@@ -1,2 +1,7 @@
Now that you have imported some pictures, you should setup server backups to preserve your memories. 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). 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.
:::
+28
View File
@@ -1,4 +1,32 @@
[ [
{
"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", "label": "v1.130.0",
"url": "https://v1.130.0.archive.immich.app" "url": "https://v1.130.0.archive.immich.app"
+10 -20
View File
@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js'; import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import tsParser from '@typescript-eslint/parser'; import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals'; import globals from 'globals';
import path from 'node:path'; import path from 'node:path';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); 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'], ignores: ['eslint.config.mjs'],
}, },
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{ {
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: { languageOptions: {
globals: { globals: {
...globals.node, ...globals.node,
}, },
parser: tsParser, parser: typescriptEslint.parser,
ecmaVersion: 5, ecmaVersion: 5,
sourceType: 'module', sourceType: 'module',
@@ -62,4 +52,4 @@ export default [
'object-shorthand': ['error', 'always'], 'object-shorthand': ['error', 'always'],
}, },
}, },
]; ]);
+630 -809
View File
File diff suppressed because it is too large Load Diff
+4 -5
View File
@@ -1,6 +1,6 @@
{ {
"name": "immich-e2e", "name": "immich-e2e",
"version": "1.130.0", "version": "1.131.3",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",
@@ -25,18 +25,16 @@
"@immich/sdk": "file:../open-api/typescript-sdk", "@immich/sdk": "file:../open-api/typescript-sdk",
"@playwright/test": "^1.44.1", "@playwright/test": "^1.44.1",
"@types/luxon": "^3.4.2", "@types/luxon": "^3.4.2",
"@types/node": "^22.13.10", "@types/node": "^22.13.14",
"@types/oidc-provider": "^8.5.1", "@types/oidc-provider": "^8.5.1",
"@types/pg": "^8.11.0", "@types/pg": "^8.11.0",
"@types/pngjs": "^6.0.4", "@types/pngjs": "^6.0.4",
"@types/supertest": "^6.0.2", "@types/supertest": "^6.0.2",
"@typescript-eslint/eslint-plugin": "^8.15.0",
"@typescript-eslint/parser": "^8.15.0",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"eslint": "^9.14.0", "eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0", "eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^56.0.1", "eslint-plugin-unicorn": "^57.0.0",
"exiftool-vendored": "^28.3.1", "exiftool-vendored": "^28.3.1",
"globals": "^16.0.0", "globals": "^16.0.0",
"jose": "^5.6.3", "jose": "^5.6.3",
@@ -49,6 +47,7 @@
"socket.io-client": "^4.7.4", "socket.io-client": "^4.7.4",
"supertest": "^7.0.0", "supertest": "^7.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"typescript-eslint": "^8.28.0",
"utimes": "^5.2.1", "utimes": "^5.2.1",
"vitest": "^3.0.0" "vitest": "^3.0.0"
}, },
+1
View File
@@ -1257,6 +1257,7 @@ describe('/asset', () => {
for (const { id, status } of assets) { for (const { id, status } of assets) {
expect(status).toBe(AssetMediaStatus.Created); 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 }); await utils.waitForWebsocketEvent({ event: 'assetUpload', id });
} }
+204 -2
View File
@@ -329,7 +329,7 @@ describe('/libraries', () => {
const library = await utils.createLibrary(admin.accessToken, { const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId, ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`], importPaths: [`${testAssetDirInternal}/temp`],
exclusionPatterns: ['**/directoryA'], exclusionPatterns: ['**/directoryA/**'],
}); });
await utils.scan(admin.accessToken, library.id); await utils.scan(admin.accessToken, library.id);
@@ -337,7 +337,82 @@ describe('/libraries', () => {
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1); 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 () => { it('should scan multiple import paths', async () => {
@@ -454,6 +529,133 @@ describe('/libraries', () => {
utils.removeImageFile(`${testAssetDir}/temp/folder${char}2/asset2.png`); 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 () => { it('should reimport a modified file', async () => {
const library = await utils.createLibrary(admin.accessToken, { const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId, ownerId: admin.userId,
+2 -2
View File
@@ -633,7 +633,6 @@ describe('/search', () => {
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([ expect(body).toEqual([
'Andalusia', 'Andalusia',
'Berlin',
'Glarus', 'Glarus',
'Greater Accra', 'Greater Accra',
'Havana', 'Havana',
@@ -642,6 +641,7 @@ describe('/search', () => {
'Mississippi', 'Mississippi',
'New York', 'New York',
'Shanghai', 'Shanghai',
'State of Berlin',
'St.-Petersburg', 'St.-Petersburg',
'Tbilisi', 'Tbilisi',
'Tokyo', 'Tokyo',
@@ -657,7 +657,6 @@ describe('/search', () => {
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([ expect(body).toEqual([
'Andalusia', 'Andalusia',
'Berlin',
'Glarus', 'Glarus',
'Greater Accra', 'Greater Accra',
'Havana', 'Havana',
@@ -666,6 +665,7 @@ describe('/search', () => {
'Mississippi', 'Mississippi',
'New York', 'New York',
'Shanghai', 'Shanghai',
'State of Berlin',
'St.-Petersburg', 'St.-Petersburg',
'Tbilisi', 'Tbilisi',
'Tokyo', 'Tokyo',
+1 -1
View File
@@ -117,7 +117,7 @@ describe('/shared-links', () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`); const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
expect(resp.status).toBe(200); expect(resp.status).toBe(200);
expect(resp.header['content-type']).toContain('text/html'); 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`);
}); });
}); });
+5 -5
View File
@@ -22,7 +22,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with an asterisk', test: 'should support paths with an asterisk',
paths: [`/photos\*/image1.jpg`], paths: [`/photos*/image1.jpg`],
files: { files: {
'/photos*/image1.jpg': true, '/photos*/image1.jpg': true,
'/photos*/image2.jpg': false, '/photos*/image2.jpg': false,
@@ -40,7 +40,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with a single quote', test: 'should support paths with a single quote',
paths: [`/photos\'/image1.jpg`], paths: [`/photos'/image1.jpg`],
files: { files: {
"/photos'/image1.jpg": true, "/photos'/image1.jpg": true,
"/photos'/image2.jpg": false, "/photos'/image2.jpg": false,
@@ -49,7 +49,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with a double quote', test: 'should support paths with a double quote',
paths: [`/photos\"/image1.jpg`], paths: [`/photos"/image1.jpg`],
files: { files: {
'/photos"/image1.jpg': true, '/photos"/image1.jpg': true,
'/photos"/image2.jpg': false, '/photos"/image2.jpg': false,
@@ -67,7 +67,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with an opening brace', test: 'should support paths with an opening brace',
paths: [`/photos\{/image1.jpg`], paths: [`/photos{/image1.jpg`],
files: { files: {
'/photos{/image1.jpg': true, '/photos{/image1.jpg': true,
'/photos{/image2.jpg': false, '/photos{/image2.jpg': false,
@@ -76,7 +76,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with a closing brace', test: 'should support paths with a closing brace',
paths: [`/photos\}/image1.jpg`], paths: [`/photos}/image1.jpg`],
files: { files: {
'/photos}/image1.jpg': true, '/photos}/image1.jpg': true,
'/photos}/image2.jpg': false, '/photos}/image2.jpg': false,
+1
View File
@@ -537,6 +537,7 @@ export const utils = {
}, },
waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => { waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise<void>(async (resolve, reject) => { return new Promise<void>(async (resolve, reject) => {
const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000); const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000);
+1 -1
View File
@@ -44,7 +44,7 @@ test.describe('Photo Viewer', () => {
const { x, y, width, height } = box!; const { x, y, width, height } = box!;
await page.mouse.move(x + width / 2, y + height / 2); await page.mouse.move(x + width / 2, y + height / 2);
await page.mouse.wheel(0, -1); await page.mouse.wheel(0, -1);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('original'); await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('fullsize');
}); });
test('reloads photo when checksum changes', async ({ page }) => { test('reloads photo when checksum changes', async ({ page }) => {
+12 -4
View File
@@ -1,5 +1,5 @@
{ {
"about": "Verfris", "about": "Oor",
"account": "Rekening", "account": "Rekening",
"account_settings": "Rekeninginstellings", "account_settings": "Rekeninginstellings",
"acknowledge": "Erken", "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", "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.", "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_created_at": "Eksterne biblioteek (geskep op {date})",
"external_library_management": "Eksterne Biblioteek-opsies", "external_library_management": "Eksterne Biblioteekbestuur",
"face_detection": "Gesig deteksie", "face_detection": "Gesig deteksie",
"failed_job_command": "Opdrag {command} het misluk vir werk: {job}", "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.", "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": "Formaat",
"image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.", "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_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_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_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", "image_preview_title": "Voorskou Instellings",
@@ -72,7 +73,14 @@
"image_resolution": "Resolusie", "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_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": "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": "Soek by beskrywing",
"search_by_description_example": "Stapdag in Sapa" "search_by_description_example": "Stapdag in Sapa"
+4
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "تم حذف الأصل بشكل نهائي", "permanently_deleted_asset": "تم حذف الأصل بشكل نهائي",
"permanently_deleted_assets_count": "تم حذف {count, plural, one {# محتوى} other {# المحتويات}} نهائيًا", "permanently_deleted_assets_count": "تم حذف {count, plural, one {# محتوى} other {# المحتويات}} نهائيًا",
"person": "شخص", "person": "شخص",
"person_birthdate": "تاريخ الميلاد {التاريخ}",
"person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}", "person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}",
"photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.", "photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
"photos": "الصور", "photos": "الصور",
@@ -1078,6 +1079,8 @@
"remove_from_album": "إزالة من الألبوم", "remove_from_album": "إزالة من الألبوم",
"remove_from_favorites": "إزالة من المفضلة", "remove_from_favorites": "إزالة من المفضلة",
"remove_from_shared_link": "إزالة من الرابط المشترك", "remove_from_shared_link": "إزالة من الرابط المشترك",
"remove_memory": "إزالة الذاكرة",
"remove_photo_from_memory": "إزالة الصورة من هذه الذكرى",
"remove_url": "إزالة عنوان URL", "remove_url": "إزالة عنوان URL",
"remove_user": "إزالة المستخدم", "remove_user": "إزالة المستخدم",
"removed_api_key": "تم إزالة مفتاح API: {name}", "removed_api_key": "تم إزالة مفتاح API: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "جارٍ البحث في اللغات...", "searching_locales": "جارٍ البحث في اللغات...",
"second": "ثانية", "second": "ثانية",
"see_all_people": "عرض جميع الأشخاص", "see_all_people": "عرض جميع الأشخاص",
"select": "إختر",
"select_album_cover": "تحديد غلاف الألبوم", "select_album_cover": "تحديد غلاف الألبوم",
"select_all": "تحديد الكل", "select_all": "تحديد الكل",
"select_all_duplicates": "تحديد جميع النسخ المكررة", "select_all_duplicates": "تحديد جميع النسخ المكررة",
+3
View File
@@ -1079,6 +1079,8 @@
"remove_from_album": "Odstranit z alba", "remove_from_album": "Odstranit z alba",
"remove_from_favorites": "Odstranit z oblíbených", "remove_from_favorites": "Odstranit z oblíbených",
"remove_from_shared_link": "Odstranit ze sdíleného odkazu", "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_url": "Odstranit URL",
"remove_user": "Odebrat uživatele", "remove_user": "Odebrat uživatele",
"removed_api_key": "Odstraněn API klíč: {name}", "removed_api_key": "Odstraněn API klíč: {name}",
@@ -1149,6 +1151,7 @@
"searching_locales": "Vyhledávání jazyků...", "searching_locales": "Vyhledávání jazyků...",
"second": "Sekunda", "second": "Sekunda",
"see_all_people": "Zobrazit všechny lidi", "see_all_people": "Zobrazit všechny lidi",
"select": "Vybrat",
"select_album_cover": "Vybrat obal alba", "select_album_cover": "Vybrat obal alba",
"select_all": "Vybrat vše", "select_all": "Vybrat vše",
"select_all_duplicates": "Vybrat všechny duplicity", "select_all_duplicates": "Vybrat všechny duplicity",
+11 -3
View File
@@ -41,6 +41,7 @@
"backup_settings": "Backup-indstillinger", "backup_settings": "Backup-indstillinger",
"backup_settings_description": "Administrer backupindstillinger for database", "backup_settings_description": "Administrer backupindstillinger for database",
"check_all": "Tjek Alle", "check_all": "Tjek Alle",
"cleanup": "Ryd op",
"cleared_jobs": "Ryddet jobs til: {job}", "cleared_jobs": "Ryddet jobs til: {job}",
"config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil", "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?", "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_scanning_enable_description": "Aktiver periodisk biblioteksscanning",
"library_settings": "Eksternt bibliotek", "library_settings": "Eksternt bibliotek",
"library_settings_description": "Administrer eksterne biblioteksindstillinger", "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_enable_description": "Overvåg eksterne biblioteker for filændringer",
"library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)", "library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)",
"library_watching_settings_description": "Tjek automatisk for ændrede filer", "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_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": "Aktiver smart søgning",
"machine_learning_smart_search_enabled_description": "Hvis deaktiveret, vil billeder ikke blive kodet til 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_concurrency": "Administrer antallet af samtidige opgaver",
"manage_log_settings": "Administrer logindstillinger", "manage_log_settings": "Administrer logindstillinger",
"map_dark_style": "Mørk tema", "map_dark_style": "Mørk tema",
@@ -242,7 +243,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_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": "Lagringsskabelonmigration",
"storage_template_migration_description": "Anvend den nuværende <link>{template}</link> på tidligere uploadede mediefiler", "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_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_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>.", "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 +394,7 @@
"allow_edits": "Tillad redigeringer", "allow_edits": "Tillad redigeringer",
"allow_public_user_to_download": "Tillad offentlige brugere til at hente", "allow_public_user_to_download": "Tillad offentlige brugere til at hente",
"allow_public_user_to_upload": "Tillad offentlige brugere til at uploade", "allow_public_user_to_upload": "Tillad offentlige brugere til at uploade",
"alt_text_qr_code": "QR-kode billede",
"anti_clockwise": "Mod uret", "anti_clockwise": "Mod uret",
"api_key": "API-nøgle", "api_key": "API-nøgle",
"api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.", "api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.",
@@ -889,6 +891,7 @@
"month": "Måned", "month": "Måned",
"more": "Mere", "more": "Mere",
"moved_to_trash": "Flyttet til skraldespand", "moved_to_trash": "Flyttet til skraldespand",
"mute_memories": "Dæmp minder",
"my_albums": "Mine albummer", "my_albums": "Mine albummer",
"name": "Navn", "name": "Navn",
"name_or_nickname": "Navn eller kælenavn", "name_or_nickname": "Navn eller kælenavn",
@@ -984,6 +987,7 @@
"permanently_deleted_asset": "Permanent slettet medie", "permanently_deleted_asset": "Permanent slettet medie",
"permanently_deleted_assets_count": "{count, plural, one {# aktiv} other {# aktiver}} permanent slettet", "permanently_deleted_assets_count": "{count, plural, one {# aktiv} other {# aktiver}} permanent slettet",
"person": "Person", "person": "Person",
"person_birthdate": "Født den {date}",
"person_hidden": "{name}{hidden, select, true { (skjult)} other {}}", "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.", "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", "photos": "Billeder",
@@ -1075,6 +1079,8 @@
"remove_from_album": "Fjern fra album", "remove_from_album": "Fjern fra album",
"remove_from_favorites": "Fjern fra favoritter", "remove_from_favorites": "Fjern fra favoritter",
"remove_from_shared_link": "Fjern fra delt link", "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_url": "Fjern URL",
"remove_user": "Fjern bruger", "remove_user": "Fjern bruger",
"removed_api_key": "Fjernede API-nøgle: {name}", "removed_api_key": "Fjernede API-nøgle: {name}",
@@ -1145,6 +1151,7 @@
"searching_locales": "Søger lokaler...", "searching_locales": "Søger lokaler...",
"second": "Sekund", "second": "Sekund",
"see_all_people": "Se alle personer", "see_all_people": "Se alle personer",
"select": "Vælg",
"select_album_cover": "Vælg albumcover", "select_album_cover": "Vælg albumcover",
"select_all": "Vælg alle", "select_all": "Vælg alle",
"select_all_duplicates": "Vælg alle dubletter", "select_all_duplicates": "Vælg alle dubletter",
@@ -1300,6 +1307,7 @@
"unlink_motion_video": "Fjern link til bevægelsesvideo", "unlink_motion_video": "Fjern link til bevægelsesvideo",
"unlink_oauth": "Frakobl OAuth", "unlink_oauth": "Frakobl OAuth",
"unlinked_oauth_account": "Frakoblede OAuth-konto", "unlinked_oauth_account": "Frakoblede OAuth-konto",
"unmute_memories": "Ophæv dæmpning af minder",
"unnamed_album": "Unavngivet album", "unnamed_album": "Unavngivet album",
"unnamed_album_delete_confirmation": "Er du sikker på, at du vil slette dette album?", "unnamed_album_delete_confirmation": "Er du sikker på, at du vil slette dette album?",
"unnamed_share": "Unavngivet deling", "unnamed_share": "Unavngivet deling",
+3
View File
@@ -1079,6 +1079,8 @@
"remove_from_album": "Aus Album entfernen", "remove_from_album": "Aus Album entfernen",
"remove_from_favorites": "Aus Favoriten entfernen", "remove_from_favorites": "Aus Favoriten entfernen",
"remove_from_shared_link": "Aus geteiltem Link 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_url": "URL entfernen",
"remove_user": "Nutzer entfernen", "remove_user": "Nutzer entfernen",
"removed_api_key": "API-Schlüssel {name} wurde entfernt", "removed_api_key": "API-Schlüssel {name} wurde entfernt",
@@ -1149,6 +1151,7 @@
"searching_locales": "Suche nach Orten...", "searching_locales": "Suche nach Orten...",
"second": "Sekunde", "second": "Sekunde",
"see_all_people": "Alle Personen anzeigen", "see_all_people": "Alle Personen anzeigen",
"select": "Auswählen",
"select_album_cover": "Album-Cover auswählen", "select_album_cover": "Album-Cover auswählen",
"select_all": "Alles auswählen", "select_all": "Alles auswählen",
"select_all_duplicates": "Alle Duplikate auswählen", "select_all_duplicates": "Alle Duplikate auswählen",
+9
View File
@@ -41,6 +41,7 @@
"backup_settings": "Ρυθμίσεις Αντιγράφων Ασφαλείας", "backup_settings": "Ρυθμίσεις Αντιγράφων Ασφαλείας",
"backup_settings_description": "Διαχείρηση ρυθμίσεων των αντιγράφων ασφαλείας της βάσης δεδομένων", "backup_settings_description": "Διαχείρηση ρυθμίσεων των αντιγράφων ασφαλείας της βάσης δεδομένων",
"check_all": "Έλεγχος Όλων", "check_all": "Έλεγχος Όλων",
"cleanup": "Εκκαθάριση",
"cleared_jobs": "Εκκαθαρίστηκαν οι εργασίες για: {job}", "cleared_jobs": "Εκκαθαρίστηκαν οι εργασίες για: {job}",
"config_set_by_file": "Η παραμετροποίηση γίνεται, προς το παρόν, μέσω ενός αρχείου παραμέτρων", "config_set_by_file": "Η παραμετροποίηση γίνεται, προς το παρόν, μέσω ενός αρχείου παραμέτρων",
"confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};", "confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};",
@@ -393,6 +394,7 @@
"allow_edits": "Επιτρέψτε τις τροποποιήσεις", "allow_edits": "Επιτρέψτε τις τροποποιήσεις",
"allow_public_user_to_download": "Επιτρέψτε σε δημόσιο χρήστη να κατεβάσει", "allow_public_user_to_download": "Επιτρέψτε σε δημόσιο χρήστη να κατεβάσει",
"allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει", "allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει",
"alt_text_qr_code": "Εικόνα κωδικού QR",
"anti_clockwise": "Αντίθετα με τη φορά του ρολογιού", "anti_clockwise": "Αντίθετα με τη φορά του ρολογιού",
"api_key": "Κλειδί API", "api_key": "Κλειδί API",
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.", "api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
@@ -889,6 +891,7 @@
"month": "Μήνας", "month": "Μήνας",
"more": "Περισσότερα", "more": "Περισσότερα",
"moved_to_trash": "Μετακινήθηκε στον κάδο απορριμμάτων", "moved_to_trash": "Μετακινήθηκε στον κάδο απορριμμάτων",
"mute_memories": "Σίγαση Αναμνήσεων",
"my_albums": "Τα άλμπουμ μου", "my_albums": "Τα άλμπουμ μου",
"name": "Όνομα", "name": "Όνομα",
"name_or_nickname": "Όνομα ή ψευδώνυμο", "name_or_nickname": "Όνομα ή ψευδώνυμο",
@@ -984,6 +987,7 @@
"permanently_deleted_asset": "Οριστικά διαγραμμένο στοιχείο", "permanently_deleted_asset": "Οριστικά διαγραμμένο στοιχείο",
"permanently_deleted_assets_count": "Οριστική διαγραφή {count, plural, one {# στοιχείου} other {# στοιχείων}}", "permanently_deleted_assets_count": "Οριστική διαγραφή {count, plural, one {# στοιχείου} other {# στοιχείων}}",
"person": "Άτομο", "person": "Άτομο",
"person_birthdate": "Γεννηθείς στις {date}",
"person_hidden": "{name}{hidden, select, true { (κρυφό)} other {}}", "person_hidden": "{name}{hidden, select, true { (κρυφό)} other {}}",
"photo_shared_all_users": "Φαίνεται ότι μοιραστήκατε τις φωτογραφίες σας με όλους τους χρήστες ή δεν έχετε κανέναν χρήστη για κοινή χρήση.", "photo_shared_all_users": "Φαίνεται ότι μοιραστήκατε τις φωτογραφίες σας με όλους τους χρήστες ή δεν έχετε κανέναν χρήστη για κοινή χρήση.",
"photos": "Φωτογραφίες", "photos": "Φωτογραφίες",
@@ -1075,6 +1079,8 @@
"remove_from_album": "Αφαίρεση από το άλμπουμ", "remove_from_album": "Αφαίρεση από το άλμπουμ",
"remove_from_favorites": "Αφαίρεση από τα αγαπημένα", "remove_from_favorites": "Αφαίρεση από τα αγαπημένα",
"remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο", "remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο",
"remove_memory": "Αφαίρεση ανάμνησης",
"remove_photo_from_memory": "Αφαίρεση φωτογραφίας από την ανάμνηση",
"remove_url": "Αφαίρεση Συνδέσμου", "remove_url": "Αφαίρεση Συνδέσμου",
"remove_user": "Αφαίρεση χρήστη", "remove_user": "Αφαίρεση χρήστη",
"removed_api_key": "Αφαιρέθηκε το API Key: {name}", "removed_api_key": "Αφαιρέθηκε το API Key: {name}",
@@ -1091,6 +1097,7 @@
"repository": "Αποθετήριο", "repository": "Αποθετήριο",
"require_password": "Απαιτείται κωδικός πρόσβασης", "require_password": "Απαιτείται κωδικός πρόσβασης",
"require_user_to_change_password_on_first_login": "Ο χρήστης απαιτείται να αλλάξει τον κωδικό πρόσβασής του κατά την πρώτη σύνδεση", "require_user_to_change_password_on_first_login": "Ο χρήστης απαιτείται να αλλάξει τον κωδικό πρόσβασής του κατά την πρώτη σύνδεση",
"rescan": "Εκ νέου σάρωση",
"reset": "Επαναφορά", "reset": "Επαναφορά",
"reset_password": "Επαναφορά κωδικού πρόσβασης", "reset_password": "Επαναφορά κωδικού πρόσβασης",
"reset_people_visibility": "Επαναφορά προβολής ατόμων", "reset_people_visibility": "Επαναφορά προβολής ατόμων",
@@ -1144,6 +1151,7 @@
"searching_locales": "Αναζήτηση τοποθεσιών...", "searching_locales": "Αναζήτηση τοποθεσιών...",
"second": "Δευτερόλεπτο", "second": "Δευτερόλεπτο",
"see_all_people": "Προβολή όλων των ατόμων", "see_all_people": "Προβολή όλων των ατόμων",
"select": "Επιλογή",
"select_album_cover": "Επιλέξτε εξώφυλλο άλμπουμ", "select_album_cover": "Επιλέξτε εξώφυλλο άλμπουμ",
"select_all": "Επιλογή όλων", "select_all": "Επιλογή όλων",
"select_all_duplicates": "Επιλογή όλων των διπλότυπων", "select_all_duplicates": "Επιλογή όλων των διπλότυπων",
@@ -1352,6 +1360,7 @@
"view_all": "Προβολή Όλων", "view_all": "Προβολή Όλων",
"view_all_users": "Προβολή όλων των χρηστών", "view_all_users": "Προβολή όλων των χρηστών",
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα", "view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
"view_link": "Προβολή σύνδεσμου",
"view_links": "Προβολή συνδέσμων", "view_links": "Προβολή συνδέσμων",
"view_name": "Προβολή", "view_name": "Προβολή",
"view_next_asset": "Προβολή επόμενου στοιχείου", "view_next_asset": "Προβολή επόμενου στοιχείου",
+7 -1
View File
@@ -65,8 +65,13 @@
"forcing_refresh_library_files": "Forcing refresh of all library files", "forcing_refresh_library_files": "Forcing refresh of all library files",
"image_format": "Format", "image_format": "Format",
"image_format_description": "WebP produces smaller files than JPEG, but is slower to encode.", "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": "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": "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_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", "image_preview_description": "Medium-size image with stripped metadata, used when viewing a single asset and for machine learning",
@@ -859,6 +864,7 @@
"loop_videos": "Loop videos", "loop_videos": "Loop videos",
"loop_videos_description": "Enable to automatically loop a video in the detail viewer.", "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_branch_warning": "Youre using a development version; we strongly recommend using a release version!",
"main_menu": "Main menu",
"make": "Make", "make": "Make",
"manage_shared_links": "Manage shared links", "manage_shared_links": "Manage shared links",
"manage_sharing_with_partners": "Manage sharing with partners", "manage_sharing_with_partners": "Manage sharing with partners",
+3
View File
@@ -1079,6 +1079,8 @@
"remove_from_album": "Eliminar del álbum", "remove_from_album": "Eliminar del álbum",
"remove_from_favorites": "Quitar de favoritos", "remove_from_favorites": "Quitar de favoritos",
"remove_from_shared_link": "Eliminar desde enlace compartido", "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_url": "Eliminar URL",
"remove_user": "Eliminar usuario", "remove_user": "Eliminar usuario",
"removed_api_key": "Clave API eliminada: {name}", "removed_api_key": "Clave API eliminada: {name}",
@@ -1149,6 +1151,7 @@
"searching_locales": "Buscando sitios...", "searching_locales": "Buscando sitios...",
"second": "Segundo", "second": "Segundo",
"see_all_people": "Ver todas las personas", "see_all_people": "Ver todas las personas",
"select": "Selecciona",
"select_album_cover": "Seleccionar portada del álbum", "select_album_cover": "Seleccionar portada del álbum",
"select_all": "Seleccionar todo", "select_all": "Seleccionar todo",
"select_all_duplicates": "Seleccionar todos los duplicados", "select_all_duplicates": "Seleccionar todos los duplicados",
+3
View File
@@ -1079,6 +1079,8 @@
"remove_from_album": "Eemalda albumist", "remove_from_album": "Eemalda albumist",
"remove_from_favorites": "Eemalda lemmikutest", "remove_from_favorites": "Eemalda lemmikutest",
"remove_from_shared_link": "Eemalda jagatud lingist", "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_url": "Eemalda URL",
"remove_user": "Eemalda kasutaja", "remove_user": "Eemalda kasutaja",
"removed_api_key": "API võti eemaldatud: {name}", "removed_api_key": "API võti eemaldatud: {name}",
@@ -1149,6 +1151,7 @@
"searching_locales": "Lokaatide otsimine...", "searching_locales": "Lokaatide otsimine...",
"second": "Sekund", "second": "Sekund",
"see_all_people": "Vaata kõiki isikuid", "see_all_people": "Vaata kõiki isikuid",
"select": "Vali",
"select_album_cover": "Vali albumi kaanepilt", "select_album_cover": "Vali albumi kaanepilt",
"select_all": "Vali kõik", "select_all": "Vali kõik",
"select_all_duplicates": "Vali kõik duplikaadid", "select_all_duplicates": "Vali kõik duplikaadid",
+1
View File
@@ -0,0 +1 @@
{}
+4
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Média supprimé définitivement", "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}}", "permanently_deleted_assets_count": "{count, plural, one {# média définitivement supprimé} other {# médias définitivement supprimés}}",
"person": "Personne", "person": "Personne",
"person_birthdate": "Né(e) le {date}",
"person_hidden": "{name}{hidden, select, true { (caché)} other {}}", "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.", "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", "photos": "Photos",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Supprimer de l'album", "remove_from_album": "Supprimer de l'album",
"remove_from_favorites": "Supprimer des favoris", "remove_from_favorites": "Supprimer des favoris",
"remove_from_shared_link": "Supprimer des liens partagés", "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_url": "Supprimer l'URL",
"remove_user": "Supprimer l'utilisateur", "remove_user": "Supprimer l'utilisateur",
"removed_api_key": "Clé API supprimée: {name}", "removed_api_key": "Clé API supprimée: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Recherche des paramètres régionaux...", "searching_locales": "Recherche des paramètres régionaux...",
"second": "Seconde", "second": "Seconde",
"see_all_people": "Voir toutes les personnes", "see_all_people": "Voir toutes les personnes",
"select": "Sélectionner",
"select_album_cover": "Sélectionner la couverture d'album", "select_album_cover": "Sélectionner la couverture d'album",
"select_all": "Tout sélectionner", "select_all": "Tout sélectionner",
"select_all_duplicates": "Sélectionner tous les doublons", "select_all_duplicates": "Sélectionner tous les doublons",
+1
View File
@@ -0,0 +1 @@
{}
+4
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "נכס נמחק לצמיתות", "permanently_deleted_asset": "נכס נמחק לצמיתות",
"permanently_deleted_assets_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות", "permanently_deleted_assets_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
"person": "אדם", "person": "אדם",
"person_birthdate": "נולד בתאריך {date}",
"person_hidden": "{name}{hidden, select, true { (מוסתר)} other {}}", "person_hidden": "{name}{hidden, select, true { (מוסתר)} other {}}",
"photo_shared_all_users": "נראה שאת/ה שיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.", "photo_shared_all_users": "נראה שאת/ה שיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
"photos": "תמונות", "photos": "תמונות",
@@ -1078,6 +1079,8 @@
"remove_from_album": "הסר מאלבום", "remove_from_album": "הסר מאלבום",
"remove_from_favorites": "הסר מהמועדפים", "remove_from_favorites": "הסר מהמועדפים",
"remove_from_shared_link": "הסר מקישור משותף", "remove_from_shared_link": "הסר מקישור משותף",
"remove_memory": "הסר זיכרון",
"remove_photo_from_memory": "הסר תמונה מזיכרון זה",
"remove_url": "הסר URL", "remove_url": "הסר URL",
"remove_user": "הסר משתמש", "remove_user": "הסר משתמש",
"removed_api_key": "מפתח API הוסר: {name}", "removed_api_key": "מפתח API הוסר: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "מחפש אזורי שפה...", "searching_locales": "מחפש אזורי שפה...",
"second": "שנייה", "second": "שנייה",
"see_all_people": "ראה את כל האנשים", "see_all_people": "ראה את כל האנשים",
"select": "בחר",
"select_album_cover": "בחר עטיפת אלבום", "select_album_cover": "בחר עטיפת אלבום",
"select_all": "בחר הכל", "select_all": "בחר הכל",
"select_all_duplicates": "בחר את כל הכפילויות", "select_all_duplicates": "בחר את כל הכפילויות",
+13
View File
@@ -29,11 +29,17 @@
"added_to_favorites_count": "पसंदीदा में {count, number} जोड़ा गया", "added_to_favorites_count": "पसंदीदा में {count, number} जोड़ा गया",
"admin": { "admin": {
"add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।", "add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।",
"asset_offline_description": "यह बाहरी लाइब्रेरी एसेट अब डिस्क पर मौजूद नहीं है और इसे ट्रैश में डाल दिया गया है। यदि फ़ाइल को लाइब्रेरी के भीतर कहीं ले जाया गया था, तो नई संबंधित एसेट के लिए अपनी टाइमलाइन देखें। इस एसेट को वापस पाने के लिए, कृपया सुनिश्चित करें कि नीचे दिए गए फ़ाइल पथ को इम्मिच द्वारा एक्सेस किया जा सकता है और फिर लाइब्रेरी को स्कैन करें।",
"authentication_settings": "प्रमाणीकरण सेटिंग्स", "authentication_settings": "प्रमाणीकरण सेटिंग्स",
"authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें", "authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें",
"authentication_settings_disable_all": "क्या आप वाकई सभी लॉगिन विधियों को अक्षम करना चाहते हैं? लॉगिन पूरी तरह से अक्षम कर दिया जाएगा।", "authentication_settings_disable_all": "क्या आप वाकई सभी लॉगिन विधियों को अक्षम करना चाहते हैं? लॉगिन पूरी तरह से अक्षम कर दिया जाएगा।",
"authentication_settings_reenable": "पुनः सक्षम करने के लिए, <link>Server Command</link> का प्रयोग करे।", "authentication_settings_reenable": "पुनः सक्षम करने के लिए, <link>Server Command</link> का प्रयोग करे।",
"background_task_job": "पृष्ठभूमि कार्य", "background_task_job": "पृष्ठभूमि कार्य",
"backup_database": "बैकअप डाटाबेस",
"backup_database_enable_description": "बैकअप डेटाबेस सक्रिय करें",
"backup_keep_last_amount": "पूर्व बैकअप क्षमता",
"backup_settings": "बैकअप सेटिंग्स",
"backup_settings_description": "डेटाबेस बैकअप सेटिंग्स प्रबंधन",
"check_all": "सभी चेक करें", "check_all": "सभी चेक करें",
"cleared_jobs": "{job}: के लिए कार्य साफ़ कर दिए गए", "cleared_jobs": "{job}: के लिए कार्य साफ़ कर दिए गए",
"config_set_by_file": "Config वर्तमान में एक config फ़ाइल द्वारा सेट किया गया है", "config_set_by_file": "Config वर्तमान में एक config फ़ाइल द्वारा सेट किया गया है",
@@ -42,6 +48,9 @@
"confirm_email_below": "पुष्टि करने के लिए नीचे \"{email}\" टाइप करें", "confirm_email_below": "पुष्टि करने के लिए नीचे \"{email}\" टाइप करें",
"confirm_reprocess_all_faces": "क्या आप वाकई सभी चेहरों को दोबारा संसाधित करना चाहते हैं? इससे नामित लोग भी साफ हो जायेंगे।", "confirm_reprocess_all_faces": "क्या आप वाकई सभी चेहरों को दोबारा संसाधित करना चाहते हैं? इससे नामित लोग भी साफ हो जायेंगे।",
"confirm_user_password_reset": "क्या आप वाकई {user} का पासवर्ड रीसेट करना चाहते हैं?", "confirm_user_password_reset": "क्या आप वाकई {user} का पासवर्ड रीसेट करना चाहते हैं?",
"create_job": "जॉब बनाएँ",
"cron_expression": "क्रॉन अभिव्यक्ति",
"cron_expression_description": "क्रॉन प्रारूप का उपयोग करके स्कैनिंग अंतराल सेट करें। अधिक जानकारी के लिए कृपया <link>क्रोनटैब गुरु</link> देखें",
"disable_login": "लॉगिन अक्षम करें", "disable_login": "लॉगिन अक्षम करें",
"duplicate_detection_job_description": "समान छवियों का पता लगाने के लिए संपत्तियों पर मशीन लर्निंग चलाएं। यह कार्यक्षमता स्मार्ट खोज पर निर्भर करती है", "duplicate_detection_job_description": "समान छवियों का पता लगाने के लिए संपत्तियों पर मशीन लर्निंग चलाएं। यह कार्यक्षमता स्मार्ट खोज पर निर्भर करती है",
"exclusion_pattern_description": "Exclusion पैटर्न आपको अपनी लाइब्रेरी को स्कैन करते समय फ़ाइलों और फ़ोल्डरों को अनदेखा करने देता है। यह उपयोगी है यदि आपके पास ऐसे फ़ोल्डर हैं जिनमें ऐसी फ़ाइलें हैं जिन्हें आप आयात नहीं करना चाहते हैं, जैसे RAW फ़ाइलें।", "exclusion_pattern_description": "Exclusion पैटर्न आपको अपनी लाइब्रेरी को स्कैन करते समय फ़ाइलों और फ़ोल्डरों को अनदेखा करने देता है। यह उपयोगी है यदि आपके पास ऐसे फ़ोल्डर हैं जिनमें ऐसी फ़ाइलें हैं जिन्हें आप आयात नहीं करना चाहते हैं, जैसे RAW फ़ाइलें।",
@@ -53,11 +62,14 @@
"failed_job_command": "कार्य {job} के लिए आदेश {command} विफल", "failed_job_command": "कार्य {job} के लिए आदेश {command} विफल",
"force_delete_user_warning": "चेतावनी: इससे उपयोगकर्ता और सारा डेटा तुरंत हट जाएगा। इसे पूर्ववत नहीं किया जा सकता और फ़ाइलें पुनर्प्राप्त नहीं की जा सकतीं।", "force_delete_user_warning": "चेतावनी: इससे उपयोगकर्ता और सारा डेटा तुरंत हट जाएगा। इसे पूर्ववत नहीं किया जा सकता और फ़ाइलें पुनर्प्राप्त नहीं की जा सकतीं।",
"forcing_refresh_library_files": "सभी लाइब्रेरी फ़ाइलों को जबरन सामयिक करें", "forcing_refresh_library_files": "सभी लाइब्रेरी फ़ाइलों को जबरन सामयिक करें",
"image_format": "प्रारूप",
"image_format_description": "वेबपी, जेपीईजी की तुलना में छोटी फ़ाइलें बनाता है, लेकिन एनकोड करने में धीमा है।", "image_format_description": "वेबपी, जेपीईजी की तुलना में छोटी फ़ाइलें बनाता है, लेकिन एनकोड करने में धीमा है।",
"image_prefer_embedded_preview": "एम्बेडेड पूर्वावलोकन को प्राथमिकता दें", "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": "विस्तृत सरगम को प्राथमिकता दें",
"image_prefer_wide_gamut_setting_description": "थंबनेल के लिए डिस्प्ले P3 का उपयोग करें। यह विस्तृत कलरस्पेस वाली छवियों की जीवंतता को बेहतर ढंग से संरक्षित करता है, लेकिन पुराने ब्राउज़र संस्करण वाले पुराने डिवाइस पर छवियां अलग-अलग दिखाई दे सकती हैं। रंग परिवर्तन से बचने के लिए sRGB छवियों को sRGB के रूप में रखा जाता है।", "image_prefer_wide_gamut_setting_description": "थंबनेल के लिए डिस्प्ले P3 का उपयोग करें। यह विस्तृत कलरस्पेस वाली छवियों की जीवंतता को बेहतर ढंग से संरक्षित करता है, लेकिन पुराने ब्राउज़र संस्करण वाले पुराने डिवाइस पर छवियां अलग-अलग दिखाई दे सकती हैं। रंग परिवर्तन से बचने के लिए sRGB छवियों को sRGB के रूप में रखा जाता है।",
"image_preview_description": "मेटाडेटा रहित मध्यम आकार की छवि, जिसका उपयोग एकल संपत्ति देखने और मशीन लर्निंग के लिए होता है",
"image_preview_title": "पूर्वदर्शन सेटिंग्स",
"image_quality": "गुणवत्ता", "image_quality": "गुणवत्ता",
"image_settings": "छवि सेटिंग्स", "image_settings": "छवि सेटिंग्स",
"image_settings_description": "उत्पन्न छवियों की गुणवत्ता और रिज़ॉल्यूशन प्रबंधित करें", "image_settings_description": "उत्पन्न छवियों की गुणवत्ता और रिज़ॉल्यूशन प्रबंधित करें",
@@ -1093,6 +1105,7 @@
"view_album": "एल्बम देखें", "view_album": "एल्बम देखें",
"view_all": "सभी को देखें", "view_all": "सभी को देखें",
"view_all_users": "सभी उपयोगकर्ताओं को देखें", "view_all_users": "सभी उपयोगकर्ताओं को देखें",
"view_in_timeline": "टाइमलाइन में देखें",
"view_links": "लिंक देखें", "view_links": "लिंक देखें",
"view_next_asset": "अगली संपत्ति देखें", "view_next_asset": "अगली संपत्ति देखें",
"view_previous_asset": "पिछली संपत्ति देखें", "view_previous_asset": "पिछली संपत्ति देखें",
+7 -3
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_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>.", "authentication_settings_reenable": "Az újbóli engedélyezéshez használj egy<link>Szerver Parancsot</link>.",
"background_task_job": "Háttérfeladatok", "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_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_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma",
"backup_settings": "Biztonsági mentés beállításai", "backup_settings": "Biztonsági mentés beállításai",
@@ -149,7 +149,7 @@
"map_settings_description": "Térkép beállítások kezelése", "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", "map_style_description": "Egy style.json térképtémára mutató URL cím",
"memory_cleanup_job": "Memória takarítás", "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": "Metaadatok kinyerése",
"metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből", "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", "metadata_faces_import_setting": "Arc importálás engedélyezése",
@@ -243,7 +243,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_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": "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_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_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_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>.", "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>.",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Elem véglegesen törölve", "permanently_deleted_asset": "Elem véglegesen törölve",
"permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve", "permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve",
"person": "Személy", "person": "Személy",
"person_birthdate": "Született: {date}",
"person_hidden": "{name}{hidden, select, true { (rejtett)} other {}}", "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.", "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", "photos": "Fényképek",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Eltávolítás az albumból", "remove_from_album": "Eltávolítás az albumból",
"remove_from_favorites": "Eltávolítás a kedvencekből", "remove_from_favorites": "Eltávolítás a kedvencekből",
"remove_from_shared_link": "Eltávolítás a megosztott linkbő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_url": "URL eltávolítása",
"remove_user": "Felhasználó eltávolítása", "remove_user": "Felhasználó eltávolítása",
"removed_api_key": "API Kulcs eltávolítva: {name}", "removed_api_key": "API Kulcs eltávolítva: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Helyszín keresése...", "searching_locales": "Helyszín keresése...",
"second": "Másodperc", "second": "Másodperc",
"see_all_people": "Minden személy megtekintése", "see_all_people": "Minden személy megtekintése",
"select": "Kiválsztás",
"select_album_cover": "Albumborító kiválasztása", "select_album_cover": "Albumborító kiválasztása",
"select_all": "Összes kijelölése", "select_all": "Összes kijelölése",
"select_all_duplicates": "Minden duplikátum kijelölése", "select_all_duplicates": "Minden duplikátum kijelölése",
+4
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Aset dihapus secara permanen", "permanently_deleted_asset": "Aset dihapus secara permanen",
"permanently_deleted_assets_count": "{count, plural, one {# aset} other {# aset}} dihapus secara permanen", "permanently_deleted_assets_count": "{count, plural, one {# aset} other {# aset}} dihapus secara permanen",
"person": "Orang", "person": "Orang",
"person_birthdate": "Lahir pada {date}",
"person_hidden": "{name}{hidden, select, true { (tersembunyi)} other {}}", "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.", "photo_shared_all_users": "Sepertinya Anda membagikan foto Anda dengan semua pengguna atau Anda tidak memiliki pengguna siapa pun untuk dibagikan.",
"photos": "Foto", "photos": "Foto",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Hapus dari album", "remove_from_album": "Hapus dari album",
"remove_from_favorites": "Hapus dari favorit", "remove_from_favorites": "Hapus dari favorit",
"remove_from_shared_link": "Hapus dari tautan terbagi", "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_url": "Hapus URL",
"remove_user": "Keluarkan pengguna", "remove_user": "Keluarkan pengguna",
"removed_api_key": "Kunci API Dihapus: {name}", "removed_api_key": "Kunci API Dihapus: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Mencari lokal...", "searching_locales": "Mencari lokal...",
"second": "Detik", "second": "Detik",
"see_all_people": "Lihat semua orang", "see_all_people": "Lihat semua orang",
"select": "Pilih",
"select_album_cover": "Pilih kover album", "select_album_cover": "Pilih kover album",
"select_all": "Pilih semua", "select_all": "Pilih semua",
"select_all_duplicates": "Pilih semua duplikat", "select_all_duplicates": "Pilih semua duplikat",
+7 -3
View File
@@ -886,7 +886,7 @@
"merged_people_count": "{count, plural, one {Unita # persona} other {Unite # persone}}", "merged_people_count": "{count, plural, one {Unita # persona} other {Unite # persone}}",
"minimize": "Minimizza", "minimize": "Minimizza",
"minute": "Minuto", "minute": "Minuto",
"missing": "Mancante", "missing": "Mancanti",
"model": "Modello", "model": "Modello",
"month": "Mese", "month": "Mese",
"more": "Di più", "more": "Di più",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Asset eliminato definitivamente", "permanently_deleted_asset": "Asset eliminato definitivamente",
"permanently_deleted_assets_count": "Cancellati {count, plural, one {# asset} other {# assets}} definitivamente", "permanently_deleted_assets_count": "Cancellati {count, plural, one {# asset} other {# assets}} definitivamente",
"person": "Persona", "person": "Persona",
"person_birthdate": "Nato il {date}",
"person_hidden": "{name}{hidden, select, true { (nascosto)} other {}}", "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.", "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", "photos": "Foto",
@@ -997,7 +998,7 @@
"place": "Posizione", "place": "Posizione",
"places": "Luoghi", "places": "Luoghi",
"places_count": "{count, plural, one {{count, number} Luogo} other {{count, number} Places}}", "places_count": "{count, plural, one {{count, number} Luogo} other {{count, number} Places}}",
"play": "Avvia", "play": "Riproduci",
"play_memories": "Avvia ricordi", "play_memories": "Avvia ricordi",
"play_motion_photo": "Avvia Foto in movimento", "play_motion_photo": "Avvia Foto in movimento",
"play_or_pause_video": "Avvia o metti in pausa il video", "play_or_pause_video": "Avvia o metti in pausa il video",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Rimuovere dall'album", "remove_from_album": "Rimuovere dall'album",
"remove_from_favorites": "Rimuovi dai preferiti", "remove_from_favorites": "Rimuovi dai preferiti",
"remove_from_shared_link": "Rimuovi dal link condiviso", "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_url": "Rimuovi URL",
"remove_user": "Rimuovi utente", "remove_user": "Rimuovi utente",
"removed_api_key": "Rimossa chiave API: {name}", "removed_api_key": "Rimossa chiave API: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Cerca localizzazioni...", "searching_locales": "Cerca localizzazioni...",
"second": "Secondo", "second": "Secondo",
"see_all_people": "Vedi tutte le persone", "see_all_people": "Vedi tutte le persone",
"select": "Seleziona",
"select_album_cover": "Seleziona copertina album", "select_album_cover": "Seleziona copertina album",
"select_all": "Seleziona tutto", "select_all": "Seleziona tutto",
"select_all_duplicates": "Seleziona tutti i duplicati", "select_all_duplicates": "Seleziona tutti i duplicati",
@@ -1238,7 +1242,7 @@
"stack_selected_photos": "Impila foto selezionate", "stack_selected_photos": "Impila foto selezionate",
"stacked_assets_count": "{count, plural, one {Raggruppato # asset} other {Raggruppati # asset}}", "stacked_assets_count": "{count, plural, one {Raggruppato # asset} other {Raggruppati # asset}}",
"stacktrace": "Traccia dell'errore", "stacktrace": "Traccia dell'errore",
"start": "Inizio", "start": "Avvia",
"start_date": "Data di inizio", "start_date": "Data di inizio",
"state": "Provincia", "state": "Provincia",
"status": "Stato", "status": "Stato",
+132 -11
View File
@@ -7,7 +7,7 @@
"actions": "アクション", "actions": "アクション",
"active": "アクティブ", "active": "アクティブ",
"activity": "アクティビティ", "activity": "アクティビティ",
"activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}されました", "activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}になりました",
"add": "追加", "add": "追加",
"add_a_description": "説明を追加", "add_a_description": "説明を追加",
"add_a_location": "場所を追加", "add_a_location": "場所を追加",
@@ -20,20 +20,28 @@
"add_partner": "パートナーを追加", "add_partner": "パートナーを追加",
"add_path": "パスを追加", "add_path": "パスを追加",
"add_photos": "写真を追加", "add_photos": "写真を追加",
"add_to": "追加先...", "add_to": "追加先",
"add_to_album": "アルバムに追加", "add_to_album": "アルバムに追加",
"add_to_shared_album": "共有アルバムに追加", "add_to_shared_album": "共有アルバムに追加",
"add_url": "URLを追加",
"added_to_archive": "アーカイブに追加済", "added_to_archive": "アーカイブに追加済",
"added_to_favorites": "お気に入りに追加済", "added_to_favorites": "お気に入りに追加済",
"added_to_favorites_count": "{count, number} 枚の画像をお気に入りに追加済", "added_to_favorites_count": "{count, number} 枚の画像をお気に入りに追加済",
"admin": { "admin": {
"add_exclusion_pattern_description": "除外パターンを追加します。ワイルドカード「*」「**」「?」を使用できます。すべてのディレクトリで「Raw」と名前が付いたファイルを無視するには、「**/Raw/**」を使用します。また、「.tif」で終わるファイルをすべて無視するには、「**/*.tif」を使用します。さらに、絶対パスを無視するには「/path/to/ignore/**」を使用します。", "add_exclusion_pattern_description": "除外パターンを追加します。ワイルドカード「*」「**」「?」を使用できます。すべてのディレクトリで「Raw」と名前が付いたファイルを無視するには、「**/Raw/**」を使用します。また、「.tif」で終わるファイルをすべて無視するには、「**/*.tif」を使用します。さらに、絶対パスを無視するには「/path/to/ignore/**」を使用します。",
"asset_offline_description": "この外部ライブラリのアセットはディスク上に見つからなくなってゴミ箱に移動されました。ファイルがライブラリの中で移動された場合はタイムラインで新しい対応するアセットを確認してください。このアセットを復元するには以下のファイルパスがImmichからアクセスできるか確認してライブラリをスキャンしてください。",
"authentication_settings": "認証設定", "authentication_settings": "認証設定",
"authentication_settings_description": "認証設定の管理(パスワード、OAuth、その他)", "authentication_settings_description": "認証設定の管理(パスワード、OAuth、その他)",
"authentication_settings_disable_all": "本当に全てのログイン方法を無効にしますか? ログインは完全に無効になります。", "authentication_settings_disable_all": "本当に全てのログイン方法を無効にしますか? ログインは完全に無効になります。",
"authentication_settings_reenable": "再び有効にするには、<link>サーバーコマンド</link>を使用してください。", "authentication_settings_reenable": "再び有効にするには、<link>サーバーコマンド</link>を使用してください。",
"background_task_job": "バックグラウンドタスク", "background_task_job": "バックグラウンドタスク",
"backup_database": "データベースのバックアップ",
"backup_database_enable_description": "データベースのバックアップを有効にする",
"backup_keep_last_amount": "過去のバックアップの保持数",
"backup_settings": "バックアップ設定",
"backup_settings_description": "データベースのバックアップ設定の管理",
"check_all": "すべてを選択", "check_all": "すべてを選択",
"cleanup": "クリーンアップ",
"cleared_jobs": "{job}のジョブをクリアしました", "cleared_jobs": "{job}のジョブをクリアしました",
"config_set_by_file": "設定は現在 Config File で設定されている", "config_set_by_file": "設定は現在 Config File で設定されている",
"confirm_delete_library": "本当に {library} を削除しますか?", "confirm_delete_library": "本当に {library} を削除しますか?",
@@ -41,6 +49,10 @@
"confirm_email_below": "確認のため、以下に \"{email}\" と入力してください", "confirm_email_below": "確認のため、以下に \"{email}\" と入力してください",
"confirm_reprocess_all_faces": "本当にすべての顔を再処理しますか? これにより名前が付けられた人物も消去されます。", "confirm_reprocess_all_faces": "本当にすべての顔を再処理しますか? これにより名前が付けられた人物も消去されます。",
"confirm_user_password_reset": "本当に {user} のパスワードをリセットしますか?", "confirm_user_password_reset": "本当に {user} のパスワードをリセットしますか?",
"create_job": "ジョブの作成",
"cron_expression": "Cron式",
"cron_expression_description": "cronのフォーマットを使ってスキャン間隔を設定します。詳しくは<link>Crontab Guru</link>などを参照してください",
"cron_expression_presets": "Cron式のプリセット",
"disable_login": "ログインを無効にする", "disable_login": "ログインを無効にする",
"duplicate_detection_job_description": "機械学習を用いて類似画像の検出を行います。(スマートサーチに依存)", "duplicate_detection_job_description": "機械学習を用いて類似画像の検出を行います。(スマートサーチに依存)",
"exclusion_pattern_description": "除外パターンを使用すると、ライブラリをスキャンする際にファイルやフォルダを無視することができます。RAWファイルなど、インポートしたくないファイルを含むフォルダがある場合に便利です。", "exclusion_pattern_description": "除外パターンを使用すると、ライブラリをスキャンする際にファイルやフォルダを無視することができます。RAWファイルなど、インポートしたくないファイルを含むフォルダがある場合に便利です。",
@@ -52,15 +64,25 @@
"failed_job_command": "ジョブ {job}のコマンド {command}が失敗しました", "failed_job_command": "ジョブ {job}のコマンド {command}が失敗しました",
"force_delete_user_warning": "警告:この操作を行うと、ユーザーとすべてのアセットが直ちに削除されます。これは元に戻せず、ファイルも復元できません。", "force_delete_user_warning": "警告:この操作を行うと、ユーザーとすべてのアセットが直ちに削除されます。これは元に戻せず、ファイルも復元できません。",
"forcing_refresh_library_files": "すべてのライブラリファイルを強制更新", "forcing_refresh_library_files": "すべてのライブラリファイルを強制更新",
"image_format": "フォーマット",
"image_format_description": "WebPはJPEGよりもファイルサイズが小さいですが、エンコードに時間がかかります。", "image_format_description": "WebPはJPEGよりもファイルサイズが小さいですが、エンコードに時間がかかります。",
"image_prefer_embedded_preview": "埋め込みプレビューを優先", "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": "広色域に対応させる",
"image_prefer_wide_gamut_setting_description": "サムネイルにはDisplay P3を使用します。これにより、広色域の画像の鮮やかさをよりよく保つことができますが、古いデバイスや古いブラウザバージョンでは画像が異なって見える場合があります。sRGBの画像は、色の変化を避けるためにsRGBのままにします。", "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_quality": "品質",
"image_resolution": "解像度",
"image_resolution_description": "解像度を上げるとより精細に保存できますが、エンコードに時間がかかりファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。",
"image_settings": "画像設定", "image_settings": "画像設定",
"image_settings_description": "生成される画像の品質と解像度の設定", "image_settings_description": "生成される画像の品質と解像度の設定",
"image_thumbnail_description": "メインのタイムラインのような写真グループで表示する際に使われるメタデータを取り除いた小さなサムネイル",
"image_thumbnail_quality_description": "サムネイルの画質を1〜100の間で設定できます。値が大きいほど良い品質ですがファイルサイズが大きくなりアプリの応答性が低下します。",
"image_thumbnail_title": "サムネイル設定",
"job_concurrency": "{job} の同時実行数", "job_concurrency": "{job} の同時実行数",
"job_created": "ジョブを作成しました",
"job_not_concurrency_safe": "このジョブは安全に同時実行できません。", "job_not_concurrency_safe": "このジョブは安全に同時実行できません。",
"job_settings": "ジョブ設定", "job_settings": "ジョブ設定",
"job_settings_description": "ジョブの同時実行を管理します", "job_settings_description": "ジョブの同時実行を管理します",
@@ -75,7 +97,7 @@
"library_scanning_enable_description": "ライブラリ定期スキャンの有効化", "library_scanning_enable_description": "ライブラリ定期スキャンの有効化",
"library_settings": "外部ライブラリ", "library_settings": "外部ライブラリ",
"library_settings_description": "外部ライブラリ設定を管理します", "library_settings_description": "外部ライブラリ設定を管理します",
"library_tasks_description": "ライブラリのタスクを実行する", "library_tasks_description": "アセットが追加または変更された外部ライブラリをスキャンする",
"library_watching_enable_description": "外部ライブラリのファイル変更を監視", "library_watching_enable_description": "外部ライブラリのファイル変更を監視",
"library_watching_settings": "ライブラリ監視(実験的)", "library_watching_settings": "ライブラリ監視(実験的)",
"library_watching_settings_description": "変更されたファイルを自動的に監視", "library_watching_settings_description": "変更されたファイルを自動的に監視",
@@ -110,7 +132,7 @@
"machine_learning_smart_search_description": "CLIP埋め込みを使用して画像を意味的に検索します", "machine_learning_smart_search_description": "CLIP埋め込みを使用して画像を意味的に検索します",
"machine_learning_smart_search_enabled": "スマートサーチを有効にします", "machine_learning_smart_search_enabled": "スマートサーチを有効にします",
"machine_learning_smart_search_enabled_description": "無効にすると、画像はスマートサーチ用にエンコードされません。", "machine_learning_smart_search_enabled_description": "無効にすると、画像はスマートサーチ用にエンコードされません。",
"machine_learning_url_description": "機械学習サーバーのURL", "machine_learning_url_description": "機械学習サーバーのURL。複数のURLが設定された場合は1つずつサーバーが正常に応答するまで接続を試みます。応答のないサーバーはオンラインになるまで一時的に無視されます。",
"manage_concurrency": "同時実行数の管理", "manage_concurrency": "同時実行数の管理",
"manage_log_settings": "ログ設定を管理します", "manage_log_settings": "ログ設定を管理します",
"map_dark_style": "ダークモード", "map_dark_style": "ダークモード",
@@ -126,8 +148,14 @@
"map_settings": "地図", "map_settings": "地図",
"map_settings_description": "地図設定", "map_settings_description": "地図設定",
"map_style_description": "マップテーマ(style.json)の参照先URL", "map_style_description": "マップテーマ(style.json)の参照先URL",
"memory_cleanup_job": "メモリーのクリーンアップ",
"memory_generate_job": "メモリーの生成",
"metadata_extraction_job": "メタデータの展開", "metadata_extraction_job": "メタデータの展開",
"metadata_extraction_job_description": "GPSや解像度などのメタデータを各アセットから抽出", "metadata_extraction_job_description": "GPSや解像度などのメタデータを各アセットから抽出",
"metadata_faces_import_setting": "顔のインポートを有効にする",
"metadata_faces_import_setting_description": "画像のEXIFデータとサイドカーファイルから顔をインポート",
"metadata_settings": "メタデータ設定",
"metadata_settings_description": "メタデータの設定を管理します",
"migration_job": "マイグレーション", "migration_job": "マイグレーション",
"migration_job_description": "アセットおよび顔のサムネイルを最新のフォルダ構造に移行します", "migration_job_description": "アセットおよび顔のサムネイルを最新のフォルダ構造に移行します",
"no_paths_added": "パスが追加されていません", "no_paths_added": "パスが追加されていません",
@@ -182,6 +210,7 @@
"password_settings": "パスワード ログイン", "password_settings": "パスワード ログイン",
"password_settings_description": "パスワード ログイン設定を管理します", "password_settings_description": "パスワード ログイン設定を管理します",
"paths_validated_successfully": "すべてのパスが正常に検証されました", "paths_validated_successfully": "すべてのパスが正常に検証されました",
"person_cleanup_job": "人物のクリーンアップ",
"quota_size_gib": "割り当て容量 (GiB)", "quota_size_gib": "割り当て容量 (GiB)",
"refreshing_all_libraries": "すべてのライブラリを更新", "refreshing_all_libraries": "すべてのライブラリを更新",
"registration": "管理者登録", "registration": "管理者登録",
@@ -192,9 +221,13 @@
"require_password_change_on_login": "初回ログイン時にパスワード変更を要求する", "require_password_change_on_login": "初回ログイン時にパスワード変更を要求する",
"reset_settings_to_default": "設定をデフォルトにリセットします", "reset_settings_to_default": "設定をデフォルトにリセットします",
"reset_settings_to_recent_saved": "前回の設定値に戻す", "reset_settings_to_recent_saved": "前回の設定値に戻す",
"scanning_library": "ライブラリのスキャン",
"search_jobs": "ジョブを検索…",
"send_welcome_email": "ウェルカム メール を送信します", "send_welcome_email": "ウェルカム メール を送信します",
"server_external_domain_settings": "外部ドメイン", "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": "サーバー設定", "server_settings": "サーバー設定",
"server_settings_description": "サーバー設定を管理します", "server_settings_description": "サーバー設定を管理します",
"server_welcome_message": "ウェルカム メッセージ", "server_welcome_message": "ウェルカム メッセージ",
@@ -210,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)", "storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)",
"storage_template_migration": "ストレージ テンプレート の移行", "storage_template_migration": "ストレージ テンプレート の移行",
"storage_template_migration_description": "現在の<link>{template}</link>を以前にアップロードされたアセットに適用", "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_migration_job": "ストレージテンプレート移行ジョブ",
"storage_template_more_details": "この機能の詳細については、<template-link>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください", "storage_template_more_details": "この機能の詳細については、<template-link>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください",
"storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。", "storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。",
@@ -219,6 +252,17 @@
"storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します", "storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します",
"storage_template_user_label": "<code>{label}</code>はユーザーのストレージラベルです", "storage_template_user_label": "<code>{label}</code>はユーザーのストレージラベルです",
"system_settings": "システム設定", "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": "カスタムCSS",
"theme_custom_css_settings_description": "CSS を使って Immich のデザインをカスタマイズできます。", "theme_custom_css_settings_description": "CSS を使って Immich のデザインをカスタマイズできます。",
"theme_settings": "テーマ設定", "theme_settings": "テーマ設定",
@@ -248,6 +292,8 @@
"transcoding_constant_rate_factor": "CRF値 (-crf)", "transcoding_constant_rate_factor": "CRF値 (-crf)",
"transcoding_constant_rate_factor_description": "出力動画の品質レベル。H.264の場合は23、HEVCの場合は28、VP9の場合は31、AV1の場合は35が一般的な値です。値が低いほど品質が良くなりますが、ファイルサイズが大きくなります。", "transcoding_constant_rate_factor_description": "出力動画の品質レベル。H.264の場合は23、HEVCの場合は28、VP9の場合は31、AV1の場合は35が一般的な値です。値が低いほど品質が良くなりますが、ファイルサイズが大きくなります。",
"transcoding_disabled_description": "動画をトランスコードしない設定にしますが、これにより一部のクライアントで再生ができなくなる可能性があります", "transcoding_disabled_description": "動画をトランスコードしない設定にしますが、これにより一部のクライアントで再生ができなくなる可能性があります",
"transcoding_encoding_options": "エンコードオプション",
"transcoding_encoding_options_description": "エンコードされた動画のコーデック、解像度、画質、その他オプションの設定します",
"transcoding_hardware_acceleration": "ハードウェアアクセラレーション", "transcoding_hardware_acceleration": "ハードウェアアクセラレーション",
"transcoding_hardware_acceleration_description": "より高速ですが、同じビットレートではより低品質になります(実験的)", "transcoding_hardware_acceleration_description": "より高速ですが、同じビットレートではより低品質になります(実験的)",
"transcoding_hardware_decoding": "ハードウェアデコード", "transcoding_hardware_decoding": "ハードウェアデコード",
@@ -260,6 +306,8 @@
"transcoding_max_keyframe_interval": "最大キーフレーム間隔", "transcoding_max_keyframe_interval": "最大キーフレーム間隔",
"transcoding_max_keyframe_interval_description": "キーフレーム間の最大フレーム間隔を設定します。値を低くすると圧縮効率が悪化しますが、シーク時間が改善され、動きの速いシーンの品質が向上する場合があります。\"0\" に設定すると、この値が自動的に設定されます。", "transcoding_max_keyframe_interval_description": "キーフレーム間の最大フレーム間隔を設定します。値を低くすると圧縮効率が悪化しますが、シーク時間が改善され、動きの速いシーンの品質が向上する場合があります。\"0\" に設定すると、この値が自動的に設定されます。",
"transcoding_optimal_description": "設定解像度を超える動画、または容認されていない形式の動画", "transcoding_optimal_description": "設定解像度を超える動画、または容認されていない形式の動画",
"transcoding_policy": "トランスコードポリシー",
"transcoding_policy_description": "動画がいつトランスコードされるかを設定します",
"transcoding_preferred_hardware_device": "推奨ハードウェアデバイス", "transcoding_preferred_hardware_device": "推奨ハードウェアデバイス",
"transcoding_preferred_hardware_device_description": "VAAPI と QSV のみに適用されます。 ハードウェアトランスコードに使用されるdriノードを設定します。", "transcoding_preferred_hardware_device_description": "VAAPI と QSV のみに適用されます。 ハードウェアトランスコードに使用されるdriノードを設定します。",
"transcoding_preset_preset": "プリセット (-preset)", "transcoding_preset_preset": "プリセット (-preset)",
@@ -268,7 +316,7 @@
"transcoding_reference_frames_description": "特定のフレームを圧縮するときに参照するフレームの数。より高い値は圧縮効率を改善しますが、エンコードが遅くなります。\"0\" に設定すると、この値が自動的に設定されます。", "transcoding_reference_frames_description": "特定のフレームを圧縮するときに参照するフレームの数。より高い値は圧縮効率を改善しますが、エンコードが遅くなります。\"0\" に設定すると、この値が自動的に設定されます。",
"transcoding_required_description": "許容されていない動画形式のみ", "transcoding_required_description": "許容されていない動画形式のみ",
"transcoding_settings": "動画トランスコード設定", "transcoding_settings": "動画トランスコード設定",
"transcoding_settings_description": "動画ファイルの解像度とエンコード情報を管理します", "transcoding_settings_description": "トランスコードする動画とその処理方法を管理します",
"transcoding_target_resolution": "解像度", "transcoding_target_resolution": "解像度",
"transcoding_target_resolution_description": "解像度を高くすると細かなディテールを保持できますが、エンコードに時間がかかり、ファイルサイズが大きくなり、アプリの応答性が低下する可能性があります。", "transcoding_target_resolution_description": "解像度を高くすると細かなディテールを保持できますが、エンコードに時間がかかり、ファイルサイズが大きくなり、アプリの応答性が低下する可能性があります。",
"transcoding_temporal_aq": "適応的量子化(Temporal AQ)", "transcoding_temporal_aq": "適応的量子化(Temporal AQ)",
@@ -290,6 +338,7 @@
"trash_settings_description": "ごみ箱の設定を管理します", "trash_settings_description": "ごみ箱の設定を管理します",
"untracked_files": "追跡されていないファイル", "untracked_files": "追跡されていないファイル",
"untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります", "untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります",
"user_cleanup_job": "ユーザーのクリーンアップ",
"user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。", "user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。",
"user_delete_delay_settings": "遅延削除", "user_delete_delay_settings": "遅延削除",
"user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。", "user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。",
@@ -345,6 +394,7 @@
"allow_edits": "編集を許可", "allow_edits": "編集を許可",
"allow_public_user_to_download": "一般ユーザーによるダウンロードを許可", "allow_public_user_to_download": "一般ユーザーによるダウンロードを許可",
"allow_public_user_to_upload": "一般ユーザーによるアップロードを許可", "allow_public_user_to_upload": "一般ユーザーによるアップロードを許可",
"alt_text_qr_code": "QRコード画像",
"anti_clockwise": "反時計回り", "anti_clockwise": "反時計回り",
"api_key": "APIキー", "api_key": "APIキー",
"api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。", "api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。",
@@ -368,8 +418,9 @@
"asset_offline": "アセットはオフラインです", "asset_offline": "アセットはオフラインです",
"asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。", "asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。",
"asset_skipped": "スキップ済", "asset_skipped": "スキップ済",
"asset_skipped_in_trash": "ゴミ箱の中",
"asset_uploaded": "アップロード済", "asset_uploaded": "アップロード済",
"asset_uploading": "アップロード中...", "asset_uploading": "アップロード中",
"assets": "アセット", "assets": "アセット",
"assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました", "assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました",
"assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました", "assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました",
@@ -378,7 +429,7 @@
"assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました", "assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました", "assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"assets_removed_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_restored_count": "{count, plural, one {#個} other {#個}}のアセットを復元しました",
"assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました", "assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です", "assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です",
@@ -389,6 +440,7 @@
"birthdate_saved": "生年月日が正常に保存されました", "birthdate_saved": "生年月日が正常に保存されました",
"birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。", "birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。",
"blurred_background": "ぼやけた背景", "blurred_background": "ぼやけた背景",
"bugs_and_feature_requests": "バグと機能のリクエスト",
"build": "ビルド", "build": "ビルド",
"build_image": "ビルドイメージ", "build_image": "ビルドイメージ",
"bulk_delete_duplicates_confirmation": "本当に {count, plural, one {#個} other {#個}}の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!", "bulk_delete_duplicates_confirmation": "本当に {count, plural, one {#個} other {#個}}の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!",
@@ -433,7 +485,9 @@
"comments_are_disabled": "コメントは無効化されています", "comments_are_disabled": "コメントは無効化されています",
"confirm": "確認", "confirm": "確認",
"confirm_admin_password": "管理者パスワードを確認", "confirm_admin_password": "管理者パスワードを確認",
"confirm_delete_face": "本当に『{name}』の顔をアセットから削除しますか?",
"confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?", "confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?",
"confirm_keep_this_delete_others": "このアセット以外のアセットがスタックから削除されます。本当に削除しますか?",
"confirm_password": "確認", "confirm_password": "確認",
"contain": "収める", "contain": "収める",
"context": "状況", "context": "状況",
@@ -474,25 +528,33 @@
"date_range": "日付", "date_range": "日付",
"day": "ライトモード", "day": "ライトモード",
"deduplicate_all": "全て重複排除", "deduplicate_all": "全て重複排除",
"deduplication_criteria_1": "バイト単位の画像サイズ",
"deduplication_criteria_2": "EXIFデータ数",
"deduplication_info": "重複排除情報",
"deduplication_info_description": "アセットを自動的に選択して重複を一括で削除するには次のようにします:",
"default_locale": "デフォルトのロケール", "default_locale": "デフォルトのロケール",
"default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします", "default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします",
"delete": "削除", "delete": "削除",
"delete_album": "アルバムを削除", "delete_album": "アルバムを削除",
"delete_api_key_prompt": "本当にこのAPI キーを削除しますか?", "delete_api_key_prompt": "本当にこのAPI キーを削除しますか?",
"delete_duplicates_confirmation": "本当にこれらの重複を完全に削除しますか?", "delete_duplicates_confirmation": "本当にこれらの重複を完全に削除しますか?",
"delete_face": "顔の削除",
"delete_key": "キーを削除", "delete_key": "キーを削除",
"delete_library": "ライブラリを削除", "delete_library": "ライブラリを削除",
"delete_link": "リンクを削除", "delete_link": "リンクを削除",
"delete_others": "ほかを削除",
"delete_shared_link": "共有リンクを消す", "delete_shared_link": "共有リンクを消す",
"delete_tag": "タグを削除する", "delete_tag": "タグを削除する",
"delete_tag_confirmation_prompt": "本当に{tagName}タグを削除しますか?", "delete_tag_confirmation_prompt": "本当に{tagName}タグを削除しますか?",
"delete_user": "ユーザーを削除", "delete_user": "ユーザーを削除",
"deleted_shared_link": "共有リンクを削除", "deleted_shared_link": "共有リンクを削除",
"deletes_missing_assets": "ディスクからなくなったアセットを削除する",
"description": "概要欄", "description": "概要欄",
"details": "詳細", "details": "詳細",
"direction": "方向", "direction": "方向",
"disabled": "無効", "disabled": "無効",
"disallow_edits": "編集を許可しない", "disallow_edits": "編集を許可しない",
"discord": "Discord",
"discover": "探索", "discover": "探索",
"dismiss_all_errors": "全てのエラーを無視", "dismiss_all_errors": "全てのエラーを無視",
"dismiss_error": "エラーを無視", "dismiss_error": "エラーを無視",
@@ -501,6 +563,7 @@
"display_original_photos": "オリジナルの写真を表示", "display_original_photos": "オリジナルの写真を表示",
"display_original_photos_setting_description": "オリジナルのアセットが Web 互換である場合は、アセットを表示するときにサムネイルではなく元の写真を優先して表示します。これにより写真の表示速度が遅くなる可能性があります。", "display_original_photos_setting_description": "オリジナルのアセットが Web 互換である場合は、アセットを表示するときにサムネイルではなく元の写真を優先して表示します。これにより写真の表示速度が遅くなる可能性があります。",
"do_not_show_again": "このメッセージを再び表示しない", "do_not_show_again": "このメッセージを再び表示しない",
"documentation": "ドキュメント",
"done": "完了", "done": "完了",
"download": "ダウンロード", "download": "ダウンロード",
"download_include_embedded_motion_videos": "埋め込まれた動画", "download_include_embedded_motion_videos": "埋め込まれた動画",
@@ -543,6 +606,7 @@
"enabled": "有効", "enabled": "有効",
"end_date": "終了日", "end_date": "終了日",
"error": "エラー", "error": "エラー",
"error_delete_face": "アセットから顔の削除ができませんでした",
"error_loading_image": "画像の読み込みエラー", "error_loading_image": "画像の読み込みエラー",
"error_title": "エラー - 問題が発生しました", "error_title": "エラー - 問題が発生しました",
"errors": { "errors": {
@@ -570,6 +634,7 @@
"failed_to_create_shared_link": "共有リンクを作成できませんでした", "failed_to_create_shared_link": "共有リンクを作成できませんでした",
"failed_to_edit_shared_link": "共有リンクを編集できませんでした", "failed_to_edit_shared_link": "共有リンクを編集できませんでした",
"failed_to_get_people": "人物を取得できませんでした", "failed_to_get_people": "人物を取得できませんでした",
"failed_to_keep_this_delete_others": "ほかのアセットを削除できませんでした",
"failed_to_load_asset": "アセットを読み込めませんでした", "failed_to_load_asset": "アセットを読み込めませんでした",
"failed_to_load_assets": "アセットを読み込めませんでした", "failed_to_load_assets": "アセットを読み込めませんでした",
"failed_to_load_people": "人物を読み込めませんでした", "failed_to_load_people": "人物を読み込めませんでした",
@@ -621,6 +686,7 @@
"unable_to_get_comments_number": "コメント数を取得できません", "unable_to_get_comments_number": "コメント数を取得できません",
"unable_to_get_shared_link": "共有リンクの取得に失敗しました", "unable_to_get_shared_link": "共有リンクの取得に失敗しました",
"unable_to_hide_person": "人物を非表示にできません", "unable_to_hide_person": "人物を非表示にできません",
"unable_to_link_motion_video": "モーションビデオをリンクできません",
"unable_to_link_oauth_account": "OAuth アカウントをリンクできません", "unable_to_link_oauth_account": "OAuth アカウントをリンクできません",
"unable_to_load_album": "アルバムを読み込めません", "unable_to_load_album": "アルバムを読み込めません",
"unable_to_load_asset_activity": "アセットのアクティビティを読み込めません", "unable_to_load_asset_activity": "アセットのアクティビティを読み込めません",
@@ -659,6 +725,7 @@
"unable_to_submit_job": "ジョブを送信できません", "unable_to_submit_job": "ジョブを送信できません",
"unable_to_trash_asset": "アセットをゴミ箱に移動できません", "unable_to_trash_asset": "アセットをゴミ箱に移動できません",
"unable_to_unlink_account": "アカウントのリンクを解除できません", "unable_to_unlink_account": "アカウントのリンクを解除できません",
"unable_to_unlink_motion_video": "モーションビデオのリンクを解除できません",
"unable_to_update_album_cover": "アルバムカバーを更新できません", "unable_to_update_album_cover": "アルバムカバーを更新できません",
"unable_to_update_album_info": "アルバム情報を更新できません", "unable_to_update_album_info": "アルバム情報を更新できません",
"unable_to_update_library": "ライブラリを更新できません", "unable_to_update_library": "ライブラリを更新できません",
@@ -682,6 +749,7 @@
"external": "外部", "external": "外部",
"external_libraries": "外部ライブラリ", "external_libraries": "外部ライブラリ",
"face_unassigned": "未割り当て", "face_unassigned": "未割り当て",
"failed_to_load_assets": "アセットのロードに失敗しました",
"favorite": "お気に入り", "favorite": "お気に入り",
"favorite_or_unfavorite_photo": "写真をお気に入りまたはお気に入り解除", "favorite_or_unfavorite_photo": "写真をお気に入りまたはお気に入り解除",
"favorites": "お気に入り", "favorites": "お気に入り",
@@ -702,10 +770,13 @@
"get_help": "助けを求める", "get_help": "助けを求める",
"getting_started": "はじめる", "getting_started": "はじめる",
"go_back": "戻る", "go_back": "戻る",
"go_to_folder": "フォルダへ",
"go_to_search": "検索へ", "go_to_search": "検索へ",
"group_albums_by": "これでアルバムをグループ化…", "group_albums_by": "これでアルバムをグループ化…",
"group_country": "国でグループ化",
"group_no": "グループ化なし", "group_no": "グループ化なし",
"group_owner": "所有者でグループ化", "group_owner": "所有者でグループ化",
"group_places_by": "グループ分け...",
"group_year": "年でグループ化", "group_year": "年でグループ化",
"has_quota": "クォータ有り", "has_quota": "クォータ有り",
"hi_user": "こんにちは、{name}( {email})さん", "hi_user": "こんにちは、{name}( {email})さん",
@@ -738,6 +809,7 @@
"include_shared_albums": "共有アルバムを含める", "include_shared_albums": "共有アルバムを含める",
"include_shared_partner_assets": "パートナーがシェアしたアセットを含める", "include_shared_partner_assets": "パートナーがシェアしたアセットを含める",
"individual_share": "1枚の共有", "individual_share": "1枚の共有",
"individual_shares": "個人の共有",
"info": "情報", "info": "情報",
"interval": { "interval": {
"day_at_onepm": "毎日午後1時", "day_at_onepm": "毎日午後1時",
@@ -751,6 +823,8 @@
"jobs": "ジョブ", "jobs": "ジョブ",
"keep": "保持", "keep": "保持",
"keep_all": "全て保持", "keep_all": "全て保持",
"keep_this_delete_others": "これを残してほかを削除する",
"kept_this_deleted_others": "このアセットを残して{count, plural, other {#件のアセット}}を削除する",
"keyboard_shortcuts": "キーボードショートカット", "keyboard_shortcuts": "キーボードショートカット",
"language": "言語", "language": "言語",
"language_setting_description": "優先言語を選択してください", "language_setting_description": "優先言語を選択してください",
@@ -758,12 +832,14 @@
"latest_version": "最新バージョン", "latest_version": "最新バージョン",
"latitude": "緯度", "latitude": "緯度",
"leave": "標高", "leave": "標高",
"lens_model": "レンズモデル",
"let_others_respond": "他のユーザーの返信を許可する", "let_others_respond": "他のユーザーの返信を許可する",
"level": "レベル", "level": "レベル",
"library": "ライブラリ", "library": "ライブラリ",
"library_options": "ライブラリ設定", "library_options": "ライブラリ設定",
"light": "ライトモード", "light": "ライトモード",
"like_deleted": "いいねが削除されました", "like_deleted": "いいねが削除されました",
"link_motion_video": "モーションビデオのリンク",
"link_options": "リンクのオプション", "link_options": "リンクのオプション",
"link_to_oauth": "OAuthへリンクする", "link_to_oauth": "OAuthへリンクする",
"linked_oauth_account": "リンクされたOAuthアカウント", "linked_oauth_account": "リンクされたOAuthアカウント",
@@ -782,6 +858,7 @@
"look": "見た目", "look": "見た目",
"loop_videos": "動画をループ", "loop_videos": "動画をループ",
"loop_videos_description": "有効にすると詳細表示で自動的に動画がループします。", "loop_videos_description": "有効にすると詳細表示で自動的に動画がループします。",
"main_branch_warning": "開発版を使っているようです。リリース版の使用を強く推奨します!",
"make": "メーカー", "make": "メーカー",
"manage_shared_links": "共有済みのリンクを管理", "manage_shared_links": "共有済みのリンクを管理",
"manage_sharing_with_partners": "パートナーとの共有を管理します", "manage_sharing_with_partners": "パートナーとの共有を管理します",
@@ -814,6 +891,7 @@
"month": "月", "month": "月",
"more": "もっと表示", "more": "もっと表示",
"moved_to_trash": "ゴミ箱に移動しました", "moved_to_trash": "ゴミ箱に移動しました",
"mute_memories": "メモリーのミュート",
"my_albums": "私のアルバム", "my_albums": "私のアルバム",
"name": "名前", "name": "名前",
"name_or_nickname": "名前またはニックネーム", "name_or_nickname": "名前またはニックネーム",
@@ -843,7 +921,7 @@
"no_results": "結果がありません", "no_results": "結果がありません",
"no_results_description": "同義語やより一般的なキーワードを試してください", "no_results_description": "同義語やより一般的なキーワードを試してください",
"no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう", "no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう",
"not_in_any_album": "どのアルバムにも入っていません", "not_in_any_album": "どのアルバムにも入っていない",
"note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください", "note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください",
"note_unlimited_quota": "注: 容量を無制限にするには0を入力してください", "note_unlimited_quota": "注: 容量を無制限にするには0を入力してください",
"notes": "注意", "notes": "注意",
@@ -851,6 +929,7 @@
"notifications": "通知", "notifications": "通知",
"notifications_setting_description": "通知を管理します", "notifications_setting_description": "通知を管理します",
"oauth": "OAuth", "oauth": "OAuth",
"official_immich_resources": "公式Immichリソース",
"offline": "オフライン", "offline": "オフライン",
"offline_paths": "オフラインのパス", "offline_paths": "オフラインのパス",
"offline_paths_description": "これらの結果は、外部ライブラリの一部ではないファイルを手動で削除したことが原因である可能性があります。", "offline_paths_description": "これらの結果は、外部ライブラリの一部ではないファイルを手動で削除したことが原因である可能性があります。",
@@ -908,6 +987,7 @@
"permanently_deleted_asset": "アセットを完全に削除しました", "permanently_deleted_asset": "アセットを完全に削除しました",
"permanently_deleted_assets_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました", "permanently_deleted_assets_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"person": "人物", "person": "人物",
"person_birthdate": "{date}生まれ",
"person_hidden": "{name}{hidden, select, true { (非表示)} other {}}", "person_hidden": "{name}{hidden, select, true { (非表示)} other {}}",
"photo_shared_all_users": "写真をすべてのユーザーと共有したか、共有するユーザーがいないようです。", "photo_shared_all_users": "写真をすべてのユーザーと共有したか、共有するユーザーがいないようです。",
"photos": "写真", "photos": "写真",
@@ -917,6 +997,7 @@
"pick_a_location": "場所を選択", "pick_a_location": "場所を選択",
"place": "場所", "place": "場所",
"places": "撮影場所", "places": "撮影場所",
"places_count": "{count, plural, other {{count, number}箇所}}",
"play": "再生", "play": "再生",
"play_memories": "メモリーを再生", "play_memories": "メモリーを再生",
"play_motion_photo": "モーションビデオを再生", "play_motion_photo": "モーションビデオを再生",
@@ -976,14 +1057,17 @@
"reassigned_assets_to_new_person": "{count, plural, one {#個} other {#個}}のアセットを新しい人物に割り当てました", "reassigned_assets_to_new_person": "{count, plural, one {#個} other {#個}}のアセットを新しい人物に割り当てました",
"reassing_hint": "選択されたアセットを既存の人物に割り当て", "reassing_hint": "選択されたアセットを既存の人物に割り当て",
"recent": "最近", "recent": "最近",
"recent-albums": "最近のアルバム",
"recent_searches": "最近の検索", "recent_searches": "最近の検索",
"refresh": "更新", "refresh": "更新",
"refresh_encoded_videos": "エンコードされた動画を更新", "refresh_encoded_videos": "エンコードされた動画を更新",
"refresh_faces": "顔認識を更新",
"refresh_metadata": "メタデータを更新", "refresh_metadata": "メタデータを更新",
"refresh_thumbnails": "サムネイルを更新", "refresh_thumbnails": "サムネイルを更新",
"refreshed": "更新済", "refreshed": "更新済",
"refreshes_every_file": "すべてのファイルを更新", "refreshes_every_file": "すべてのファイルを更新",
"refreshing_encoded_video": "エンコードされた動画を更新中", "refreshing_encoded_video": "エンコードされた動画を更新中",
"refreshing_faces": "顔認識を更新中",
"refreshing_metadata": "メタデータを更新中", "refreshing_metadata": "メタデータを更新中",
"regenerating_thumbnails": "サムネイルを再生成中", "regenerating_thumbnails": "サムネイルを再生成中",
"remove": "削除", "remove": "削除",
@@ -995,11 +1079,16 @@
"remove_from_album": "アルバムから削除", "remove_from_album": "アルバムから削除",
"remove_from_favorites": "お気に入りから削除", "remove_from_favorites": "お気に入りから削除",
"remove_from_shared_link": "共有リンクから削除", "remove_from_shared_link": "共有リンクから削除",
"remove_memory": "メモリーの削除",
"remove_photo_from_memory": "メモリーから写真を削除",
"remove_url": "URLの削除",
"remove_user": "ユーザーを削除", "remove_user": "ユーザーを削除",
"removed_api_key": "削除されたAPI キー: {name}", "removed_api_key": "削除されたAPI キー: {name}",
"removed_from_archive": "アーカイブから削除されました", "removed_from_archive": "アーカイブから削除されました",
"removed_from_favorites": "お気に入りから削除しました", "removed_from_favorites": "お気に入りから削除しました",
"removed_from_favorites_count": "{count, plural, other {#項目}}お気に入りから削除しました", "removed_from_favorites_count": "{count, plural, other {#項目}}お気に入りから削除しました",
"removed_memory": "削除されたメモリー",
"removed_photo_from_memory": "メモリーから削除された写真",
"removed_tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}からタグを削除しました", "removed_tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}からタグを削除しました",
"rename": "リネーム", "rename": "リネーム",
"repair": "修復", "repair": "修復",
@@ -1008,6 +1097,7 @@
"repository": "リポジトリ", "repository": "リポジトリ",
"require_password": "パスワードを要求", "require_password": "パスワードを要求",
"require_user_to_change_password_on_first_login": "ユーザーに初回ログイン時にパスワードの変更を要求する", "require_user_to_change_password_on_first_login": "ユーザーに初回ログイン時にパスワードの変更を要求する",
"rescan": "再スキャン",
"reset": "リセット", "reset": "リセット",
"reset_password": "パスワードをリセット", "reset_password": "パスワードをリセット",
"reset_people_visibility": "人物の非表示設定をリセット", "reset_people_visibility": "人物の非表示設定をリセット",
@@ -1030,22 +1120,29 @@
"saved_settings": "設定を保存しました", "saved_settings": "設定を保存しました",
"say_something": "何か書き込みましょう", "say_something": "何か書き込みましょう",
"scan_all_libraries": "全てのライブラリをスキャン", "scan_all_libraries": "全てのライブラリをスキャン",
"scan_library": "スキャン",
"scan_settings": "スキャン設定", "scan_settings": "スキャン設定",
"scanning_for_album": "アルバムをスキャン中…", "scanning_for_album": "アルバムをスキャン中…",
"search": "検索", "search": "検索",
"search_albums": "アルバムを検索", "search_albums": "アルバムを検索",
"search_by_context": "状況で検索", "search_by_context": "状況で検索",
"search_by_description": "概要で検索",
"search_by_description_example": "サパでハイキングした日",
"search_by_filename": "ファイル名もしくは拡張子で検索", "search_by_filename": "ファイル名もしくは拡張子で検索",
"search_by_filename_example": "例: IMG_1234.JPG もしくは PNG", "search_by_filename_example": "例: IMG_1234.JPG もしくは PNG",
"search_camera_make": "カメラメーカーを検索…", "search_camera_make": "カメラメーカーを検索…",
"search_camera_model": "カメラのモデルを検索…", "search_camera_model": "カメラのモデルを検索…",
"search_city": "市町村を検索…", "search_city": "市町村を検索…",
"search_country": "国を検索…", "search_country": "国を検索…",
"search_for": "検索",
"search_for_existing_person": "既存の人物を検索", "search_for_existing_person": "既存の人物を検索",
"search_no_people": "人物がいません", "search_no_people": "人物がいません",
"search_no_people_named": "「{name}」という名前の人物がいません", "search_no_people_named": "「{name}」という名前の人物がいません",
"search_options": "検索オプション",
"search_people": "人物を検索", "search_people": "人物を検索",
"search_places": "場所を検索", "search_places": "場所を検索",
"search_rating": "レートで検索...",
"search_settings": "検索設定",
"search_state": "都道府県を検索…", "search_state": "都道府県を検索…",
"search_tags": "タグを検索...", "search_tags": "タグを検索...",
"search_timezone": "タイムゾーンを検索…", "search_timezone": "タイムゾーンを検索…",
@@ -1054,6 +1151,7 @@
"searching_locales": "ロケールを検索…", "searching_locales": "ロケールを検索…",
"second": "秒", "second": "秒",
"see_all_people": "全ての人物を見る", "see_all_people": "全ての人物を見る",
"select": "選択",
"select_album_cover": "アルバムカバーを選択", "select_album_cover": "アルバムカバーを選択",
"select_all": "全て選択", "select_all": "全て選択",
"select_all_duplicates": "全ての重複を選択", "select_all_duplicates": "全ての重複を選択",
@@ -1076,6 +1174,7 @@
"server_version": "サーバーバージョン", "server_version": "サーバーバージョン",
"set": "設定", "set": "設定",
"set_as_album_cover": "アルバムカバーとして設定", "set_as_album_cover": "アルバムカバーとして設定",
"set_as_featured_photo": "人物写真に設定",
"set_as_profile_picture": "プロフィール画像として設定", "set_as_profile_picture": "プロフィール画像として設定",
"set_date_of_birth": "生年月日を設定", "set_date_of_birth": "生年月日を設定",
"set_profile_picture": "プロフィール画像を設定", "set_profile_picture": "プロフィール画像を設定",
@@ -1090,6 +1189,7 @@
"shared_from_partner": "{partner} による写真", "shared_from_partner": "{partner} による写真",
"shared_link_options": "共有リンクのオプション", "shared_link_options": "共有リンクのオプション",
"shared_links": "共有リンク", "shared_links": "共有リンク",
"shared_links_description": "写真や動画をリンクで共有",
"shared_photos_and_videos_count": "{assetCount, plural, other {#個の共有された写真と動画}}", "shared_photos_and_videos_count": "{assetCount, plural, other {#個の共有された写真と動画}}",
"shared_with_partner": "{partner} と共有しました", "shared_with_partner": "{partner} と共有しました",
"sharing": "共有", "sharing": "共有",
@@ -1112,6 +1212,8 @@
"show_person_options": "人物設定を表示", "show_person_options": "人物設定を表示",
"show_progress_bar": "プログレスバーを表示", "show_progress_bar": "プログレスバーを表示",
"show_search_options": "検索オプションを表示", "show_search_options": "検索オプションを表示",
"show_shared_links": "共有リンクを表示",
"show_slideshow_transition": "スライドショーのトランジションを表示",
"show_supporter_badge": "サポーターバッジ", "show_supporter_badge": "サポーターバッジ",
"show_supporter_badge_description": "サポーターバッジを表示", "show_supporter_badge_description": "サポーターバッジを表示",
"shuffle": "ランダム", "shuffle": "ランダム",
@@ -1121,6 +1223,8 @@
"sign_up": "登録", "sign_up": "登録",
"size": "サイズ", "size": "サイズ",
"skip_to_content": "コンテンツへスキップ", "skip_to_content": "コンテンツへスキップ",
"skip_to_folders": "フォルダへスキップ",
"skip_to_tags": "タグへスキップ",
"slideshow": "スライドショー", "slideshow": "スライドショー",
"slideshow_settings": "スライドショー設定", "slideshow_settings": "スライドショー設定",
"sort_albums_by": "この順序でアルバムをソート…", "sort_albums_by": "この順序でアルバムをソート…",
@@ -1128,6 +1232,7 @@
"sort_items": "アイテムの数", "sort_items": "アイテムの数",
"sort_modified": "変更日", "sort_modified": "変更日",
"sort_oldest": "古い写真", "sort_oldest": "古い写真",
"sort_people_by_similarity": "似ている順に人物を並び替える",
"sort_recent": "最新の写真", "sort_recent": "最新の写真",
"sort_title": "タイトル", "sort_title": "タイトル",
"source": "ソース", "source": "ソース",
@@ -1151,12 +1256,17 @@
"submit": "送信", "submit": "送信",
"suggestions": "ユーザーリスト", "suggestions": "ユーザーリスト",
"sunrise_on_the_beach": "海岸の日の出", "sunrise_on_the_beach": "海岸の日の出",
"support": "サポート",
"support_and_feedback": "サポートとフィードバック",
"support_third_party_description": "Immichのインストールはサードパーティーによってパッケージ化されています。遭遇した問題はそのパッケージに起因している可能性があるので以下のリンクを使って最初にそのパッケージに問題を提起してください。",
"swap_merge_direction": "統合する方向を入れ替え", "swap_merge_direction": "統合する方向を入れ替え",
"sync": "同期", "sync": "同期",
"tag": "タグ付けする", "tag": "タグ付けする",
"tag_assets": "アセットにタグ付けする", "tag_assets": "アセットにタグ付けする",
"tag_created": "タグ: {tag} を作成しました", "tag_created": "タグ: {tag} を作成しました",
"tag_feature_description": "意味を持たせたタグトでグループ化して写真と動画を閲覧する",
"tag_not_found_question": "タグが見つかりませんか? <link>こちら</link>からタグを作成できます", "tag_not_found_question": "タグが見つかりませんか? <link>こちら</link>からタグを作成できます",
"tag_people": "人物タグ",
"tag_updated": "タグ: {tag} を更新しました", "tag_updated": "タグ: {tag} を更新しました",
"tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}をタグ付けしました", "tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}をタグ付けしました",
"tags": "タグ", "tags": "タグ",
@@ -1165,15 +1275,19 @@
"theme_selection": "テーマ選択", "theme_selection": "テーマ選択",
"theme_selection_description": "ブラウザのシステム設定に基づいてテーマを明色または暗色に自動的に設定します", "theme_selection_description": "ブラウザのシステム設定に基づいてテーマを明色または暗色に自動的に設定します",
"they_will_be_merged_together": "これらは一緒に統合されます", "they_will_be_merged_together": "これらは一緒に統合されます",
"third_party_resources": "サードパーティーリソース",
"time_based_memories": "時間によるメモリー", "time_based_memories": "時間によるメモリー",
"timeline": "タイムライン",
"timezone": "タイムゾーン", "timezone": "タイムゾーン",
"to_archive": "アーカイブ", "to_archive": "アーカイブ",
"to_change_password": "パスワードを変更", "to_change_password": "パスワードを変更",
"to_favorite": "お気に入り", "to_favorite": "お気に入り",
"to_login": "ログイン", "to_login": "ログイン",
"to_parent": "上位の階層へ",
"to_trash": "ゴミ箱", "to_trash": "ゴミ箱",
"toggle_settings": "設定をトグル", "toggle_settings": "設定をトグル",
"toggle_theme": "ダークテーマを切り替え", "toggle_theme": "ダークテーマを切り替え",
"total": "合計",
"total_usage": "総使用量", "total_usage": "総使用量",
"trash": "ゴミ箱", "trash": "ゴミ箱",
"trash_all": "全て削除", "trash_all": "全て削除",
@@ -1187,10 +1301,13 @@
"unfavorite": "お気に入りから外す", "unfavorite": "お気に入りから外す",
"unhide_person": "人物の非表示を解除", "unhide_person": "人物の非表示を解除",
"unknown": "不明", "unknown": "不明",
"unknown_country": "不明な国",
"unknown_year": "不明な年", "unknown_year": "不明な年",
"unlimited": "無制限", "unlimited": "無制限",
"unlink_motion_video": "モーションビデオのリンクを解除",
"unlink_oauth": "OAuthのリンクを解除", "unlink_oauth": "OAuthのリンクを解除",
"unlinked_oauth_account": "リンクが解除されたOAuthアカウント", "unlinked_oauth_account": "リンクが解除されたOAuthアカウント",
"unmute_memories": "メモリーのミュートを解除",
"unnamed_album": "無名のアルバム", "unnamed_album": "無名のアルバム",
"unnamed_album_delete_confirmation": "本当にこのアルバムを削除しますか?", "unnamed_album_delete_confirmation": "本当にこのアルバムを削除しますか?",
"unnamed_share": "無名の共有", "unnamed_share": "無名の共有",
@@ -1231,7 +1348,9 @@
"variables": "変数", "variables": "変数",
"version": "バージョン", "version": "バージョン",
"version_announcement_closing": "あなたの友人、Alex", "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": "動画",
"video_hover_setting": "ホバー時にサムネイルで動画を再生", "video_hover_setting": "ホバー時にサムネイルで動画を再生",
"video_hover_setting_description": "マウスが項目の上にあるときに動画のサムネイルを再生します。無効時でも再生アイコンにカーソルを合わせると再生を開始できます。", "video_hover_setting_description": "マウスが項目の上にあるときに動画のサムネイルを再生します。無効時でも再生アイコンにカーソルを合わせると再生を開始できます。",
@@ -1242,7 +1361,9 @@
"view_all": "すべて見る", "view_all": "すべて見る",
"view_all_users": "全てのユーザーを確認する", "view_all_users": "全てのユーザーを確認する",
"view_in_timeline": "タイムラインで見る", "view_in_timeline": "タイムラインで見る",
"view_link": "リンクを見る",
"view_links": "リンクを確認する", "view_links": "リンクを確認する",
"view_name": "分類",
"view_next_asset": "次のアセットを見る", "view_next_asset": "次のアセットを見る",
"view_previous_asset": "前のアセットを見る", "view_previous_asset": "前のアセットを見る",
"view_stack": "ビュースタック", "view_stack": "ビュースタック",
@@ -1251,7 +1372,7 @@
"warning": "警告", "warning": "警告",
"week": "週", "week": "週",
"welcome": "ようこそ", "welcome": "ようこそ",
"welcome_to_immich": "immichにようこそ", "welcome_to_immich": "Immichにようこそ",
"year": "年", "year": "年",
"years_ago": "{years, plural, one {#年} other {#年}}前", "years_ago": "{years, plural, one {#年} other {#年}}前",
"yes": "はい", "yes": "はい",
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+63 -8
View File
@@ -41,6 +41,7 @@
"backup_settings": "백업 설정", "backup_settings": "백업 설정",
"backup_settings_description": "데이터베이스 백업 설정 관리", "backup_settings_description": "데이터베이스 백업 설정 관리",
"check_all": "모두 확인", "check_all": "모두 확인",
"cleanup": "정리",
"cleared_jobs": "작업 중단: {job}", "cleared_jobs": "작업 중단: {job}",
"config_set_by_file": "현재 설정은 구성 파일에 의해 관리됩니다.", "config_set_by_file": "현재 설정은 구성 파일에 의해 관리됩니다.",
"confirm_delete_library": "{library} 라이브러리를 삭제하시겠습니까?", "confirm_delete_library": "{library} 라이브러리를 삭제하시겠습니까?",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "주기적인 라이브러리 스캔 활성화", "library_scanning_enable_description": "주기적인 라이브러리 스캔 활성화",
"library_settings": "외부 라이브러리", "library_settings": "외부 라이브러리",
"library_settings_description": "외부 라이브러리 설정 관리", "library_settings_description": "외부 라이브러리 설정 관리",
"library_tasks_description": "라이브러리 구성 및 확인 작업 수행", "library_tasks_description": "외부 라이브러리에서 새 자산 및/또는 변경된 자산을 검색합니다",
"library_watching_enable_description": "외부 라이브러리의 파일 변경 감시", "library_watching_enable_description": "외부 라이브러리의 파일 변경 감시",
"library_watching_settings": "라이브러리 감시 (실험 기능)", "library_watching_settings": "라이브러리 감시 (실험 기능)",
"library_watching_settings_description": "파일 변겅을 자동으로 감지", "library_watching_settings_description": "파일 변겅을 자동으로 감지",
@@ -147,6 +148,8 @@
"map_settings": "지도", "map_settings": "지도",
"map_settings_description": "지도 설정 관리", "map_settings_description": "지도 설정 관리",
"map_style_description": "지도 테마 style.json URL", "map_style_description": "지도 테마 style.json URL",
"memory_cleanup_job": "메모리 정리",
"memory_generate_job": "메모리 생성",
"metadata_extraction_job": "메타데이터 추출", "metadata_extraction_job": "메타데이터 추출",
"metadata_extraction_job_description": "각 항목에서 GPS, 인물 및 해상도 등의 메타데이터 정보 추출", "metadata_extraction_job_description": "각 항목에서 GPS, 인물 및 해상도 등의 메타데이터 정보 추출",
"metadata_faces_import_setting": "얼굴 가져오기 활성화", "metadata_faces_import_setting": "얼굴 가져오기 활성화",
@@ -240,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "해시 검증을 활성화합니다. 이 설정의 결과를 확실히 이해하지 않는 한 비활성화하지 마세요.", "storage_template_hash_verification_enabled_description": "해시 검증을 활성화합니다. 이 설정의 결과를 확실히 이해하지 않는 한 비활성화하지 마세요.",
"storage_template_migration": "스토리지 템플릿 마이그레이션", "storage_template_migration": "스토리지 템플릿 마이그레이션",
"storage_template_migration_description": "이전에 업로드된 항목에 현재 <link>{template}</link> 적용", "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_migration_job": "스토리지 템플릿 마이그레이션 작업",
"storage_template_more_details": "이 기능에 대한 자세한 내용은 <template-link>스토리지 템플릿</template-link> 및 <implications-link>설명</implications-link>을 참조하세요.", "storage_template_more_details": "이 기능에 대한 자세한 내용은 <template-link>스토리지 템플릿</template-link> 및 <implications-link>설명</implications-link>을 참조하세요.",
"storage_template_onboarding_description": "이 기능을 활성화하면 사용자 정의 템플릿을 사용하여 파일을 자동으로 정리할 수 있습니다. 안정성 문제로 인해 해당 기능은 기본적으로 비활성화되어 있습니다. 자세한 내용은 <link>문서</link>를 참조하세요.", "storage_template_onboarding_description": "이 기능을 활성화하면 사용자 정의 템플릿을 사용하여 파일을 자동으로 정리할 수 있습니다. 안정성 문제로 인해 해당 기능은 기본적으로 비활성화되어 있습니다. 자세한 내용은 <link>문서</link>를 참조하세요.",
@@ -250,10 +253,16 @@
"storage_template_user_label": "사용자의 스토리지 레이블: <code>{label}</code>", "storage_template_user_label": "사용자의 스토리지 레이블: <code>{label}</code>",
"system_settings": "시스템 설정", "system_settings": "시스템 설정",
"tag_cleanup_job": "태그 정리", "tag_cleanup_job": "태그 정리",
"template_email_available_tags": "템플릿에서 다음 변수를 사용할 수 있습니다: {tags}",
"template_email_if_empty": "비어 있는 경우 기본 템플릿이 사용됩니다.", "template_email_if_empty": "비어 있는 경우 기본 템플릿이 사용됩니다.",
"template_email_invite_album": "앨범 템플릿 초대",
"template_email_preview": "미리보기", "template_email_preview": "미리보기",
"template_email_settings": "이메일 템플릿", "template_email_settings": "이메일 템플릿",
"template_email_settings_description": "사용자 정의 이메일 템플릿 관리", "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": "사용자 정의 CSS",
"theme_custom_css_settings_description": "Immich에 적용할 사용자 정의 CSS(Cascading Style Sheets) 설정", "theme_custom_css_settings_description": "Immich에 적용할 사용자 정의 CSS(Cascading Style Sheets) 설정",
"theme_settings": "테마 설정", "theme_settings": "테마 설정",
@@ -278,11 +287,13 @@
"transcoding_audio_codec_description": "Opus는 가장 좋은 품질의 옵션이지만 기기 및 소프트웨어가 오래된 경우 호환되지 않을 수 있습니다.", "transcoding_audio_codec_description": "Opus는 가장 좋은 품질의 옵션이지만 기기 및 소프트웨어가 오래된 경우 호환되지 않을 수 있습니다.",
"transcoding_bitrate_description": "최대 비트레이트를 초과하는 동영상 또는 허용되지 않는 형식의 동영상", "transcoding_bitrate_description": "최대 비트레이트를 초과하는 동영상 또는 허용되지 않는 형식의 동영상",
"transcoding_codecs_learn_more": "여기에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 <h264-link>H.264 코덱</h264-link>, <hevc-link>HEVC 코덱</hevc-link> 및 <vp9-link>VP9 코덱</vp9-link> 항목을 참조하세요.", "transcoding_codecs_learn_more": "여기에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 <h264-link>H.264 코덱</h264-link>, <hevc-link>HEVC 코덱</hevc-link> 및 <vp9-link>VP9 코덱</vp9-link> 항목을 참조하세요.",
"transcoding_constant_quality_mode": "Constant quality mode", "transcoding_constant_quality_mode": "고정 품질 모드",
"transcoding_constant_quality_mode_description": "ICQ는 CQP보다 나은 성능을 보이나 일부 기기의 하드웨어 가속에서 지원되지 않을 수 있습니다. 이 옵션을 설정하면 품질 기반 인코딩 시 지정된 모드를 우선적으로 사용합니다. NVENC에서는 ICQ를 지원하지 않아 이 설정이 적용되지 않습니다.", "transcoding_constant_quality_mode_description": "ICQ는 CQP보다 나은 성능을 보이나 일부 기기의 하드웨어 가속에서 지원되지 않을 수 있습니다. 이 옵션을 설정하면 품질 기반 인코딩 시 지정된 모드를 우선적으로 사용합니다. NVENC에서는 ICQ를 지원하지 않아 이 설정이 적용되지 않습니다.",
"transcoding_constant_rate_factor": "Constant rate factor (-crf)", "transcoding_constant_rate_factor": "상수 비율 계수(-CRF)",
"transcoding_constant_rate_factor_description": "일반적으로 H.264는 23, HEVC는 28, VP9는 31, AV1는 35를 사용합니다. 값이 낮으면 품질이 향상되지만 파일 크기가 증가합니다.", "transcoding_constant_rate_factor_description": "일반적으로 H.264는 23, HEVC는 28, VP9는 31, AV1는 35를 사용합니다. 값이 낮으면 품질이 향상되지만 파일 크기가 증가합니다.",
"transcoding_disabled_description": "동영상을 트랜스코딩하지 않음. 일부 기기에서 재생이 불가능할 수 있습니다.", "transcoding_disabled_description": "동영상을 트랜스코딩하지 않음. 일부 기기에서 재생이 불가능할 수 있습니다.",
"transcoding_encoding_options": "인코딩 옵션",
"transcoding_encoding_options_description": "인코딩된 동영상의 코덱, 해상도, 품질 및 기타 옵션을 설정합니다",
"transcoding_hardware_acceleration": "하드웨어 가속", "transcoding_hardware_acceleration": "하드웨어 가속",
"transcoding_hardware_acceleration_description": "실험적인 기능입니다. 속도가 향상되지만 동일 비트레이트에서 품질이 상대적으로 낮을 수 있습니다.", "transcoding_hardware_acceleration_description": "실험적인 기능입니다. 속도가 향상되지만 동일 비트레이트에서 품질이 상대적으로 낮을 수 있습니다.",
"transcoding_hardware_decoding": "하드웨어 디코딩", "transcoding_hardware_decoding": "하드웨어 디코딩",
@@ -295,6 +306,8 @@
"transcoding_max_keyframe_interval": "최대 키프레임 간격", "transcoding_max_keyframe_interval": "최대 키프레임 간격",
"transcoding_max_keyframe_interval_description": "키프레임 사이 최대 프레임 거리를 설정합니다. 값이 낮으면 압축 효율이 저하되지만 검색 시간이 개선되고 빠른 움직임이 있는 장면에서 품질이 향상됩니다. 0을 입력한 경우 자동으로 설정합니다.", "transcoding_max_keyframe_interval_description": "키프레임 사이 최대 프레임 거리를 설정합니다. 값이 낮으면 압축 효율이 저하되지만 검색 시간이 개선되고 빠른 움직임이 있는 장면에서 품질이 향상됩니다. 0을 입력한 경우 자동으로 설정합니다.",
"transcoding_optimal_description": "목표 해상도보다 높은 동영상 또는 허용되지 않는 형식의 동영상", "transcoding_optimal_description": "목표 해상도보다 높은 동영상 또는 허용되지 않는 형식의 동영상",
"transcoding_policy": "트랜스코드 정책",
"transcoding_policy_description": "동영상 트랜스코딩 시기 설정하기",
"transcoding_preferred_hardware_device": "선호하는 하드웨어 기기", "transcoding_preferred_hardware_device": "선호하는 하드웨어 기기",
"transcoding_preferred_hardware_device_description": "하드웨어 트랜스코딩에 사용할 dri 노드를 설정합니다. (VAAPI와 QSV만 해당)", "transcoding_preferred_hardware_device_description": "하드웨어 트랜스코딩에 사용할 dri 노드를 설정합니다. (VAAPI와 QSV만 해당)",
"transcoding_preset_preset": "프리셋 (-preset)", "transcoding_preset_preset": "프리셋 (-preset)",
@@ -303,10 +316,10 @@
"transcoding_reference_frames_description": "특정 프레임을 압축할 때 참조하는 프레임 수를 설정합니다. 값이 높으면 압축 효율이 향상되나 인코딩 속도가 저하됩니다. 0을 입력한 경우 자동으로 설정합니다.", "transcoding_reference_frames_description": "특정 프레임을 압축할 때 참조하는 프레임 수를 설정합니다. 값이 높으면 압축 효율이 향상되나 인코딩 속도가 저하됩니다. 0을 입력한 경우 자동으로 설정합니다.",
"transcoding_required_description": "허용된 형식이 아닌 동영상만", "transcoding_required_description": "허용된 형식이 아닌 동영상만",
"transcoding_settings": "동영상 트랜스코딩 설정", "transcoding_settings": "동영상 트랜스코딩 설정",
"transcoding_settings_description": "동영상 파일의 해상도 및 인코딩 정보 관리", "transcoding_settings_description": "트랜스코딩할 동영상과 처리 방법 관리하기",
"transcoding_target_resolution": "목표 해상도", "transcoding_target_resolution": "목표 해상도",
"transcoding_target_resolution_description": "높은 해상도를 선택한 경우 세부 묘사의 손실을 최소화할 수 있지만, 인코딩 시간과 파일 크기가 증가하여 앱의 반응 속도가 느려질 수 있습니다.", "transcoding_target_resolution_description": "높은 해상도를 선택한 경우 세부 묘사의 손실을 최소화할 수 있지만, 인코딩 시간과 파일 크기가 증가하여 앱의 반응 속도가 느려질 수 있습니다.",
"transcoding_temporal_aq": "Temporal AQ", "transcoding_temporal_aq": "일시적 AQ",
"transcoding_temporal_aq_description": "세부 묘사가 많고 움직임이 적은 장면의 품질이 향상됩니다. 오래된 기기와 호환되지 않을 수 있습니다. (NVENC만 해당)", "transcoding_temporal_aq_description": "세부 묘사가 많고 움직임이 적은 장면의 품질이 향상됩니다. 오래된 기기와 호환되지 않을 수 있습니다. (NVENC만 해당)",
"transcoding_threads": "스레드", "transcoding_threads": "스레드",
"transcoding_threads_description": "값이 높으면 인코딩 속도가 향상되지만 리소스 사용량이 증가합니다. 값은 CPU 코어 수보다 작아야 하며, 설정하지 않으려면 0을 입력합니다.", "transcoding_threads_description": "값이 높으면 인코딩 속도가 향상되지만 리소스 사용량이 증가합니다. 값은 CPU 코어 수보다 작아야 하며, 설정하지 않으려면 0을 입력합니다.",
@@ -381,6 +394,7 @@
"allow_edits": "편집자로 설정", "allow_edits": "편집자로 설정",
"allow_public_user_to_download": "모든 사용자의 다운로드 허용", "allow_public_user_to_download": "모든 사용자의 다운로드 허용",
"allow_public_user_to_upload": "모든 사용자의 업로드 허용", "allow_public_user_to_upload": "모든 사용자의 업로드 허용",
"alt_text_qr_code": "QR코드 이미지",
"anti_clockwise": "반시계 방향", "anti_clockwise": "반시계 방향",
"api_key": "API 키", "api_key": "API 키",
"api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사해주세요.", "api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사해주세요.",
@@ -471,7 +485,9 @@
"comments_are_disabled": "댓글이 비활성화되었습니다.", "comments_are_disabled": "댓글이 비활성화되었습니다.",
"confirm": "확인", "confirm": "확인",
"confirm_admin_password": "관리자 비밀번호 확인", "confirm_admin_password": "관리자 비밀번호 확인",
"confirm_delete_face": "에셋에서 {name} 얼굴을 삭제하시겠습니까?",
"confirm_delete_shared_link": "이 공유 링크를 삭제하시겠습니까?", "confirm_delete_shared_link": "이 공유 링크를 삭제하시겠습니까?",
"confirm_keep_this_delete_others": "이 에셋을 제외한 스택의 다른 모든 에셋이 삭제됩니다. 계속하시겠습니까?",
"confirm_password": "비밀번호 확인", "confirm_password": "비밀번호 확인",
"contain": "맞춤", "contain": "맞춤",
"context": "내용", "context": "내용",
@@ -512,15 +528,21 @@
"date_range": "날짜 범위", "date_range": "날짜 범위",
"day": "일", "day": "일",
"deduplicate_all": "모두 삭제", "deduplicate_all": "모두 삭제",
"deduplication_criteria_1": "이미지 크기(바이트)",
"deduplication_criteria_2": "EXIF 데이터 개수",
"deduplication_info": "중복 제거 정보",
"deduplication_info_description": "자산을 자동으로 미리 선택하고 일괄적으로 중복을 제거하려면 다음을 살펴보세요:",
"default_locale": "기본 로케일", "default_locale": "기본 로케일",
"default_locale_description": "브라우저 로케일에 따른 날짜 및 숫자 형식 지정", "default_locale_description": "브라우저 로케일에 따른 날짜 및 숫자 형식 지정",
"delete": "삭제", "delete": "삭제",
"delete_album": "앨범 삭제", "delete_album": "앨범 삭제",
"delete_api_key_prompt": "API 키를 삭제하시겠습니까?", "delete_api_key_prompt": "API 키를 삭제하시겠습니까?",
"delete_duplicates_confirmation": "비슷한 항목들을 영구적으로 삭제하시겠습니까?", "delete_duplicates_confirmation": "비슷한 항목들을 영구적으로 삭제하시겠습니까?",
"delete_face": "얼굴 삭제",
"delete_key": "키 삭제", "delete_key": "키 삭제",
"delete_library": "라이브러리 삭제", "delete_library": "라이브러리 삭제",
"delete_link": "링크 삭제", "delete_link": "링크 삭제",
"delete_others": "다른 사람 삭제",
"delete_shared_link": "공유 링크 삭제", "delete_shared_link": "공유 링크 삭제",
"delete_tag": "태그 삭제", "delete_tag": "태그 삭제",
"delete_tag_confirmation_prompt": "{tagName} 태그를 삭제하시겠습니까?", "delete_tag_confirmation_prompt": "{tagName} 태그를 삭제하시겠습니까?",
@@ -532,7 +554,7 @@
"direction": "방향", "direction": "방향",
"disabled": "비활성화됨", "disabled": "비활성화됨",
"disallow_edits": "뷰어로 설정", "disallow_edits": "뷰어로 설정",
"discord": "Discord", "discord": "디스코드",
"discover": "탐색", "discover": "탐색",
"dismiss_all_errors": "모든 오류 무시", "dismiss_all_errors": "모든 오류 무시",
"dismiss_error": "오류 무시", "dismiss_error": "오류 무시",
@@ -579,11 +601,12 @@
"editor_crop_tool_h2_rotation": "회전", "editor_crop_tool_h2_rotation": "회전",
"email": "이메일", "email": "이메일",
"empty_trash": "휴지통 비우기", "empty_trash": "휴지통 비우기",
"empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다!", "empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 삭제됩니다.\n이 작업은 되돌릴 수 없습니다!",
"enable": "활성화", "enable": "활성화",
"enabled": "활성화됨", "enabled": "활성화됨",
"end_date": "종료일", "end_date": "종료일",
"error": "오류", "error": "오류",
"error_delete_face": "에셋에서 얼굴 삭제 오류",
"error_loading_image": "이미지 로드 오류", "error_loading_image": "이미지 로드 오류",
"error_title": "오류 - 문제가 발생했습니다", "error_title": "오류 - 문제가 발생했습니다",
"errors": { "errors": {
@@ -611,6 +634,7 @@
"failed_to_create_shared_link": "공유 링크를 생성하지 못했습니다.", "failed_to_create_shared_link": "공유 링크를 생성하지 못했습니다.",
"failed_to_edit_shared_link": "공유 링크를 수정하지 못했습니다.", "failed_to_edit_shared_link": "공유 링크를 수정하지 못했습니다.",
"failed_to_get_people": "인물 로드 실패", "failed_to_get_people": "인물 로드 실패",
"failed_to_keep_this_delete_others": "이 자산을 유지하고 다른 자산을 삭제하지 못했습니다",
"failed_to_load_asset": "항목 로드 실패", "failed_to_load_asset": "항목 로드 실패",
"failed_to_load_assets": "항목 로드 실패", "failed_to_load_assets": "항목 로드 실패",
"failed_to_load_people": "인물 로드 실패", "failed_to_load_people": "인물 로드 실패",
@@ -725,6 +749,7 @@
"external": "외부", "external": "외부",
"external_libraries": "외부 라이브러리", "external_libraries": "외부 라이브러리",
"face_unassigned": "알 수 없음", "face_unassigned": "알 수 없음",
"failed_to_load_assets": "에셋 로드에 실패했습니다",
"favorite": "즐겨찾기", "favorite": "즐겨찾기",
"favorite_or_unfavorite_photo": "즐겨찾기 추가/제거", "favorite_or_unfavorite_photo": "즐겨찾기 추가/제거",
"favorites": "즐겨찾기", "favorites": "즐겨찾기",
@@ -745,10 +770,13 @@
"get_help": "도움 요청", "get_help": "도움 요청",
"getting_started": "시작하기", "getting_started": "시작하기",
"go_back": "뒤로", "go_back": "뒤로",
"go_to_folder": "폴더로 이동",
"go_to_search": "검색으로 이동", "go_to_search": "검색으로 이동",
"group_albums_by": "다음으로 앨범 그룹화...", "group_albums_by": "다음으로 앨범 그룹화...",
"group_country": "국가별 그룹화",
"group_no": "그룹화 없음", "group_no": "그룹화 없음",
"group_owner": "소유자로 그룹화", "group_owner": "소유자로 그룹화",
"group_places_by": "장소 그룹화 기준...",
"group_year": "연도로 그룹화", "group_year": "연도로 그룹화",
"has_quota": "할당량", "has_quota": "할당량",
"hi_user": "안녕하세요 {name}님, ({email})", "hi_user": "안녕하세요 {name}님, ({email})",
@@ -781,6 +809,7 @@
"include_shared_albums": "공유 앨범 포함", "include_shared_albums": "공유 앨범 포함",
"include_shared_partner_assets": "파트너가 공유한 항목 포함", "include_shared_partner_assets": "파트너가 공유한 항목 포함",
"individual_share": "개인 공유", "individual_share": "개인 공유",
"individual_shares": "개별 공유",
"info": "정보", "info": "정보",
"interval": { "interval": {
"day_at_onepm": "매일 오후 1시", "day_at_onepm": "매일 오후 1시",
@@ -794,6 +823,8 @@
"jobs": "작업", "jobs": "작업",
"keep": "유지", "keep": "유지",
"keep_all": "모두 유지", "keep_all": "모두 유지",
"keep_this_delete_others": "이 항목은 보관하고 다른 항목은 삭제",
"kept_this_deleted_others": "이 자산을 유지하고 {count, plural, one {# asset} other {# assets}}을 삭제했습니다",
"keyboard_shortcuts": "키보드 단축키", "keyboard_shortcuts": "키보드 단축키",
"language": "언어", "language": "언어",
"language_setting_description": "선호하는 언어 선택", "language_setting_description": "선호하는 언어 선택",
@@ -801,6 +832,7 @@
"latest_version": "최신 버전", "latest_version": "최신 버전",
"latitude": "위도", "latitude": "위도",
"leave": "나가기", "leave": "나가기",
"lens_model": "카메라 렌즈 모델",
"let_others_respond": "다른 사용자의 반응 허용", "let_others_respond": "다른 사용자의 반응 허용",
"level": "레벨", "level": "레벨",
"library": "라이브러리", "library": "라이브러리",
@@ -859,6 +891,7 @@
"month": "월", "month": "월",
"more": "더보기", "more": "더보기",
"moved_to_trash": "휴지통으로 이동되었습니다.", "moved_to_trash": "휴지통으로 이동되었습니다.",
"mute_memories": "추억 음소거",
"my_albums": "내 앨범", "my_albums": "내 앨범",
"name": "이름", "name": "이름",
"name_or_nickname": "이름 또는 닉네임", "name_or_nickname": "이름 또는 닉네임",
@@ -954,6 +987,7 @@
"permanently_deleted_asset": "항목이 영구적으로 삭제되었습니다.", "permanently_deleted_asset": "항목이 영구적으로 삭제되었습니다.",
"permanently_deleted_assets_count": "항목 {count, plural, one {#개} other {#개}}가 영구적으로 삭제되었습니다.", "permanently_deleted_assets_count": "항목 {count, plural, one {#개} other {#개}}가 영구적으로 삭제되었습니다.",
"person": "인물", "person": "인물",
"person_birthdate": "{date} 출생",
"person_hidden": "{name}{hidden, select, true { (숨김)} other {}}", "person_hidden": "{name}{hidden, select, true { (숨김)} other {}}",
"photo_shared_all_users": "이미 모든 사용자와 사진을 공유 중이거나 다른 사용자가 없는 것 같습니다.", "photo_shared_all_users": "이미 모든 사용자와 사진을 공유 중이거나 다른 사용자가 없는 것 같습니다.",
"photos": "사진", "photos": "사진",
@@ -963,6 +997,7 @@
"pick_a_location": "위치 선택", "pick_a_location": "위치 선택",
"place": "장소", "place": "장소",
"places": "장소", "places": "장소",
"places_count": "{count, plural, one {{count, number} 장소} other {{count, number} 장소}}",
"play": "재생", "play": "재생",
"play_memories": "추억 재생", "play_memories": "추억 재생",
"play_motion_photo": "모션 포토 재생", "play_motion_photo": "모션 포토 재생",
@@ -1022,6 +1057,7 @@
"reassigned_assets_to_new_person": "항목 {count, plural, one {#개} other {#개}}가 새 인물에 할당되었습니다.", "reassigned_assets_to_new_person": "항목 {count, plural, one {#개} other {#개}}가 새 인물에 할당되었습니다.",
"reassing_hint": "기존 인물에 선택한 항목 할당", "reassing_hint": "기존 인물에 선택한 항목 할당",
"recent": "최근", "recent": "최근",
"recent-albums": "최근 앨범",
"recent_searches": "최근 검색", "recent_searches": "최근 검색",
"refresh": "새로고침", "refresh": "새로고침",
"refresh_encoded_videos": "동영상 재인코딩", "refresh_encoded_videos": "동영상 재인코딩",
@@ -1043,11 +1079,16 @@
"remove_from_album": "앨범에서 제거", "remove_from_album": "앨범에서 제거",
"remove_from_favorites": "즐겨찾기에서 제거", "remove_from_favorites": "즐겨찾기에서 제거",
"remove_from_shared_link": "공유 링크에서 제거", "remove_from_shared_link": "공유 링크에서 제거",
"remove_memory": "추억 제거",
"remove_photo_from_memory": "이 추억에서 사진 제거",
"remove_url": "URL 제거",
"remove_user": "사용자 삭제", "remove_user": "사용자 삭제",
"removed_api_key": "API 키 삭제: {name}", "removed_api_key": "API 키 삭제: {name}",
"removed_from_archive": "보관함에서 제거되었습니다.", "removed_from_archive": "보관함에서 제거되었습니다.",
"removed_from_favorites": "즐겨찾기에서 제거되었습니다.", "removed_from_favorites": "즐겨찾기에서 제거되었습니다.",
"removed_from_favorites_count": "즐겨찾기에서 항목 {count, plural, other {#개}} 제거됨", "removed_from_favorites_count": "즐겨찾기에서 항목 {count, plural, other {#개}} 제거됨",
"removed_memory": "추억 제거",
"removed_photo_from_memory": "이 추억에서 사진 제거",
"removed_tagged_assets": "항목 {count, plural, one {#개} other {#개}}에서 태그를 제거함", "removed_tagged_assets": "항목 {count, plural, one {#개} other {#개}}에서 태그를 제거함",
"rename": "이름 바꾸기", "rename": "이름 바꾸기",
"repair": "수리", "repair": "수리",
@@ -1056,6 +1097,7 @@
"repository": "리포지터리", "repository": "리포지터리",
"require_password": "비밀번호 필요", "require_password": "비밀번호 필요",
"require_user_to_change_password_on_first_login": "사용자가 처음 로그인할 때 비밀번호를 변경하도록 요구", "require_user_to_change_password_on_first_login": "사용자가 처음 로그인할 때 비밀번호를 변경하도록 요구",
"rescan": "재검색",
"reset": "초기화", "reset": "초기화",
"reset_password": "비밀번호 재설정", "reset_password": "비밀번호 재설정",
"reset_people_visibility": "인물 표시 여부 초기화", "reset_people_visibility": "인물 표시 여부 초기화",
@@ -1092,12 +1134,14 @@
"search_camera_model": "카메라 모델명 검색...", "search_camera_model": "카메라 모델명 검색...",
"search_city": "도시 검색...", "search_city": "도시 검색...",
"search_country": "국가 검색...", "search_country": "국가 검색...",
"search_for": "검색",
"search_for_existing_person": "존재하는 인물 검색", "search_for_existing_person": "존재하는 인물 검색",
"search_no_people": "인물이 없습니다.", "search_no_people": "인물이 없습니다.",
"search_no_people_named": "\"{name}\" 인물을 찾을 수 없음", "search_no_people_named": "\"{name}\" 인물을 찾을 수 없음",
"search_options": "검색 옵션", "search_options": "검색 옵션",
"search_people": "인물 검색", "search_people": "인물 검색",
"search_places": "장소 검색", "search_places": "장소 검색",
"search_rating": "등급으로 검색...",
"search_settings": "설정 검색", "search_settings": "설정 검색",
"search_state": "지역 검색...", "search_state": "지역 검색...",
"search_tags": "태그로 검색...", "search_tags": "태그로 검색...",
@@ -1107,6 +1151,7 @@
"searching_locales": "로케일 검색...", "searching_locales": "로케일 검색...",
"second": "초", "second": "초",
"see_all_people": "모든 인물 보기", "see_all_people": "모든 인물 보기",
"select": "선택",
"select_album_cover": "앨범 커버 변경", "select_album_cover": "앨범 커버 변경",
"select_all": "모두 선택", "select_all": "모두 선택",
"select_all_duplicates": "모두 선택", "select_all_duplicates": "모두 선택",
@@ -1129,6 +1174,7 @@
"server_version": "서버 버전", "server_version": "서버 버전",
"set": "설정", "set": "설정",
"set_as_album_cover": "앨범 커버로 설정", "set_as_album_cover": "앨범 커버로 설정",
"set_as_featured_photo": "추천 사진으로 설정",
"set_as_profile_picture": "프로필 사진으로 설정", "set_as_profile_picture": "프로필 사진으로 설정",
"set_date_of_birth": "생년월일 설정", "set_date_of_birth": "생년월일 설정",
"set_profile_picture": "프로필 사진으로 설정", "set_profile_picture": "프로필 사진으로 설정",
@@ -1143,6 +1189,7 @@
"shared_from_partner": "{partner}님의 사진", "shared_from_partner": "{partner}님의 사진",
"shared_link_options": "공유 링크 옵션", "shared_link_options": "공유 링크 옵션",
"shared_links": "공유 링크", "shared_links": "공유 링크",
"shared_links_description": "링크를 통해 사진 및 동영상 공유",
"shared_photos_and_videos_count": "사진 및 동영상 {assetCount, plural, other {#개를 공유했습니다.}}", "shared_photos_and_videos_count": "사진 및 동영상 {assetCount, plural, other {#개를 공유했습니다.}}",
"shared_with_partner": "{partner}님과 공유함", "shared_with_partner": "{partner}님과 공유함",
"sharing": "공유", "sharing": "공유",
@@ -1165,6 +1212,7 @@
"show_person_options": "인물 옵션 표시", "show_person_options": "인물 옵션 표시",
"show_progress_bar": "진행 표시줄 표시", "show_progress_bar": "진행 표시줄 표시",
"show_search_options": "검색 옵션 표시", "show_search_options": "검색 옵션 표시",
"show_shared_links": "공유 링크 표시",
"show_slideshow_transition": "슬라이드 전환 표시", "show_slideshow_transition": "슬라이드 전환 표시",
"show_supporter_badge": "서포터 배지", "show_supporter_badge": "서포터 배지",
"show_supporter_badge_description": "서포터 배지 표시", "show_supporter_badge_description": "서포터 배지 표시",
@@ -1184,6 +1232,7 @@
"sort_items": "항목 수", "sort_items": "항목 수",
"sort_modified": "수정된 날짜", "sort_modified": "수정된 날짜",
"sort_oldest": "오래된 사진", "sort_oldest": "오래된 사진",
"sort_people_by_similarity": "유사성을 기준으로 사람 정렬",
"sort_recent": "최근 사진", "sort_recent": "최근 사진",
"sort_title": "제목", "sort_title": "제목",
"source": "소스", "source": "소스",
@@ -1217,6 +1266,7 @@
"tag_created": "태그 생성됨: {tag}", "tag_created": "태그 생성됨: {tag}",
"tag_feature_description": "사진 및 동영상을 주제별 그룹화된 태그로 탐색", "tag_feature_description": "사진 및 동영상을 주제별 그룹화된 태그로 탐색",
"tag_not_found_question": "태그를 찾을 수 없나요? <link>새 태그를 생성하세요.</link>", "tag_not_found_question": "태그를 찾을 수 없나요? <link>새 태그를 생성하세요.</link>",
"tag_people": "사람 태그",
"tag_updated": "태그 업데이트됨: {tag}", "tag_updated": "태그 업데이트됨: {tag}",
"tagged_assets": "항목 {count, plural, one {#개} other {#개}}에 태그를 적용함", "tagged_assets": "항목 {count, plural, one {#개} other {#개}}에 태그를 적용함",
"tags": "태그", "tags": "태그",
@@ -1237,6 +1287,7 @@
"to_trash": "삭제", "to_trash": "삭제",
"toggle_settings": "설정 변경", "toggle_settings": "설정 변경",
"toggle_theme": "다크 모드 사용", "toggle_theme": "다크 모드 사용",
"total": "합계",
"total_usage": "총 사용량", "total_usage": "총 사용량",
"trash": "휴지통", "trash": "휴지통",
"trash_all": "모두 삭제", "trash_all": "모두 삭제",
@@ -1256,6 +1307,7 @@
"unlink_motion_video": "모션 비디오 링크 해제", "unlink_motion_video": "모션 비디오 링크 해제",
"unlink_oauth": "OAuth 연결 해제", "unlink_oauth": "OAuth 연결 해제",
"unlinked_oauth_account": "OAuth 계정 연결이 해제되었습니다.", "unlinked_oauth_account": "OAuth 계정 연결이 해제되었습니다.",
"unmute_memories": "추억 음소거 해제",
"unnamed_album": "이름 없는 앨범", "unnamed_album": "이름 없는 앨범",
"unnamed_album_delete_confirmation": "선텍한 앨범을 삭제하시겠습니까?", "unnamed_album_delete_confirmation": "선텍한 앨범을 삭제하시겠습니까?",
"unnamed_share": "이름 없는 공유", "unnamed_share": "이름 없는 공유",
@@ -1287,6 +1339,7 @@
"user_purchase_settings_description": "구매 및 제품 키 관리", "user_purchase_settings_description": "구매 및 제품 키 관리",
"user_role_set": "{user}님에게 {role} 역할을 설정했습니다.", "user_role_set": "{user}님에게 {role} 역할을 설정했습니다.",
"user_usage_detail": "사용자 사용량 상세", "user_usage_detail": "사용자 사용량 상세",
"user_usage_stats": "계정 사용량 통계",
"user_usage_stats_description": "계정 사용량 통계 보기", "user_usage_stats_description": "계정 사용량 통계 보기",
"username": "계정명", "username": "계정명",
"users": "사용자", "users": "사용자",
@@ -1308,7 +1361,9 @@
"view_all": "모두 보기", "view_all": "모두 보기",
"view_all_users": "모든 사용자 보기", "view_all_users": "모든 사용자 보기",
"view_in_timeline": "타임라인에서 보기", "view_in_timeline": "타임라인에서 보기",
"view_link": "링크 보기",
"view_links": "링크 확인", "view_links": "링크 확인",
"view_name": "보기",
"view_next_asset": "다음 항목 보기", "view_next_asset": "다음 항목 보기",
"view_previous_asset": "이전 항목 보기", "view_previous_asset": "이전 항목 보기",
"view_stack": "스택 보기", "view_stack": "스택 보기",
+47 -29
View File
@@ -13,7 +13,7 @@
"add_a_location": "Pievienot atrašanās vietu", "add_a_location": "Pievienot atrašanās vietu",
"add_a_name": "Pievienot vārdu", "add_a_name": "Pievienot vārdu",
"add_a_title": "Pievienot virsrakstu", "add_a_title": "Pievienot virsrakstu",
"add_exclusion_pattern": "Pievienot izņēmuma šablonu", "add_exclusion_pattern": "Pievienot izslēgšanas šablonu",
"add_import_path": "Pievienot importa ceļu", "add_import_path": "Pievienot importa ceļu",
"add_location": "Pievienot lokāciju", "add_location": "Pievienot lokāciju",
"add_more_users": "Pievienot vēl lietotājus", "add_more_users": "Pievienot vēl lietotājus",
@@ -29,11 +29,13 @@
"added_to_favorites_count": "Pievienots {count, number} izlasei", "added_to_favorites_count": "Pievienots {count, number} izlasei",
"admin": { "admin": {
"add_exclusion_pattern_description": "Pievienojiet izlaišanas shēmas. Aizstājējzīmju izmantoša *, **, un ? tiek atbalstīta. Lai ignorētu visus failus jebkurā direktorijā ar nosaukumu “RAW”, izmantojiet “**/RAW/**”. Lai ignorētu visus failus, kas beidzas ar “. tif”, izmantojiet “**/*. tif”. Lai ignorētu absolūto ceļu, izmantojiet “/path/to/ignore/**”.", "add_exclusion_pattern_description": "Pievienojiet izlaišanas shēmas. Aizstājējzīmju izmantoša *, **, un ? tiek atbalstīta. Lai ignorētu visus failus jebkurā direktorijā ar nosaukumu “RAW”, izmantojiet “**/RAW/**”. Lai ignorētu visus failus, kas beidzas ar “. tif”, izmantojiet “**/*. tif”. Lai ignorētu absolūto ceļu, izmantojiet “/path/to/ignore/**”.",
"asset_offline_description": "Šis ārējās bibliotēkas resurss vairs nav atrodams diskā un ir pārvietots uz atkritumu grozu. Ja fails tika pārvietots bibliotēkas ietvaros, pārbaudiet, vai jūsu hronoloģijā ir jauns atbilstošais resurss. Lai atjaunotu šo resursu, pārliecinieties, vai Immich var piekļūt tālāk norādītajam faila ceļam un skenēt bibliotēku.",
"authentication_settings": "Autentifikācijas iestatījumi", "authentication_settings": "Autentifikācijas iestatījumi",
"authentication_settings_description": "Pārvaldīt paroles, OAuth un citus autentifikācijas iestatījumus", "authentication_settings_description": "Paroļu, OAuth un citu autentifikācijas iestatījumu pārvaldība",
"authentication_settings_disable_all": "Vai tiešām vēlaties atspējot visas pieteikšanās metodes? Pieteikšanās tiks pilnībā atspējota.", "authentication_settings_disable_all": "Vai tiešām vēlaties atspējot visas pieteikšanās metodes? Pieteikšanās tiks pilnībā atspējota.",
"authentication_settings_reenable": "Lai atkārtoti iespējotu, izmantojiet <link>Servera Komandu</link>.", "authentication_settings_reenable": "Lai atkārtoti iespējotu, izmantojiet <link>Servera Komandu</link>.",
"background_task_job": "Fona Uzdevumi", "background_task_job": "Fona Uzdevumi",
"backup_settings_description": "Datubāzes dublēšanas iestatījumu pārvaldība",
"check_all": "Pārbaudīt Visu", "check_all": "Pārbaudīt Visu",
"cleared_jobs": "Notīrīti uzdevumi priekš: {job}", "cleared_jobs": "Notīrīti uzdevumi priekš: {job}",
"config_set_by_file": "Konfigurāciju pašlaik iestata konfigurācijas fails", "config_set_by_file": "Konfigurāciju pašlaik iestata konfigurācijas fails",
@@ -61,14 +63,14 @@
"image_thumbnail_title": "Sīktēlu iestatījumi", "image_thumbnail_title": "Sīktēlu iestatījumi",
"job_created": "Uzdevums izveidots", "job_created": "Uzdevums izveidots",
"job_settings": "Uzdevumu iestatījumi", "job_settings": "Uzdevumu iestatījumi",
"job_settings_description": "Pārvaldīt uzdevumu izpildes vienlaicīgumu", "job_settings_description": "Uzdevumu izpildes vienlaicīguma pārvaldība",
"job_status": "Uzdevumu statuss", "job_status": "Uzdevumu statuss",
"library_deleted": "Bibliotēka dzēsta", "library_deleted": "Bibliotēka dzēsta",
"library_scanning": "", "library_scanning": "",
"library_scanning_description": "", "library_scanning_description": "",
"library_scanning_enable_description": "", "library_scanning_enable_description": "",
"library_settings": "", "library_settings": "",
"library_settings_description": "", "library_settings_description": "Ārējo bibliotēku iestatījumu pārvaldība",
"library_tasks_description": "", "library_tasks_description": "",
"library_watching_enable_description": "", "library_watching_enable_description": "",
"library_watching_settings": "", "library_watching_settings": "",
@@ -95,28 +97,33 @@
"machine_learning_min_recognized_faces": "", "machine_learning_min_recognized_faces": "",
"machine_learning_min_recognized_faces_description": "", "machine_learning_min_recognized_faces_description": "",
"machine_learning_settings": "Mašīnmācīšanās iestatījumi", "machine_learning_settings": "Mašīnmācīšanās iestatījumi",
"machine_learning_settings_description": "", "machine_learning_settings_description": "Mašīnmācīšanās funkciju un iestatījumu pārvaldība",
"machine_learning_smart_search": "Viedā meklēšana", "machine_learning_smart_search": "Viedā meklēšana",
"machine_learning_smart_search_description": "", "machine_learning_smart_search_description": "",
"machine_learning_smart_search_enabled_description": "", "machine_learning_smart_search_enabled_description": "",
"machine_learning_url_description": "Mašīnmācīšanās servera URL", "machine_learning_url_description": "Mašīnmācīšanās servera URL",
"manage_log_settings": "", "manage_concurrency": "Vienlaicīgas darbības pārvaldība",
"manage_log_settings": "Žurnāla iestatījumu pārvaldība",
"map_dark_style": "", "map_dark_style": "",
"map_enable_description": "", "map_enable_description": "",
"map_gps_settings": "Kartes un GPS iestatījumi", "map_gps_settings": "Kartes un GPS iestatījumi",
"map_gps_settings_description": "Pārvaldīt karšu un GPS (apgrieztās ģeokodēšanas) iestatījumus", "map_gps_settings_description": "Karšu un GPS (apgrieztās ģeokodēšanas) iestatījumu pārvaldība",
"map_light_style": "", "map_light_style": "",
"map_manage_reverse_geocoding_settings": "<link>Reversās ģeokodēšanas</link> iestatījumu pārvaldība",
"map_reverse_geocoding": "", "map_reverse_geocoding": "",
"map_reverse_geocoding_enable_description": "", "map_reverse_geocoding_enable_description": "",
"map_reverse_geocoding_settings": "", "map_reverse_geocoding_settings": "",
"map_settings": "Karte", "map_settings": "Karte",
"map_settings_description": "", "map_settings_description": "Kartes iestatījumu pārvaldība",
"map_style_description": "", "map_style_description": "",
"metadata_extraction_job": "Metadatu iegūšana", "metadata_extraction_job": "Metadatu iegūšana",
"metadata_extraction_job_description": "", "metadata_extraction_job_description": "",
"metadata_settings": "Metadatu iestatījumi", "metadata_settings": "Metadatu iestatījumi",
"metadata_settings_description": "Metadatu iestatījumu pārvaldība",
"migration_job": "Migrācija", "migration_job": "Migrācija",
"migration_job_description": "", "migration_job_description": "",
"no_paths_added": "Nav pievienots neviens ceļš",
"no_pattern_added": "Nav pievienots neviens izslēgšanas šablons",
"note_cannot_be_changed_later": "PIEZĪME: Vēlāk to vairs nevar mainīt!", "note_cannot_be_changed_later": "PIEZĪME: Vēlāk to vairs nevar mainīt!",
"notification_email_from_address": "No adreses", "notification_email_from_address": "No adreses",
"notification_email_from_address_description": "Sūtītāja e-pasta adrese, piemēram: “Immich foto serveris <noreply@example.com>”", "notification_email_from_address_description": "Sūtītāja e-pasta adrese, piemēram: “Immich foto serveris <noreply@example.com>”",
@@ -133,7 +140,7 @@
"notification_email_username_description": "", "notification_email_username_description": "",
"notification_enable_email_notifications": "", "notification_enable_email_notifications": "",
"notification_settings": "Paziņojumu iestatījumi", "notification_settings": "Paziņojumu iestatījumi",
"notification_settings_description": "", "notification_settings_description": "Paziņojumu iestatījumu, tostarp e-pasta, pārvaldība",
"oauth_auto_launch": "", "oauth_auto_launch": "",
"oauth_auto_launch_description": "", "oauth_auto_launch_description": "",
"oauth_auto_register": "", "oauth_auto_register": "",
@@ -150,17 +157,17 @@
"oauth_profile_signing_algorithm_description": "Lietotāja profila parakstīšanai izmantotais algoritms.", "oauth_profile_signing_algorithm_description": "Lietotāja profila parakstīšanai izmantotais algoritms.",
"oauth_scope": "", "oauth_scope": "",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "", "oauth_settings_description": "OAuth pieteikšanās iestatījumu pārvaldība",
"oauth_signing_algorithm": "Parakstīšanas algoritms", "oauth_signing_algorithm": "Parakstīšanas algoritms",
"oauth_storage_label_claim": "", "oauth_storage_label_claim": "",
"oauth_storage_label_claim_description": "", "oauth_storage_label_claim_description": "",
"oauth_storage_quota_claim": "", "oauth_storage_quota_claim": "",
"oauth_storage_quota_claim_description": "", "oauth_storage_quota_claim_description": "",
"oauth_storage_quota_default": "", "oauth_storage_quota_default": "Noklusējuma krātuves kvota (GiB)",
"oauth_storage_quota_default_description": "", "oauth_storage_quota_default_description": "",
"password_enable_description": "Pieteikšanās ar e-pasta adresi un paroli", "password_enable_description": "Pieteikšanās ar e-pasta adresi un paroli",
"password_settings": "Pieteikšanās ar paroli", "password_settings": "Pieteikšanās ar paroli",
"password_settings_description": "Pārvaldīt pieteikšanās ar paroli iestatījumus", "password_settings_description": "Pieteikšanās ar paroli iestatījumu pārvaldība",
"person_cleanup_job": "Personu tīrīšana", "person_cleanup_job": "Personu tīrīšana",
"quota_size_gib": "Kvotas izmērs (GiB)", "quota_size_gib": "Kvotas izmērs (GiB)",
"registration": "Administratora reģistrācija", "registration": "Administratora reģistrācija",
@@ -171,23 +178,27 @@
"server_external_domain_settings": "", "server_external_domain_settings": "",
"server_external_domain_settings_description": "", "server_external_domain_settings_description": "",
"server_settings": "Servera iestatījumi", "server_settings": "Servera iestatījumi",
"server_settings_description": "Pārvaldīt servera iestatījumus", "server_settings_description": "Servera iestatījumu pārvaldība",
"server_welcome_message": "", "server_welcome_message": "",
"server_welcome_message_description": "", "server_welcome_message_description": "",
"sidecar_job_description": "", "sidecar_job_description": "",
"slideshow_duration_description": "", "slideshow_duration_description": "",
"smart_search_job_description": "", "smart_search_job_description": "",
"storage_template_date_time_sample": "Laika paraugs {date}",
"storage_template_enable_description": "", "storage_template_enable_description": "",
"storage_template_hash_verification_enabled": "", "storage_template_hash_verification_enabled": "",
"storage_template_hash_verification_enabled_description": "", "storage_template_hash_verification_enabled_description": "",
"storage_template_migration_job": "", "storage_template_migration": "Krātuves veidņu migrācija",
"storage_template_settings": "", "storage_template_migration_job": "Krātuves veidņu migrācijas uzdevums",
"storage_template_settings": "Krātuves veidne",
"storage_template_settings_description": "", "storage_template_settings_description": "",
"system_settings": "Sistēmas iestatījumi", "system_settings": "Sistēmas iestatījumi",
"template_email_settings_description": "Pielāgotu e-pasta paziņojumu veidņu pārvaldība",
"template_settings_description": "Pielāgotu paziņojumu veidņu pārvaldība",
"theme_custom_css_settings": "Pielāgots CSS", "theme_custom_css_settings": "Pielāgots CSS",
"theme_custom_css_settings_description": "", "theme_custom_css_settings_description": "",
"theme_settings": "", "theme_settings": "",
"theme_settings_description": "", "theme_settings_description": "Immich tīmekļa saskarnes pielāgojumu pārvaldība",
"thumbnail_generation_job_description": "", "thumbnail_generation_job_description": "",
"transcoding_acceleration_api": "", "transcoding_acceleration_api": "",
"transcoding_acceleration_api_description": "", "transcoding_acceleration_api_description": "",
@@ -246,14 +257,14 @@
"trash_number_of_days": "Dienu skaits", "trash_number_of_days": "Dienu skaits",
"trash_number_of_days_description": "", "trash_number_of_days_description": "",
"trash_settings": "", "trash_settings": "",
"trash_settings_description": "", "trash_settings_description": "Atkritnes iestatījumu pārvaldība",
"user_delete_delay_settings": "", "user_delete_delay_settings": "",
"user_delete_delay_settings_description": "", "user_delete_delay_settings_description": "",
"user_management": "Lietotāju pārvaldība", "user_management": "Lietotāju pārvaldība",
"user_password_has_been_reset": "Lietotāja parole ir atiestatīta:", "user_password_has_been_reset": "Lietotāja parole ir atiestatīta:",
"user_restore_description": "<b>{user}</b> konts tiks atjaunots.", "user_restore_description": "<b>{user}</b> konts tiks atjaunots.",
"user_settings": "", "user_settings": "",
"user_settings_description": "", "user_settings_description": "Lietotāju iestatījumu pārvaldība",
"version_check_enabled_description": "Ieslēgt versijas pārbaudi", "version_check_enabled_description": "Ieslēgt versijas pārbaudi",
"version_check_implications": "Versiju pārbaudes funkcija ir atkarīga no periodiskas saziņas ar github.com", "version_check_implications": "Versiju pārbaudes funkcija ir atkarīga no periodiskas saziņas ar github.com",
"version_check_settings": "Versijas pārbaude", "version_check_settings": "Versijas pārbaude",
@@ -306,6 +317,8 @@
"birthdate_set_description": "Dzimšanas datums tiek izmantots, lai aprēķinātu šīs personas vecumu fotogrāfijas uzņemšanas brīdī.", "birthdate_set_description": "Dzimšanas datums tiek izmantots, lai aprēķinātu šīs personas vecumu fotogrāfijas uzņemšanas brīdī.",
"blurred_background": "", "blurred_background": "",
"bugs_and_feature_requests": "Kļūdas un funkciju pieprasījumi", "bugs_and_feature_requests": "Kļūdas un funkciju pieprasījumi",
"build": "Būvējums",
"build_image": "Būvējuma attēls",
"camera": "", "camera": "",
"camera_brand": "", "camera_brand": "",
"camera_model": "", "camera_model": "",
@@ -398,6 +411,7 @@
"done": "Gatavs", "done": "Gatavs",
"download": "Lejupielādēt", "download": "Lejupielādēt",
"download_settings": "Lejupielāde", "download_settings": "Lejupielāde",
"download_settings_description": "Ar failu lejupielādi saistīto iestatījumu pārvaldība",
"downloading": "", "downloading": "",
"duplicates": "Dublikāti", "duplicates": "Dublikāti",
"duration": "", "duration": "",
@@ -490,6 +504,7 @@
"favorite_or_unfavorite_photo": "", "favorite_or_unfavorite_photo": "",
"favorites": "Izlase", "favorites": "Izlase",
"feature_photo_updated": "", "feature_photo_updated": "",
"features_setting_description": "Lietotnes funkciju pārvaldība",
"file_name": "", "file_name": "",
"file_name_or_extension": "", "file_name_or_extension": "",
"filename": "", "filename": "",
@@ -559,13 +574,13 @@
"loop_videos": "", "loop_videos": "",
"loop_videos_description": "Iespējot, lai automātiski videoklips tiktu cikliski palaists detaļu skatītājā.", "loop_videos_description": "Iespējot, lai automātiski videoklips tiktu cikliski palaists detaļu skatītājā.",
"make": "Firma", "make": "Firma",
"manage_shared_links": "Pārvaldīt Kopīgotās saites", "manage_shared_links": "Kopīgoto saišu pārvaldība",
"manage_sharing_with_partners": "", "manage_sharing_with_partners": "Koplietošanas ar partneriem pārvaldība",
"manage_the_app_settings": "", "manage_the_app_settings": "Lietotnes iestatījumu pārvaldība",
"manage_your_account": "", "manage_your_account": "Sava konta pārvaldība",
"manage_your_api_keys": "", "manage_your_api_keys": "API atslēgu pārvaldība",
"manage_your_devices": "", "manage_your_devices": "Pieslēgto ierīču pārvaldība",
"manage_your_oauth_connection": "", "manage_your_oauth_connection": "OAuth savienojumu pārvaldība",
"map": "Karte", "map": "Karte",
"map_marker_for_images": "Kartes marķieris attēliem, kas uzņemti {city}, {country}", "map_marker_for_images": "Kartes marķieris attēliem, kas uzņemti {city}, {country}",
"map_marker_with_image": "Kartes marķieris ar attēlu", "map_marker_with_image": "Kartes marķieris ar attēlu",
@@ -587,7 +602,7 @@
"model": "Modelis", "model": "Modelis",
"month": "Mēnesis", "month": "Mēnesis",
"more": "Vairāk", "more": "Vairāk",
"moved_to_trash": "", "moved_to_trash": "Pārvietots uz atkritni",
"my_albums": "Mani albumi", "my_albums": "Mani albumi",
"name": "Vārds", "name": "Vārds",
"name_or_nickname": "Vārds vai iesauka", "name_or_nickname": "Vārds vai iesauka",
@@ -619,7 +634,7 @@
"notes": "Piezīmes", "notes": "Piezīmes",
"notification_toggle_setting_description": "Ieslēgt e-pasta paziņojumus", "notification_toggle_setting_description": "Ieslēgt e-pasta paziņojumus",
"notifications": "Paziņojumi", "notifications": "Paziņojumi",
"notifications_setting_description": "", "notifications_setting_description": "Paziņojumu pārvaldība",
"oauth": "OAuth", "oauth": "OAuth",
"official_immich_resources": "Oficiālie Immich resursi", "official_immich_resources": "Oficiālie Immich resursi",
"offline": "Bezsaistē", "offline": "Bezsaistē",
@@ -689,6 +704,7 @@
"purchase_server_description_1": "Visam serverim", "purchase_server_description_1": "Visam serverim",
"purchase_server_description_2": "Atbalstītāja statuss", "purchase_server_description_2": "Atbalstītāja statuss",
"purchase_server_title": "Serveris", "purchase_server_title": "Serveris",
"purchase_settings_server_activated": "Servera produkta atslēgu pārvalda administrators",
"reaction_options": "", "reaction_options": "",
"read_changelog": "Lasīt izmaiņu sarakstu", "read_changelog": "Lasīt izmaiņu sarakstu",
"recent": "", "recent": "",
@@ -811,7 +827,7 @@
"sort_oldest": "Vecākā fotogrāfija", "sort_oldest": "Vecākā fotogrāfija",
"sort_recent": "Nesenākā fotogrāfija", "sort_recent": "Nesenākā fotogrāfija",
"sort_title": "Nosaukums", "sort_title": "Nosaukums",
"source": "Avots", "source": "Pirmkods",
"stack": "Apvienot kaudzē", "stack": "Apvienot kaudzē",
"stack_selected_photos": "", "stack_selected_photos": "",
"stacktrace": "", "stacktrace": "",
@@ -820,7 +836,7 @@
"status": "Statuss", "status": "Statuss",
"stop_motion_photo": "", "stop_motion_photo": "",
"stop_photo_sharing": "Beigt kopīgot jūsu fotogrāfijas?", "stop_photo_sharing": "Beigt kopīgot jūsu fotogrāfijas?",
"storage": "Uzglabāšanas vieta", "storage": "Vieta krātuvē",
"storage_label": "", "storage_label": "",
"storage_usage": "{used} no {available} izmantoti", "storage_usage": "{used} no {available} izmantoti",
"submit": "Iesniegt", "submit": "Iesniegt",
@@ -870,6 +886,7 @@
"usage": "Lietojums", "usage": "Lietojums",
"user": "Lietotājs", "user": "Lietotājs",
"user_id": "Lietotāja ID", "user_id": "Lietotāja ID",
"user_purchase_settings_description": "Pirkuma pārvaldība",
"user_usage_detail": "Informācija par lietotāju lietojumu", "user_usage_detail": "Informācija par lietotāju lietojumu",
"username": "Lietotājvārds", "username": "Lietotājvārds",
"users": "Lietotāji", "users": "Lietotāji",
@@ -879,6 +896,7 @@
"version": "Versija", "version": "Versija",
"version_announcement_message": "Sveiki! Ir pieejama jauna Immich versija. Lūdzu, veltiet laiku, lai izlasītu <link>laidiena piezīmes</link> un pārliecinātos, ka jūsu iestatījumi ir atjaunināti, lai novērstu jebkādu nepareizu konfigurāciju, jo īpaši, ja izmantojat WatchTower vai citu mehānismu, kas automātiski atjaunina jūsu Immich instanci.", "version_announcement_message": "Sveiki! Ir pieejama jauna Immich versija. Lūdzu, veltiet laiku, lai izlasītu <link>laidiena piezīmes</link> un pārliecinātos, ka jūsu iestatījumi ir atjaunināti, lai novērstu jebkādu nepareizu konfigurāciju, jo īpaši, ja izmantojat WatchTower vai citu mehānismu, kas automātiski atjaunina jūsu Immich instanci.",
"version_history": "Versiju vēsture", "version_history": "Versiju vēsture",
"version_history_item": "{version} uzstādīta {date}",
"video": "Videoklips", "video": "Videoklips",
"video_hover_setting_description": "", "video_hover_setting_description": "",
"videos": "Videoklipi", "videos": "Videoklipi",
+4
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Filen har blitt permanent slettet", "permanently_deleted_asset": "Filen har blitt permanent slettet",
"permanently_deleted_assets_count": "Permanent slett {count, plural, one {# asset} other {# assets}}", "permanently_deleted_assets_count": "Permanent slett {count, plural, one {# asset} other {# assets}}",
"person": "Person", "person": "Person",
"person_birthdate": "Født den {date}",
"person_hidden": "{name}{hidden, select, true { (skjult)} other {}}", "person_hidden": "{name}{hidden, select, true { (skjult)} other {}}",
"photo_shared_all_users": "Det ser ut som om du deler bildene med alle brukere eller det er ingen brukere å dele med.", "photo_shared_all_users": "Det ser ut som om du deler bildene med alle brukere eller det er ingen brukere å dele med.",
"photos": "Bilder", "photos": "Bilder",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Fjern fra album", "remove_from_album": "Fjern fra album",
"remove_from_favorites": "Fjern fra favoritter", "remove_from_favorites": "Fjern fra favoritter",
"remove_from_shared_link": "Fjern fra delt lenke", "remove_from_shared_link": "Fjern fra delt lenke",
"remove_memory": "Slett minne",
"remove_photo_from_memory": "Slett bilde fra dette minne",
"remove_url": "Fjern URL", "remove_url": "Fjern URL",
"remove_user": "Fjern bruker", "remove_user": "Fjern bruker",
"removed_api_key": "Fjernet API-nøkkel: {name}", "removed_api_key": "Fjernet API-nøkkel: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Søker lokaler...", "searching_locales": "Søker lokaler...",
"second": "Sekund", "second": "Sekund",
"see_all_people": "Vis alle mennesker", "see_all_people": "Vis alle mennesker",
"select": "Velg",
"select_album_cover": "Velg albumomslag", "select_album_cover": "Velg albumomslag",
"select_all": "Velg alle", "select_all": "Velg alle",
"select_all_duplicates": "Velg alle duplikater", "select_all_duplicates": "Velg alle duplikater",
+6 -2
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Asset permanent verwijderd", "permanently_deleted_asset": "Asset permanent verwijderd",
"permanently_deleted_assets_count": "{count, plural, one {# asset} other {# assets}} permanent verwijderd", "permanently_deleted_assets_count": "{count, plural, one {# asset} other {# assets}} permanent verwijderd",
"person": "Persoon", "person": "Persoon",
"person_birthdate": "Geboren op {date}",
"person_hidden": "{name}{hidden, select, true { (verborgen)} other {}}", "person_hidden": "{name}{hidden, select, true { (verborgen)} other {}}",
"photo_shared_all_users": "Het lijkt erop dat je foto's met alle gebruikers zijn gedeeld, of dat je geen gebruikers hebt om mee te delen.", "photo_shared_all_users": "Het lijkt erop dat je foto's met alle gebruikers zijn gedeeld, of dat je geen gebruikers hebt om mee te delen.",
"photos": "Foto's", "photos": "Foto's",
@@ -1078,14 +1079,16 @@
"remove_from_album": "Verwijder uit album", "remove_from_album": "Verwijder uit album",
"remove_from_favorites": "Verwijderen uit favorieten", "remove_from_favorites": "Verwijderen uit favorieten",
"remove_from_shared_link": "Verwijderen uit gedeelde link", "remove_from_shared_link": "Verwijderen uit gedeelde link",
"remove_memory": "Herinnering verwijderen",
"remove_photo_from_memory": "Foto uit deze herinnering verwijderen",
"remove_url": "Verwijder URL", "remove_url": "Verwijder URL",
"remove_user": "Gebruiker verwijderen", "remove_user": "Gebruiker verwijderen",
"removed_api_key": "API sleutel verwijderd: {name}", "removed_api_key": "API sleutel verwijderd: {name}",
"removed_from_archive": "Verwijderd uit archief", "removed_from_archive": "Verwijderd uit archief",
"removed_from_favorites": "Verwijderd uit favorieten", "removed_from_favorites": "Verwijderd uit favorieten",
"removed_from_favorites_count": "{count, plural, other {# verwijderd}} uit favorieten", "removed_from_favorites_count": "{count, plural, other {# verwijderd}} uit favorieten",
"removed_memory": "Geheugen verwijderd", "removed_memory": "Herinnering verwijderd",
"removed_photo_from_memory": "Foto verwijderd uit geheugen", "removed_photo_from_memory": "Foto verwijderd uit herinnering",
"removed_tagged_assets": "Tag verwijderd van {count, plural, one {# asset} other {# assets}}", "removed_tagged_assets": "Tag verwijderd van {count, plural, one {# asset} other {# assets}}",
"rename": "Hernoemen", "rename": "Hernoemen",
"repair": "Repareren", "repair": "Repareren",
@@ -1148,6 +1151,7 @@
"searching_locales": "Zoeken naar landinstellingen...", "searching_locales": "Zoeken naar landinstellingen...",
"second": "Seconde", "second": "Seconde",
"see_all_people": "Bekijk alle mensen", "see_all_people": "Bekijk alle mensen",
"select": "Selecteer",
"select_album_cover": "Selecteer album cover", "select_album_cover": "Selecteer album cover",
"select_all": "Alles selecteren", "select_all": "Alles selecteren",
"select_all_duplicates": "Selecteer alle duplicaten", "select_all_duplicates": "Selecteer alle duplicaten",
+1
View File
@@ -0,0 +1 @@
{}
+6 -4
View File
@@ -243,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "Włącza weryfikację sumy kontrolnej. Nie wyłączaj tej opcji, jeśli nie jesteś pewien konsekwencji", "storage_template_hash_verification_enabled_description": "Włącza weryfikację sumy kontrolnej. Nie wyłączaj tej opcji, jeśli nie jesteś pewien konsekwencji",
"storage_template_migration": "Migracja szablonu magazynu", "storage_template_migration": "Migracja szablonu magazynu",
"storage_template_migration_description": "Zastosuj aktualny szablon <link>{template}</link> do wcześniej przesłanych zasobów", "storage_template_migration_description": "Zastosuj aktualny szablon <link>{template}</link> do wcześniej przesłanych zasobów",
"storage_template_migration_info": "Zmiany w szablonie zostaną zastosowane tylko do nowych zasobów. Aby wstecznie zastosować szablon do wcześniej przesłanych zasobów, uruchom zadanie <link>{job}</link>.", "storage_template_migration_info": "Szablon Magazynu przekonwertuje wszystkie rozszerzenia na pisane małą literą. Zmiany w szablonie zostaną zastosowane tylko do nowych zasobów. Aby wstecznie zastosować szablon do wcześniej przesłanych zasobów, uruchom zadanie <link>{job}</link>.",
"storage_template_migration_job": "Zadanie migracji szablonu przechowywania", "storage_template_migration_job": "Zadanie migracji szablonu przechowywania",
"storage_template_more_details": "Aby uzyskać więcej szczegółów na temat tej funkcji, odwiedź <template-link>Szablon Przechowywania</template-link> oraz jego <implications-link>implikacje</implications-link>", "storage_template_more_details": "Aby uzyskać więcej szczegółów na temat tej funkcji, odwiedź <template-link>Szablon Przechowywania</template-link> oraz jego <implications-link>implikacje</implications-link>",
"storage_template_onboarding_description": "Po włączeniu tej funkcji pliki będą organizowane automatycznie na podstawie szablonu zdefiniowanego przez użytkownika. Obecnie domyślnie wyłączona przez problemy ze stabilnością. Więcej informacji znajdziesz w <link>dokumentacji</link>.", "storage_template_onboarding_description": "Po włączeniu tej funkcji pliki będą organizowane automatycznie na podstawie szablonu zdefiniowanego przez użytkownika. Obecnie domyślnie wyłączona przez problemy ze stabilnością. Więcej informacji znajdziesz w <link>dokumentacji</link>.",
@@ -829,7 +829,7 @@
"language": "Język", "language": "Język",
"language_setting_description": "Wybierz swój preferowany język", "language_setting_description": "Wybierz swój preferowany język",
"last_seen": "Ostatnio widziane", "last_seen": "Ostatnio widziane",
"latest_version": "Ostatnia Wersja", "latest_version": "Najnowsza Wersja",
"latitude": "Szerokość geograficzna", "latitude": "Szerokość geograficzna",
"leave": "Opuść", "leave": "Opuść",
"lens_model": "Model obiektywu", "lens_model": "Model obiektywu",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Pomyślnie trwale usunięto zasób", "permanently_deleted_asset": "Pomyślnie trwale usunięto zasób",
"permanently_deleted_assets_count": "Trwale usunięto {count, plural, one {# zasób} other {# zasobów}}", "permanently_deleted_assets_count": "Trwale usunięto {count, plural, one {# zasób} other {# zasobów}}",
"person": "Osoba", "person": "Osoba",
"person_birthdate": "Urodzony {date}",
"person_hidden": "{name}{hidden, select, true { (ukryty)} other {}}", "person_hidden": "{name}{hidden, select, true { (ukryty)} other {}}",
"photo_shared_all_users": "Wygląda na to, że udostępniłeś swoje zdjęcia wszystkim użytkownikom lub nie masz żadnego użytkownika, z którym można by było je udostępnić.", "photo_shared_all_users": "Wygląda na to, że udostępniłeś swoje zdjęcia wszystkim użytkownikom lub nie masz żadnego użytkownika, z którym można by było je udostępnić.",
"photos": "Zdjęcia", "photos": "Zdjęcia",
@@ -1148,6 +1149,7 @@
"searching_locales": "Wyszukaj region...", "searching_locales": "Wyszukaj region...",
"second": "Sekunda", "second": "Sekunda",
"see_all_people": "Zobacz wszystkie osoby", "see_all_people": "Zobacz wszystkie osoby",
"select": "Wybierz",
"select_album_cover": "Wybierz okładkę albumu", "select_album_cover": "Wybierz okładkę albumu",
"select_all": "Zaznacz wszystko", "select_all": "Zaznacz wszystko",
"select_all_duplicates": "Wybierz wszystkie duplikaty", "select_all_duplicates": "Wybierz wszystkie duplikaty",
@@ -1318,13 +1320,13 @@
"updated_password": "Pomyślnie zaktualizowano hasło", "updated_password": "Pomyślnie zaktualizowano hasło",
"upload": "Prześlij", "upload": "Prześlij",
"upload_concurrency": "Współbieżność wysyłania", "upload_concurrency": "Współbieżność wysyłania",
"upload_errors": "Przesyłanie zakończone z {count, plural, one {# błąd} other {# błędy}}. Odśwież stronę, aby zobaczyć nowe przesłane zasoby.", "upload_errors": "Przesyłanie zakończone z {count, plural, one {# błąd} other {# błędy}}. Odśwież stronę, aby zobaczyć nowo przesłane zasoby.",
"upload_progress": "Pozostałe {remaining, number} - Przetworzone {processed, number}/{total, number}", "upload_progress": "Pozostałe {remaining, number} - Przetworzone {processed, number}/{total, number}",
"upload_skipped_duplicates": "Pominięte {count, plural, one {# zduplikowany zasób} other {# zduplikowane zasoby}}", "upload_skipped_duplicates": "Pominięte {count, plural, one {# zduplikowany zasób} other {# zduplikowane zasoby}}",
"upload_status_duplicates": "Duplikaty", "upload_status_duplicates": "Duplikaty",
"upload_status_errors": "Błędy", "upload_status_errors": "Błędy",
"upload_status_uploaded": "Przesłano", "upload_status_uploaded": "Przesłano",
"upload_success": "Przesyłanie powiodło się, odśwież stronę, aby zobaczyć nowe przesłane zasoby.", "upload_success": "Przesyłanie powiodło się, odśwież stronę, aby zobaczyć nowo przesłane zasoby.",
"url": "URL", "url": "URL",
"usage": "Użycie", "usage": "Użycie",
"use_custom_date_range": "Zamiast tego użyj niestandardowego zakresu dat", "use_custom_date_range": "Zamiast tego użyj niestandardowego zakresu dat",
+6 -2
View File
@@ -302,7 +302,7 @@
"transcoding_max_b_frames": "Máximo de quadros B", "transcoding_max_b_frames": "Máximo de quadros B",
"transcoding_max_b_frames_description": "Valores mais altos melhoram a eficiência da compressão, mas tornam a codificação mais lenta. Pode não ser compatível com aceleração de hardware em dispositivos mais antigos. 0 desativa os quadros B, enquanto -1 define esse valor automaticamente.", "transcoding_max_b_frames_description": "Valores mais altos melhoram a eficiência da compressão, mas tornam a codificação mais lenta. Pode não ser compatível com aceleração de hardware em dispositivos mais antigos. 0 desativa os quadros B, enquanto -1 define esse valor automaticamente.",
"transcoding_max_bitrate": "Taxa de bits máxima", "transcoding_max_bitrate": "Taxa de bits máxima",
"transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos ficheiros mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2.600k para VP9 ou HEVC, ou 4.500k para H.264. Desativado se definido como 0.", "transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos ficheiros mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2600 kbit/s para VP9 ou HEVC, ou 4500 kbit/s para H.264. Desativado se definido como 0.",
"transcoding_max_keyframe_interval": "Intervalo máximo de quadro-chave", "transcoding_max_keyframe_interval": "Intervalo máximo de quadro-chave",
"transcoding_max_keyframe_interval_description": "Define a distância máxima do quadro entre os quadros-chave. Valores mais baixos pioram a eficiência da compressão, mas melhoram os tempos de procura e podem melhorar a qualidade em cenas com movimento rápido. 0 define esse valor automaticamente.", "transcoding_max_keyframe_interval_description": "Define a distância máxima do quadro entre os quadros-chave. Valores mais baixos pioram a eficiência da compressão, mas melhoram os tempos de procura e podem melhorar a qualidade em cenas com movimento rápido. 0 define esse valor automaticamente.",
"transcoding_optimal_description": "Vídeos com resolução superior à desejada ou num formato não aceite", "transcoding_optimal_description": "Vídeos com resolução superior à desejada ou num formato não aceite",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Ficheiro eliminado permanentemente", "permanently_deleted_asset": "Ficheiro eliminado permanentemente",
"permanently_deleted_assets_count": "{count, plural, one {# Ficheiro eliminado} other {# Ficheiros eliminados}} permanentemente", "permanently_deleted_assets_count": "{count, plural, one {# Ficheiro eliminado} other {# Ficheiros eliminados}} permanentemente",
"person": "Pessoa", "person": "Pessoa",
"person_birthdate": "Nasceu a {date}",
"person_hidden": "{name}{hidden, select, true { (oculto)} other {}}", "person_hidden": "{name}{hidden, select, true { (oculto)} other {}}",
"photo_shared_all_users": "Parece que partilhou as suas fotos com todos os utilizadores ou não tem nenhum utilizador para partilhar.", "photo_shared_all_users": "Parece que partilhou as suas fotos com todos os utilizadores ou não tem nenhum utilizador para partilhar.",
"photos": "Fotos", "photos": "Fotos",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Remover do álbum", "remove_from_album": "Remover do álbum",
"remove_from_favorites": "Remover dos favoritos", "remove_from_favorites": "Remover dos favoritos",
"remove_from_shared_link": "Remover do link partilhado", "remove_from_shared_link": "Remover do link partilhado",
"remove_memory": "Remover memória",
"remove_photo_from_memory": "Remover foto desta memória",
"remove_url": "Remover URL", "remove_url": "Remover URL",
"remove_user": "Remover utilizador", "remove_user": "Remover utilizador",
"removed_api_key": "Foi removida a Chave de API: {name}", "removed_api_key": "Foi removida a Chave de API: {name}",
@@ -1094,7 +1097,7 @@
"repository": "Repositório", "repository": "Repositório",
"require_password": "Proteger com palavra-passe", "require_password": "Proteger com palavra-passe",
"require_user_to_change_password_on_first_login": "Obrigar utilizador a alterar a palavra-passe após o primeiro início de sessão", "require_user_to_change_password_on_first_login": "Obrigar utilizador a alterar a palavra-passe após o primeiro início de sessão",
"rescan": "Reescanear", "rescan": "Reanalisar",
"reset": "Redefinir", "reset": "Redefinir",
"reset_password": "Redefinir palavra-passe", "reset_password": "Redefinir palavra-passe",
"reset_people_visibility": "Redefinir pessoas ocultas", "reset_people_visibility": "Redefinir pessoas ocultas",
@@ -1148,6 +1151,7 @@
"searching_locales": "A pesquisar Lugares....", "searching_locales": "A pesquisar Lugares....",
"second": "Segundo", "second": "Segundo",
"see_all_people": "Ver todas as pessoas", "see_all_people": "Ver todas as pessoas",
"select": "Selecionar",
"select_album_cover": "Escolher capa do álbum", "select_album_cover": "Escolher capa do álbum",
"select_all": "Selecionar todos", "select_all": "Selecionar todos",
"select_all_duplicates": "Selecionar todos os itens duplicados", "select_all_duplicates": "Selecionar todos os itens duplicados",
+24 -20
View File
@@ -252,7 +252,7 @@
"storage_template_settings_description": "Gerencie a estrutura de pasta e o nome do arquivo carregado", "storage_template_settings_description": "Gerencie a estrutura de pasta e o nome do arquivo carregado",
"storage_template_user_label": "<code>{label}</code> é o Rótulo de Armazenamento do usuário", "storage_template_user_label": "<code>{label}</code> é o Rótulo de Armazenamento do usuário",
"system_settings": "Configurações do Sistema", "system_settings": "Configurações do Sistema",
"tag_cleanup_job": "Limpeza de tags", "tag_cleanup_job": "Limpeza de marcadores",
"template_email_available_tags": "Você pode usar as seguintes variáveis no modelo: {tags}", "template_email_available_tags": "Você pode usar as seguintes variáveis no modelo: {tags}",
"template_email_if_empty": "Se o modelo estiver em branco, o modelo de e-mail padrão será usado.", "template_email_if_empty": "Se o modelo estiver em branco, o modelo de e-mail padrão será usado.",
"template_email_invite_album": "Modelo do e-mail de convite para álbum", "template_email_invite_album": "Modelo do e-mail de convite para álbum",
@@ -302,7 +302,7 @@
"transcoding_max_b_frames": "Máximo de quadros B", "transcoding_max_b_frames": "Máximo de quadros B",
"transcoding_max_b_frames_description": "Valores mais altos melhoram a eficiência da compactação, mas retardam a codificação. Pode não ser compatível com aceleração de hardware em dispositivos mais antigos. 0 desativa os quadros B, enquanto -1 define esse valor automaticamente.", "transcoding_max_b_frames_description": "Valores mais altos melhoram a eficiência da compactação, mas retardam a codificação. Pode não ser compatível com aceleração de hardware em dispositivos mais antigos. 0 desativa os quadros B, enquanto -1 define esse valor automaticamente.",
"transcoding_max_bitrate": "Taxa de bits máxima", "transcoding_max_bitrate": "Taxa de bits máxima",
"transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos arquivos mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2.600k para VP9 ou HEVC, ou 4.500k para H.264. Desativado se definido como 0.", "transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos arquivos mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2.600 kbit/s para VP9 ou HEVC, ou 4.500 kbit/s para H.264. Desativado se definido como 0.",
"transcoding_max_keyframe_interval": "Intervalo máximo de quadro-chave", "transcoding_max_keyframe_interval": "Intervalo máximo de quadro-chave",
"transcoding_max_keyframe_interval_description": "Define a distância máxima do quadro entre os quadros-chave. Valores mais baixos pioram a eficiência da compressão, mas melhoram os tempos de busca e podem melhorar a qualidade em cenas com movimento rápido. 0 define esse valor automaticamente.", "transcoding_max_keyframe_interval_description": "Define a distância máxima do quadro entre os quadros-chave. Valores mais baixos pioram a eficiência da compressão, mas melhoram os tempos de busca e podem melhorar a qualidade em cenas com movimento rápido. 0 define esse valor automaticamente.",
"transcoding_optimal_description": "Vídeos com resolução superior à desejada ou em formato não aceito", "transcoding_optimal_description": "Vídeos com resolução superior à desejada ou em formato não aceito",
@@ -513,8 +513,8 @@
"create_new_person": "Criar nova pessoa", "create_new_person": "Criar nova pessoa",
"create_new_person_hint": "Atribuir arquivos selecionados a uma nova pessoa", "create_new_person_hint": "Atribuir arquivos selecionados a uma nova pessoa",
"create_new_user": "Criar novo usuário", "create_new_user": "Criar novo usuário",
"create_tag": "Criar tag", "create_tag": "Criar marcador",
"create_tag_description": "Crie uma nova tag. Para tags compostas, digite o caminho completo da tag, inclusive as barras.", "create_tag_description": "Cria um novo marcador. Para marcadores multi nível, digite o caminho completo do marcador, inclusive as barras.",
"create_user": "Criar usuário", "create_user": "Criar usuário",
"created": "Criado", "created": "Criado",
"current_device": "Dispositivo atual", "current_device": "Dispositivo atual",
@@ -544,8 +544,8 @@
"delete_link": "Excluir link", "delete_link": "Excluir link",
"delete_others": "Excluir restante", "delete_others": "Excluir restante",
"delete_shared_link": "Excluir link de compartilhamento", "delete_shared_link": "Excluir link de compartilhamento",
"delete_tag": "Remover tag", "delete_tag": "Remover marcador",
"delete_tag_confirmation_prompt": "Tem certeza que deseja excluir a tag {tagName} ?", "delete_tag_confirmation_prompt": "Tem certeza que deseja excluir o marcador {tagName} ?",
"delete_user": "Excluir usuário", "delete_user": "Excluir usuário",
"deleted_shared_link": "Link de compartilhamento excluído", "deleted_shared_link": "Link de compartilhamento excluído",
"deletes_missing_assets": "Excluir arquivos não encontrados", "deletes_missing_assets": "Excluir arquivos não encontrados",
@@ -590,7 +590,7 @@
"edit_location": "Editar Localização", "edit_location": "Editar Localização",
"edit_name": "Editar nome", "edit_name": "Editar nome",
"edit_people": "Editar pessoas", "edit_people": "Editar pessoas",
"edit_tag": "Editar tag", "edit_tag": "Editar marcador",
"edit_title": "Editar Título", "edit_title": "Editar Título",
"edit_user": "Editar usuário", "edit_user": "Editar usuário",
"edited": "Editado", "edited": "Editado",
@@ -778,7 +778,7 @@
"group_owner": "Agrupar por dono", "group_owner": "Agrupar por dono",
"group_places_by": "Agrupar lugares por...", "group_places_by": "Agrupar lugares por...",
"group_year": "Agrupar por ano", "group_year": "Agrupar por ano",
"has_quota": "Há cota", "has_quota": "Cota",
"hi_user": "Olá {name} ({email})", "hi_user": "Olá {name} ({email})",
"hide_all_people": "Esconder todas as pessoas", "hide_all_people": "Esconder todas as pessoas",
"hide_gallery": "Ocultar galeria", "hide_gallery": "Ocultar galeria",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Arquivo deletado permanentemente", "permanently_deleted_asset": "Arquivo deletado permanentemente",
"permanently_deleted_assets_count": "{count, plural, one {# arquivo permanentemente excluído} other {# arquivos permanentemente excluídos}}", "permanently_deleted_assets_count": "{count, plural, one {# arquivo permanentemente excluído} other {# arquivos permanentemente excluídos}}",
"person": "Pessoa", "person": "Pessoa",
"person_birthdate": "Nasceu em {date}",
"person_hidden": "{name}{hidden, select, true { (oculto)} other {}}", "person_hidden": "{name}{hidden, select, true { (oculto)} other {}}",
"photo_shared_all_users": "Parece que você compartilhou suas fotos com todos os usuários ou não tem nenhum usuário com quem compartilhar.", "photo_shared_all_users": "Parece que você compartilhou suas fotos com todos os usuários ou não tem nenhum usuário com quem compartilhar.",
"photos": "Fotos", "photos": "Fotos",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Remover do álbum", "remove_from_album": "Remover do álbum",
"remove_from_favorites": "Remover dos favoritos", "remove_from_favorites": "Remover dos favoritos",
"remove_from_shared_link": "Remover do link compartilhado", "remove_from_shared_link": "Remover do link compartilhado",
"remove_memory": "Remover memória",
"remove_photo_from_memory": "Remover foto desta memória",
"remove_url": "Remover URL", "remove_url": "Remover URL",
"remove_user": "Remover usuário", "remove_user": "Remover usuário",
"removed_api_key": "Removido a Chave de API: {name}", "removed_api_key": "Removido a Chave de API: {name}",
@@ -1086,7 +1089,7 @@
"removed_from_favorites_count": "{count, plural, one {# Removido} other {# Removidos}} dos favoritos", "removed_from_favorites_count": "{count, plural, one {# Removido} other {# Removidos}} dos favoritos",
"removed_memory": "Memória removida", "removed_memory": "Memória removida",
"removed_photo_from_memory": "Foto removida da memória", "removed_photo_from_memory": "Foto removida da memória",
"removed_tagged_assets": "Tag removida de {count, plural, one {# arquivo} other {# arquivos}}", "removed_tagged_assets": "Marcador removido de {count, plural, one {# arquivo} other {# arquivos}}",
"rename": "Renomear", "rename": "Renomear",
"repair": "Reparar", "repair": "Reparar",
"repair_no_results_message": "Arquivos perdidos ou não rastreados aparecem aqui", "repair_no_results_message": "Arquivos perdidos ou não rastreados aparecem aqui",
@@ -1117,7 +1120,7 @@
"saved_settings": "Configurações salvas", "saved_settings": "Configurações salvas",
"say_something": "Diga algo", "say_something": "Diga algo",
"scan_all_libraries": "Escanear Todas Bibliotecas", "scan_all_libraries": "Escanear Todas Bibliotecas",
"scan_library": "Analisar", "scan_library": "Escanear",
"scan_settings": "Opções de escanear", "scan_settings": "Opções de escanear",
"scanning_for_album": "Escaneando por álbum...", "scanning_for_album": "Escaneando por álbum...",
"search": "Pesquisar", "search": "Pesquisar",
@@ -1141,13 +1144,14 @@
"search_rating": "Pesquisar por classificação...", "search_rating": "Pesquisar por classificação...",
"search_settings": "Configurações de pesquisa", "search_settings": "Configurações de pesquisa",
"search_state": "Pesquisar estado...", "search_state": "Pesquisar estado...",
"search_tags": "Procurar tags...", "search_tags": "Procurar marcadores...",
"search_timezone": "Pesquisar fuso horário...", "search_timezone": "Pesquisar fuso horário...",
"search_type": "Pesquisar tipo", "search_type": "Pesquisar tipo",
"search_your_photos": "Pesquisar fotos", "search_your_photos": "Pesquisar fotos",
"searching_locales": "Pesquisar Lugares....", "searching_locales": "Pesquisar Lugares....",
"second": "Segundo", "second": "Segundo",
"see_all_people": "Ver todas as pessoas", "see_all_people": "Ver todas as pessoas",
"select": "Selecionar",
"select_album_cover": "Escolher capa do álbum", "select_album_cover": "Escolher capa do álbum",
"select_all": "Selecionar todos", "select_all": "Selecionar todos",
"select_all_duplicates": "Selecionar todas as duplicatas", "select_all_duplicates": "Selecionar todas as duplicatas",
@@ -1220,7 +1224,7 @@
"size": "Tamanho", "size": "Tamanho",
"skip_to_content": "Pular para o conteúdo", "skip_to_content": "Pular para o conteúdo",
"skip_to_folders": "Ir para pastas", "skip_to_folders": "Ir para pastas",
"skip_to_tags": "Ir para as tags", "skip_to_tags": "Ir para os marcadores",
"slideshow": "Apresentação", "slideshow": "Apresentação",
"slideshow_settings": "Opções de apresentação", "slideshow_settings": "Opções de apresentação",
"sort_albums_by": "Ordenar álbuns por...", "sort_albums_by": "Ordenar álbuns por...",
@@ -1257,15 +1261,15 @@
"support_third_party_description": "Sua instalação do Immich é fornecida por terceiros. É possível que problemas sejam causados por eles, por isso, se tiver problemas, procure primeiro ajuda com eles utilizando os links abaixo.", "support_third_party_description": "Sua instalação do Immich é fornecida por terceiros. É possível que problemas sejam causados por eles, por isso, se tiver problemas, procure primeiro ajuda com eles utilizando os links abaixo.",
"swap_merge_direction": "Alternar direção da mesclagem", "swap_merge_direction": "Alternar direção da mesclagem",
"sync": "Sincronizar", "sync": "Sincronizar",
"tag": "Tag", "tag": "Marcador",
"tag_assets": "Marcar com tag", "tag_assets": "Marcar arquivos",
"tag_created": "Tag foi criada: {tag}", "tag_created": "Marcador criado: {tag}",
"tag_feature_description": "Visualizar fotos e videos agrupados pelo tópico da tag", "tag_feature_description": "Visualizar fotos e videos agrupados pelo tópico do marcador",
"tag_not_found_question": "Não consegue encontrar a tag? <link>Crie uma tag nova aqui.</link>", "tag_not_found_question": "Não consegue encontrar o marcador? <link>Crie uma novo aqui.</link>",
"tag_people": "Marcar pessoas", "tag_people": "Marcar pessoas",
"tag_updated": "Tag foi atualizada: {tag}", "tag_updated": "Marcador foi atualizado: {tag}",
"tagged_assets": "{count, plural, one {# arquivo marcado} other {# arquivos marcados}} com a tag", "tagged_assets": "{count, plural, one {# arquivo marcado} other {# arquivos marcados}}",
"tags": "Tags", "tags": "Marcadores",
"template": "Modelo", "template": "Modelo",
"theme": "Tema", "theme": "Tema",
"theme_selection": "Selecionar tema", "theme_selection": "Selecionar tema",
+5 -2
View File
@@ -1079,14 +1079,16 @@
"remove_from_album": "Удалить из альбома", "remove_from_album": "Удалить из альбома",
"remove_from_favorites": "Удалить из избранного", "remove_from_favorites": "Удалить из избранного",
"remove_from_shared_link": "Удалить из публичной ссылки", "remove_from_shared_link": "Удалить из публичной ссылки",
"remove_memory": "Удалить воспоминание",
"remove_photo_from_memory": "Удалить фото из воспоминания",
"remove_url": "Удалить URL", "remove_url": "Удалить URL",
"remove_user": "Удалить пользователя", "remove_user": "Удалить пользователя",
"removed_api_key": "Удален ключ API: {name}", "removed_api_key": "Удален ключ API: {name}",
"removed_from_archive": "Удален из архива", "removed_from_archive": "Удален из архива",
"removed_from_favorites": "Удалено из избранного", "removed_from_favorites": "Удалено из избранного",
"removed_from_favorites_count": "{count, plural, other {Удалено #}} из избранного", "removed_from_favorites_count": "{count, plural, other {Удалено #}} из избранного",
"removed_memory": "Удалить воспоминание", "removed_memory": "Воспоминание удалено",
"removed_photo_from_memory": "Удалить фото из воспоминания", "removed_photo_from_memory": "Фото удалено из воспоминания",
"removed_tagged_assets": "Тег для {count, plural, one {# объекта} other {# объектов}} удален", "removed_tagged_assets": "Тег для {count, plural, one {# объекта} other {# объектов}} удален",
"rename": "Переименовать", "rename": "Переименовать",
"repair": "Ремонт", "repair": "Ремонт",
@@ -1149,6 +1151,7 @@
"searching_locales": "Идет поиск переводов...", "searching_locales": "Идет поиск переводов...",
"second": "Секунда", "second": "Секунда",
"see_all_people": "Посмотреть всех людей", "see_all_people": "Посмотреть всех людей",
"select": "Выбрать",
"select_album_cover": "Выбрать обложку альбома", "select_album_cover": "Выбрать обложку альбома",
"select_all": "Выбрать все", "select_all": "Выбрать все",
"select_all_duplicates": "Выбрать все дубликаты", "select_all_duplicates": "Выбрать все дубликаты",
+5 -1
View File
@@ -243,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "Povolí overenie hash, nezakazujte to, pokiaľ si nie ste istí dôsledkami", "storage_template_hash_verification_enabled_description": "Povolí overenie hash, nezakazujte to, pokiaľ si nie ste istí dôsledkami",
"storage_template_migration": "Migrácia šablóny úložiska", "storage_template_migration": "Migrácia šablóny úložiska",
"storage_template_migration_description": "Použite aktuálnu <link>{template}</link> na predtým nahrané médiá", "storage_template_migration_description": "Použite aktuálnu <link>{template}</link> na predtým nahrané médiá",
"storage_template_migration_info": "Zmeny šablón sa budú vzťahovať iba na nové diela. Ak chcete šablónu spätne použiť na predtým nahrané médiá, spustite <link>{job}</link>.", "storage_template_migration_info": "Šablóna úložiska skonvertuje všetky prípony na malé písmená. Zmeny šablón sa budú vzťahovať iba na nové diela. Ak chcete šablónu spätne použiť na predtým nahrané médiá, spustite <link>{job}</link>.",
"storage_template_migration_job": "Úloha migrácie šablóny úložiska", "storage_template_migration_job": "Úloha migrácie šablóny úložiska",
"storage_template_more_details": "Ďalšie podrobnosti o tejto funkcii nájdete v <template-link>Šablóna úložiska</template-link> a jej <implications-link>dôsledky</implications-link>", "storage_template_more_details": "Ďalšie podrobnosti o tejto funkcii nájdete v <template-link>Šablóna úložiska</template-link> a jej <implications-link>dôsledky</implications-link>",
"storage_template_onboarding_description": "Keď je táto funkcia povolená, automaticky usporiada súbory na základe šablóny definovanej používateľom. Kvôli problémom so stabilitou bola funkcia predvolene vypnutá. Viac informácií nájdete v <link>dokumentácii</link>.", "storage_template_onboarding_description": "Keď je táto funkcia povolená, automaticky usporiada súbory na základe šablóny definovanej používateľom. Kvôli problémom so stabilitou bola funkcia predvolene vypnutá. Viac informácií nájdete v <link>dokumentácii</link>.",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Navždy odstránená položka", "permanently_deleted_asset": "Navždy odstránená položka",
"permanently_deleted_assets_count": "Navždy {count, plural, one {odstránená # položka} other {odstránené # položky}}", "permanently_deleted_assets_count": "Navždy {count, plural, one {odstránená # položka} other {odstránené # položky}}",
"person": "Osoba", "person": "Osoba",
"person_birthdate": "Narodený dňa {date}",
"person_hidden": "{name}{hidden, select, true { (skryté)} other {}}", "person_hidden": "{name}{hidden, select, true { (skryté)} other {}}",
"photo_shared_all_users": "Vyzerá, že zdieľate svoje fotky so všetkými používateľmi alebo nemáte žiadnych používateľov.", "photo_shared_all_users": "Vyzerá, že zdieľate svoje fotky so všetkými používateľmi alebo nemáte žiadnych používateľov.",
"photos": "Fotografie", "photos": "Fotografie",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Odstrániť z albumu", "remove_from_album": "Odstrániť z albumu",
"remove_from_favorites": "Odstrániť z obľúbených", "remove_from_favorites": "Odstrániť z obľúbených",
"remove_from_shared_link": "Odstrániť zo zdieľaného odkazu", "remove_from_shared_link": "Odstrániť zo zdieľaného odkazu",
"remove_memory": "Odstrániť spomienku",
"remove_photo_from_memory": "Odstrániť fotografiu z tejto spomienky",
"remove_url": "Odstrániť URL", "remove_url": "Odstrániť URL",
"remove_user": "Odstrániť používateľa", "remove_user": "Odstrániť používateľa",
"removed_api_key": "Odstrániť API kľúč: {name}", "removed_api_key": "Odstrániť API kľúč: {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Hľadám lokality...", "searching_locales": "Hľadám lokality...",
"second": "Sekundy", "second": "Sekundy",
"see_all_people": "Pozrieť všetky osoby", "see_all_people": "Pozrieť všetky osoby",
"select": "Vybrať",
"select_album_cover": "Vyberte obal albumu", "select_album_cover": "Vyberte obal albumu",
"select_all": "Vybrať všetko", "select_all": "Vybrať všetko",
"select_all_duplicates": "Vybrať všetky duplikáty", "select_all_duplicates": "Vybrať všetky duplikáty",
+3
View File
@@ -1079,6 +1079,8 @@
"remove_from_album": "Odstrani iz albuma", "remove_from_album": "Odstrani iz albuma",
"remove_from_favorites": "Odstrani iz priljubljenih", "remove_from_favorites": "Odstrani iz priljubljenih",
"remove_from_shared_link": "Odstrani iz skupne povezave", "remove_from_shared_link": "Odstrani iz skupne povezave",
"remove_memory": "Odstrani spomin",
"remove_photo_from_memory": "Odstrani fotografijo iz tega spomina",
"remove_url": "Odstrani URL", "remove_url": "Odstrani URL",
"remove_user": "Odstrani uporabnika", "remove_user": "Odstrani uporabnika",
"removed_api_key": "Odstranjen ključ API-ja: {name}", "removed_api_key": "Odstranjen ključ API-ja: {name}",
@@ -1149,6 +1151,7 @@
"searching_locales": "Iskanje krajev...", "searching_locales": "Iskanje krajev...",
"second": "Sekunda", "second": "Sekunda",
"see_all_people": "Oglejte si vse ljudi", "see_all_people": "Oglejte si vse ljudi",
"select": "Izberi",
"select_album_cover": "Izberi naslovnico albuma", "select_album_cover": "Izberi naslovnico albuma",
"select_all": "Izberi vse", "select_all": "Izberi vse",
"select_all_duplicates": "Izberi vse dvojnike", "select_all_duplicates": "Izberi vse dvojnike",
+1
View File
@@ -0,0 +1 @@
{}
+5 -1
View File
@@ -302,7 +302,7 @@
"transcoding_max_b_frames": "Максимални Б-кадри", "transcoding_max_b_frames": "Максимални Б-кадри",
"transcoding_max_b_frames_description": "Више вредности побољшавају ефикасност компресије, али успоравају кодирање. Можда није компатибилно са хардверским убрзањем на старијим уређајима. 0 oneмогућава Б-кадре, док -1 аутоматски поставља ову вредност.", "transcoding_max_b_frames_description": "Више вредности побољшавају ефикасност компресије, али успоравају кодирање. Можда није компатибилно са хардверским убрзањем на старијим уређајима. 0 oneмогућава Б-кадре, док -1 аутоматски поставља ову вредност.",
"transcoding_max_bitrate": "Максимални битрате", "transcoding_max_bitrate": "Максимални битрате",
"transcoding_max_bitrate_description": "Подешавање максималног битрате-а може учинити величине датотека предвидљивијим уз мању цену квалитета. При 720п, типичне вредности су 2600к за ВП9 или ХЕВЦ, или 4500к за Х.264. oneмогућено ако је постављено на 0.", "transcoding_max_bitrate_description": "Подешавање максималног битрате-а може учинити величине датотека предвидљивијим уз мању цену квалитета. При 720п, типичне вредности су 2600kbit/s за ВП9 или ХЕВЦ, или 4500kbit/s за Х.264. oneмогућено ако је постављено на 0.",
"transcoding_max_keyframe_interval": "Максимални интервал keyframe-a", "transcoding_max_keyframe_interval": "Максимални интервал keyframe-a",
"transcoding_max_keyframe_interval_description": "Поставља максималну удаљеност кадрова између кључних кадрова. Ниже вредности погоршавају ефикасност компресије, али побољшавају време тражења и могу побољшати квалитет сцена са брзим кретањем. 0 аутоматски поставља ову вредност.", "transcoding_max_keyframe_interval_description": "Поставља максималну удаљеност кадрова између кључних кадрова. Ниже вредности погоршавају ефикасност компресије, али побољшавају време тражења и могу побољшати квалитет сцена са брзим кретањем. 0 аутоматски поставља ову вредност.",
"transcoding_optimal_description": "Видео снимци већи од циљне резолуције или нису у прихваћеном формату", "transcoding_optimal_description": "Видео снимци већи од циљне резолуције или нису у прихваћеном формату",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Трајно избрисана датотека", "permanently_deleted_asset": "Трајно избрисана датотека",
"permanently_deleted_assets_count": "Трајно избрисано {count, plural, one {# датотека} other {# датотеке}}", "permanently_deleted_assets_count": "Трајно избрисано {count, plural, one {# датотека} other {# датотеке}}",
"person": "Особа", "person": "Особа",
"person_birthdate": "Рођен(a) {date}",
"person_hidden": "{name}{hidden, select, true { (скривено)} other {}}", "person_hidden": "{name}{hidden, select, true { (скривено)} other {}}",
"photo_shared_all_users": "Изгледа да сте поделили своје фотографије са свим корисницима или да немате ниједног корисника са којим бисте делили.", "photo_shared_all_users": "Изгледа да сте поделили своје фотографије са свим корисницима или да немате ниједног корисника са којим бисте делили.",
"photos": "Слике", "photos": "Слике",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Обриши из албума", "remove_from_album": "Обриши из албума",
"remove_from_favorites": "Уклони из фаворита", "remove_from_favorites": "Уклони из фаворита",
"remove_from_shared_link": "Уклоните са дељене везе", "remove_from_shared_link": "Уклоните са дељене везе",
"remove_memory": "Уклоните меморију",
"remove_photo_from_memory": "Уклоните фотографију из ове меморије",
"remove_url": "Уклони URL", "remove_url": "Уклони URL",
"remove_user": "Уклони корисника", "remove_user": "Уклони корисника",
"removed_api_key": "Уклоњен АПИ кључ (key): {name}", "removed_api_key": "Уклоњен АПИ кључ (key): {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Претраживање превода...", "searching_locales": "Претраживање превода...",
"second": "Секунда", "second": "Секунда",
"see_all_people": "Види све особе", "see_all_people": "Види све особе",
"select": "Изаберите",
"select_album_cover": "Изаберите омот албума", "select_album_cover": "Изаберите омот албума",
"select_all": "Изабери све", "select_all": "Изабери све",
"select_all_duplicates": "Изаберите све дупликате", "select_all_duplicates": "Изаберите све дупликате",
+4
View File
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "Trajno izbrisana datoteka", "permanently_deleted_asset": "Trajno izbrisana datoteka",
"permanently_deleted_assets_count": "Trajno izbrisano {count, plural, one {# datoteka} other {# datoteke}}", "permanently_deleted_assets_count": "Trajno izbrisano {count, plural, one {# datoteka} other {# datoteke}}",
"person": "Osoba", "person": "Osoba",
"person_birthdate": "Rođen(a) {date}",
"person_hidden": "{name}{hidden, select, true { (skriveno)} other {}}", "person_hidden": "{name}{hidden, select, true { (skriveno)} other {}}",
"photo_shared_all_users": "Izgleda da ste podelili svoje fotografije sa svim korisnicima ili da nemate nijednog korisnika sa kojim biste delili.", "photo_shared_all_users": "Izgleda da ste podelili svoje fotografije sa svim korisnicima ili da nemate nijednog korisnika sa kojim biste delili.",
"photos": "Slike", "photos": "Slike",
@@ -1078,6 +1079,8 @@
"remove_from_album": "Obriši iz albuma", "remove_from_album": "Obriši iz albuma",
"remove_from_favorites": "Ukloni iz favorita", "remove_from_favorites": "Ukloni iz favorita",
"remove_from_shared_link": "Uklonite sa deljene veze", "remove_from_shared_link": "Uklonite sa deljene veze",
"remove_memory": "Uklonite memoriju",
"remove_photo_from_memory": "Uklonite fotografiju iz ove memorije",
"remove_url": "Ukloni URL", "remove_url": "Ukloni URL",
"remove_user": "Ukloni korisnika", "remove_user": "Ukloni korisnika",
"removed_api_key": "Uklonjen API ključ (key): {name}", "removed_api_key": "Uklonjen API ključ (key): {name}",
@@ -1148,6 +1151,7 @@
"searching_locales": "Pretraživanje prevoda...", "searching_locales": "Pretraživanje prevoda...",
"second": "Sekunda", "second": "Sekunda",
"see_all_people": "Vidi sve osobe", "see_all_people": "Vidi sve osobe",
"select": "Izaberite",
"select_album_cover": "Izaberite omot albuma", "select_album_cover": "Izaberite omot albuma",
"select_all": "Izaberi sve", "select_all": "Izaberi sve",
"select_all_duplicates": "Izaberite sve duplikate", "select_all_duplicates": "Izaberite sve duplikate",
+26 -23
View File
@@ -28,7 +28,7 @@
"added_to_favorites": "Tillagd till favoriter", "added_to_favorites": "Tillagd till favoriter",
"added_to_favorites_count": "{count, number} tillagda till favoriter", "added_to_favorites_count": "{count, number} tillagda till favoriter",
"admin": { "admin": {
"add_exclusion_pattern_description": "Lägg till exkluderande mönster. Matchning med jokertecken *, ** samt ? är supporterat. För att ignorera alla filer i samtliga mappar som heter \"Raw\", använd \"**/Raw/**\". För att ignorera alla filer som slutar med \".tif\", använd \"**/*.tif\". För att ignorera en absolut sökväg, använd \"/sökväg/att/ignorera/**\".", "add_exclusion_pattern_description": "Lägg till exkluderande mönster. Matchning med jokertecken *, ** samt ? stödjs. För att ignorera alla filer i samtliga mappar som heter \"Raw\", använd \"**/Raw/**\". För att ignorera alla filer som slutar med \".tif\", använd \"**/*.tif\". För att ignorera en absolut sökväg, använd \"/sökväg/att/ignorera/**\".",
"asset_offline_description": "Denna externa bibliotekstillgång finns inte längre på disken och har flyttats till papperskorgen. Om filen flyttades inom biblioteket, kontrollera din tidslinje för den nya motsvarande tillgången. För att återställa denna tillgång, se till att filsökvägen nedan kan nås av Immich och skanna biblioteket.", "asset_offline_description": "Denna externa bibliotekstillgång finns inte längre på disken och har flyttats till papperskorgen. Om filen flyttades inom biblioteket, kontrollera din tidslinje för den nya motsvarande tillgången. För att återställa denna tillgång, se till att filsökvägen nedan kan nås av Immich och skanna biblioteket.",
"authentication_settings": "Autentiseringsinställningar", "authentication_settings": "Autentiseringsinställningar",
"authentication_settings_description": "Hantera lösenord, OAuth, och andra autentiseringsinställningar", "authentication_settings_description": "Hantera lösenord, OAuth, och andra autentiseringsinställningar",
@@ -36,7 +36,7 @@
"authentication_settings_reenable": "För att återaktivera, använd <link>Server Command</link>.", "authentication_settings_reenable": "För att återaktivera, använd <link>Server Command</link>.",
"background_task_job": "Bakgrundsaktiviteter", "background_task_job": "Bakgrundsaktiviteter",
"backup_database": "Databassäkerhetskopia", "backup_database": "Databassäkerhetskopia",
"backup_database_enable_description": "Slå på säkerhetskopia", "backup_database_enable_description": "Aktivera säkerhetskopiering av databas",
"backup_keep_last_amount": "Antal säkerhetskopior att behålla", "backup_keep_last_amount": "Antal säkerhetskopior att behålla",
"backup_settings": "Säkerhetskopieringsinställningar", "backup_settings": "Säkerhetskopieringsinställningar",
"backup_settings_description": "Hantera inställningar för säkerhetskopiering av databas", "backup_settings_description": "Hantera inställningar för säkerhetskopiering av databas",
@@ -48,19 +48,19 @@
"confirm_delete_library_assets": "Är du säker på att du vill radera detta album? {count, plural, one {# objekt} other {Samtliga # objekt}} kommer att tas bort från Immich och åtgärden kan inte ångras. Filerna kommer att behållas på hårddisken.", "confirm_delete_library_assets": "Är du säker på att du vill radera detta album? {count, plural, one {# objekt} other {Samtliga # objekt}} kommer att tas bort från Immich och åtgärden kan inte ångras. Filerna kommer att behållas på hårddisken.",
"confirm_email_below": "För att bekräfta, skriv ”{email}” nedan", "confirm_email_below": "För att bekräfta, skriv ”{email}” nedan",
"confirm_reprocess_all_faces": "Är du säker på att du vill återprocessa alla ansikten? Detta kommer också rensa namngivna personer.", "confirm_reprocess_all_faces": "Är du säker på att du vill återprocessa alla ansikten? Detta kommer också rensa namngivna personer.",
"confirm_user_password_reset": "Är du säker på att du vill återställa {user}s lösenord?", "confirm_user_password_reset": "Är du säker på att du vill återställa lösenordet för {user}?",
"create_job": "Skapa jobb", "create_job": "Skapa jobb",
"cron_expression": "Cron uttryck", "cron_expression": "Cron uttryck",
"cron_expression_description": "Sätt skanningsintervall genom att använda cron format. För mer information se <link>Crontab Guru</link>", "cron_expression_description": "Sätt skanningsintervall genom att använda cron-format. För mer information se <link>Crontab Guru</link>",
"cron_expression_presets": "Cron uttryck förinställningar", "cron_expression_presets": "Cron-uttryck förinställningar",
"disable_login": "Inaktivera inloggning", "disable_login": "Inaktivera inloggning",
"duplicate_detection_job_description": "Kör maskininlärning på objekt för att upptäcka liknande bilder. Bygger på Smart Search", "duplicate_detection_job_description": "Kör maskininlärning på objekt för att upptäcka liknande bilder. Bygger på Smart Search",
"exclusion_pattern_description": "Exkluderingsmönster tillåter dig att ignorera filer och mappar när skanning görs av ditt album. Detta är användbart om du har mappar som innehåller filer som du inte vill importera, t.ex. RAW-filer.", "exclusion_pattern_description": "Exkluderingsmönster tillåter dig att ignorera filer och mappar när skanning görs av ditt album. Detta är användbart om du har mappar som innehåller filer som du inte vill importera, t.ex. RAW-filer.",
"external_library_created_at": "Externt bibliotek (skapat den {date})", "external_library_created_at": "Externt bibliotek (skapat {date})",
"external_library_management": "Hantera externa bibliotek", "external_library_management": "Hantera externa bibliotek",
"face_detection": "Ansiktsdetektering", "face_detection": "Ansiktsdetektering",
"face_detection_description": "Identifiera ansikten i foton med hjälp av maskininlärning. För videor används endast miniatyrbilden. \"Alla\" gör om sökningen för alla objekt. \"Saknade\" letar i de objekt som ännu inte sökts igenom. Alla ansikten som identifierats läggs sedan i jobbkön för ansiktsigenkänning där de mappas till nya eller befintliga personer.", "face_detection_description": "Identifiera ansikten i foton med hjälp av maskininlärning. För videor används endast miniatyrbilden. \"Ladda om\" gör om sökningen för alla objekt. \"Återställ\" rensar all gällande ansikts-data. \"Saknade\" letar i de objekt som ännu inte sökts igenom. Alla identifierade ansikten läggs sedan i jobbkön för ansiktsigenkänning där de mappas till nya eller befintliga personer.",
"facial_recognition_job_description": "Gruppera upptäckta ansikten till personer. Det här steget körs efter att ansiktsdetektering är klar. \"Alla\" (åter-) grupperar alla ansikten. \"Saknade\" köer ansikten som inte har en person tilldelad.", "facial_recognition_job_description": "Gruppera upptäckta ansikten till personer. Det här steget körs efter att ansiktsdetektering är klar. \"Återställ\" (åter-)grupperar alla ansikten. \"Saknade\" köar ansikten som inte har en person tilldelad.",
"failed_job_command": "Kommando {command} misslyckades för jobb: {job}", "failed_job_command": "Kommando {command} misslyckades för jobb: {job}",
"force_delete_user_warning": "VARNING: Detta tar omedelbart bort användaren och alla mediafiler. Detta kan inte ångras och filerna kan inte återställas.", "force_delete_user_warning": "VARNING: Detta tar omedelbart bort användaren och alla mediafiler. Detta kan inte ångras och filerna kan inte återställas.",
"forcing_refresh_library_files": "Tvingar uppdatering av alla biblioteksfiler", "forcing_refresh_library_files": "Tvingar uppdatering av alla biblioteksfiler",
@@ -69,25 +69,25 @@
"image_prefer_embedded_preview": "Föredra inbäddad förhandsgranskning", "image_prefer_embedded_preview": "Föredra inbäddad förhandsgranskning",
"image_prefer_embedded_preview_setting_description": "Använd inbäddade förhandsvisningar i RAW-foton som indata till bildbehandling när det är tillgängligt. Detta kan ge mer exakta färger för vissa bilder, men kvaliteten på förhandsgranskningen är kameraberoende och bilden kan ha fler komprimeringsartefakter.", "image_prefer_embedded_preview_setting_description": "Använd inbäddade förhandsvisningar i RAW-foton som indata till bildbehandling när det är tillgängligt. Detta kan ge mer exakta färger för vissa bilder, men kvaliteten på förhandsgranskningen är kameraberoende och bilden kan ha fler komprimeringsartefakter.",
"image_prefer_wide_gamut": "Föredrar brett spektrum", "image_prefer_wide_gamut": "Föredrar brett spektrum",
"image_prefer_wide_gamut_setting_description": "Använd Display P3 för miniatyrer. Detta bevarar livfullheten bättre hos bilder med bred färgrymd, men bilder kan se annorlunda ut på gamla enheter med en gammal webbläsarversion. Med sRGB-bilder behålls i sitt format sRGB för att undvika färgskiftningar.", "image_prefer_wide_gamut_setting_description": "Använd Display P3 för miniatyrer. Detta bevarar livfullheten bättre hos bilder med bred färgrymd, men bilder kan se annorlunda ut på gamla enheter med en gammal webbläsarversion. sRGB-bilder behålls som sRGB för att undvika färgskiftningar.",
"image_preview_description": "Mellanstor bild med avskalad metadata, används vid visning av en enskild tillgång och för maskininlärning", "image_preview_description": "Mellanstor bild med avskalad metadata, används vid visning av en enskild tillgång och för maskininlärning",
"image_preview_quality_description": "Förhandsgranska kvalitet från 1-100. Högre är bättre, men ger större filer och kan minska appens känslighet. Att ställa in ett lågt värde kan påverka kvaliteten på maskininlärning.", "image_preview_quality_description": "Förhandsgranskningskvalitet från 1-100. Högre är bättre, men ger större filer och kan göra appen mindre följsam. Att ställa in ett lågt värde kan påverka kvaliteten på maskininlärning.",
"image_preview_title": "Förhandsvisningsinställningar", "image_preview_title": "Förhandsvisningsinställningar",
"image_quality": "Kvalitet", "image_quality": "Kvalitet",
"image_resolution": "Upplösning", "image_resolution": "Upplösning",
"image_resolution_description": "Högre upplösningar kan bevara fler detaljer men tar längre tid att koda, har större filstorlekar och kan minska appens känslighet.", "image_resolution_description": "Högre upplösningar kan bevara fler detaljer men tar längre tid att koda, har större filstorlekar och kan minska appens följsamhet.",
"image_settings": "Bildinställningar", "image_settings": "Bildinställningar",
"image_settings_description": "Hantera kvalitet och upplösning på genererade bilder", "image_settings_description": "Hantera kvalitet och upplösning på genererade bilder",
"image_thumbnail_description": "Liten miniatyrbild med avskalad metadata, används när du tittar på grupper av foton som huvudtidslinjen", "image_thumbnail_description": "Liten miniatyrbild med avskalad metadata, används när du tittar på grupper av foton som huvudtidslinjen",
"image_thumbnail_quality_description": "Miniatyrkvalitet från 1-100. Högre är bättre, men ger större filer och kan minska appens känslighet.", "image_thumbnail_quality_description": "Miniatyrkvalitet från 1-100. Högre är bättre, men ger större filer och kan minska appens följsamhet.",
"image_thumbnail_title": "Miniatyrbildsinställningar", "image_thumbnail_title": "Miniatyrbildsinställningar",
"job_concurrency": "{job} Samtidighet", "job_concurrency": "{job} samtidighet",
"job_created": "Jobb skapat", "job_created": "Jobb skapat",
"job_not_concurrency_safe": "Det här jobbet är inte samtidighetssäkert.", "job_not_concurrency_safe": "Det här jobbet är inte samtidighetssäkert.",
"job_settings": "Jobbinställningar", "job_settings": "Jobbinställningar",
"job_settings_description": "Hantera samtidiga jobb", "job_settings_description": "Hantera samtidiga jobb",
"job_status": "Jobbstatus", "job_status": "Jobbstatus",
"jobs_delayed": "{jobCount, plural, other {# försenad}}", "jobs_delayed": "{jobCount, plural, one{# försenad} other {# försenade}}",
"jobs_failed": "{jobCount, plural, other {# misslyckades}}", "jobs_failed": "{jobCount, plural, other {# misslyckades}}",
"library_created": "Skapat bibliotek: {library}", "library_created": "Skapat bibliotek: {library}",
"library_deleted": "Biblioteket har tagits bort", "library_deleted": "Biblioteket har tagits bort",
@@ -98,16 +98,16 @@
"library_settings": "Externa bibliotek", "library_settings": "Externa bibliotek",
"library_settings_description": "Hantera inställningar för externa bibliotek", "library_settings_description": "Hantera inställningar för externa bibliotek",
"library_tasks_description": "Sök igenom externa bibliotek efter nya och/eller ändrade objekt", "library_tasks_description": "Sök igenom externa bibliotek efter nya och/eller ändrade objekt",
"library_watching_enable_description": "Titta på externa bibliotek för filändringar", "library_watching_enable_description": "Bevaka externa bibliotek för filändringar",
"library_watching_settings": "Titta på bibliotek (EXPERIMENTELLT)", "library_watching_settings": "Bevaka bibliotek (EXPERIMENTELLT)",
"library_watching_settings_description": "Titta automatiskt efter ändrade filer", "library_watching_settings_description": "Bevaka automatiskt filförändringar",
"logging_enable_description": "Aktivera loggning", "logging_enable_description": "Aktivera loggning",
"logging_level_description": "När aktiverad, vilken loggnivå som ska användas.", "logging_level_description": "Vilken loggnivå som ska användas vid aktivering.",
"logging_settings": "Loggning", "logging_settings": "Loggning",
"machine_learning_clip_model": "CLIP modell", "machine_learning_clip_model": "CLIP-modell",
"machine_learning_clip_model_description": "Namnet på en CLIP-modell listad <link> här </link>. Observera att du måste köra ett \"Smart Search\" jobb för alla bilder när du ändrar en modell.", "machine_learning_clip_model_description": "Namnet på en CLIP-modell listad <link> här </link>. Observera att du måste köra ett \"Smart Sökning\" jobb för alla bilder när du ändrar modell.",
"machine_learning_duplicate_detection": "Dubblettdetektering", "machine_learning_duplicate_detection": "Dubblettdetektering",
"machine_learning_duplicate_detection_enabled": "Aktivera dubblett detektion", "machine_learning_duplicate_detection_enabled": "Aktivera dubblettdetektion",
"machine_learning_duplicate_detection_enabled_description": "Om den inaktiveras kommer exakt identiska tillgångar fortfarande att dedupliceras.", "machine_learning_duplicate_detection_enabled_description": "Om den inaktiveras kommer exakt identiska tillgångar fortfarande att dedupliceras.",
"machine_learning_duplicate_detection_setting_description": "Använd CLIP-inbäddningar för att hitta troliga dubbletter", "machine_learning_duplicate_detection_setting_description": "Använd CLIP-inbäddningar för att hitta troliga dubbletter",
"machine_learning_enabled": "Aktivera maskininlärning", "machine_learning_enabled": "Aktivera maskininlärning",
@@ -246,7 +246,7 @@
"storage_template_migration_info": "Lagringsmallen kommer konvertera alla filändelser till gemena bokstäver. Ändringar gäller endast för nya resurser, för att retoaktivt tillämpa mallen på befintliga resurser kör <link>{job}</link>.", "storage_template_migration_info": "Lagringsmallen kommer konvertera alla filändelser till gemena bokstäver. Ändringar gäller endast för nya resurser, för att retoaktivt tillämpa mallen på befintliga resurser kör <link>{job}</link>.",
"storage_template_migration_job": "Lagringsmall migreringsjobb", "storage_template_migration_job": "Lagringsmall migreringsjobb",
"storage_template_more_details": "För mer information om den här funktionen se <template-link>Lagringsmall</template-link> och dess <implications-link>konsekvenser</implications-link>", "storage_template_more_details": "För mer information om den här funktionen se <template-link>Lagringsmall</template-link> och dess <implications-link>konsekvenser</implications-link>",
"storage_template_onboarding_description": "Vid aktivering organiserar denna funktion automatiskt filer baserat på en användardefinierad mall. På grunda av stabilitetsproblem är denna funktion avstängd som standard, för mer information se <link>dokumentation</link>.", "storage_template_onboarding_description": "Vid aktivering organiserar denna funktion automatiskt filer baserat på en användardefinierad mall. På grund av stabilitetsproblem är denna funktion avstängd som standard, för mer information se <link>dokumentation</link>.",
"storage_template_path_length": "Uppskattad längdbegränsning på sökväg: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "Uppskattad längdbegränsning på sökväg: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Lagringsmall", "storage_template_settings": "Lagringsmall",
"storage_template_settings_description": "Hantera mappstruktur och filnamn för uppladdade resurser", "storage_template_settings_description": "Hantera mappstruktur och filnamn för uppladdade resurser",
@@ -1079,6 +1079,8 @@
"remove_from_album": "Ta bort från album", "remove_from_album": "Ta bort från album",
"remove_from_favorites": "Ta bort från favoriter", "remove_from_favorites": "Ta bort från favoriter",
"remove_from_shared_link": "Ta bort från delad länk", "remove_from_shared_link": "Ta bort från delad länk",
"remove_memory": "Ta bort minne",
"remove_photo_from_memory": "Ta bort fotot från detta minnet",
"remove_url": "Ta bort URL", "remove_url": "Ta bort URL",
"remove_user": "Ta bort användare", "remove_user": "Ta bort användare",
"removed_api_key": "Tog bort API nyckel: {name}", "removed_api_key": "Tog bort API nyckel: {name}",
@@ -1149,6 +1151,7 @@
"searching_locales": "Söker efter språk...", "searching_locales": "Söker efter språk...",
"second": "Sekund", "second": "Sekund",
"see_all_people": "Se alla personer", "see_all_people": "Se alla personer",
"select": "Välj",
"select_album_cover": "Välj albumomslag", "select_album_cover": "Välj albumomslag",
"select_all": "Välj alla", "select_all": "Välj alla",
"select_all_duplicates": "Välj alla dubletter", "select_all_duplicates": "Välj alla dubletter",
@@ -1294,7 +1297,7 @@
"trashed_items_will_be_permanently_deleted_after": "Objekt i papperskorgen raderas permanent efter {days, plural, one {# dag} other {# dagar}}.", "trashed_items_will_be_permanently_deleted_after": "Objekt i papperskorgen raderas permanent efter {days, plural, one {# dag} other {# dagar}}.",
"type": "Typ", "type": "Typ",
"unarchive": "Ångra arkivering", "unarchive": "Ångra arkivering",
"unarchived_count": "{count, plural, other {Unarchived #}}", "unarchived_count": "{count, plural, one {# borttagen från arkiv} other {# borttagna från arkiv}}",
"unfavorite": "Avfavorisera", "unfavorite": "Avfavorisera",
"unhide_person": "Visa person", "unhide_person": "Visa person",
"unknown": "Okänd", "unknown": "Okänd",
+957 -5
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -96,7 +96,7 @@
"library_scanning_enable_description": "เปิดการสแกนคลังภาพเป็นระยะ", "library_scanning_enable_description": "เปิดการสแกนคลังภาพเป็นระยะ",
"library_settings": "คลังภาพภายนอก", "library_settings": "คลังภาพภายนอก",
"library_settings_description": "จัดการการตั้งค่าคลังภาพภายนอก", "library_settings_description": "จัดการการตั้งค่าคลังภาพภายนอก",
"library_tasks_description": "ทำงานคลังภาพ", "library_tasks_description": "สแกนคลังภาพภายนอกสำหรับทรัพยากรใหม่และ/หรือที่เปลี่ยนแปลง",
"library_watching_enable_description": "ดูคลังภาพภายนอกสำหรับการเปลี่ยนแปลงของไฟล์", "library_watching_enable_description": "ดูคลังภาพภายนอกสำหรับการเปลี่ยนแปลงของไฟล์",
"library_watching_settings": "การดูคลังภาพภายนอก (ฟีเจอร์ทดลอง)", "library_watching_settings": "การดูคลังภาพภายนอก (ฟีเจอร์ทดลอง)",
"library_watching_settings_description": "หาไฟล์ที่เปลี่ยนแปลงโดยอัตโนมัติ", "library_watching_settings_description": "หาไฟล์ที่เปลี่ยนแปลงโดยอัตโนมัติ",
+18 -15
View File
@@ -29,7 +29,7 @@
"added_to_favorites_count": "Додано {count, number} до обраного", "added_to_favorites_count": "Додано {count, number} до обраного",
"admin": { "admin": {
"add_exclusion_pattern_description": "Додайте шаблони виключень. Підстановка з використанням *, ** та ? підтримується. Для ігнорування всіх файлів у будь-якому каталозі з ім'ям «Raw», використовуйте \"**/Raw/**\". Для ігнорування всіх файлів, що закінчуються на \".tif\", використовуйте \"**/*.tif\". Для ігнорування абсолютного шляху використовуйте \"/path/to/ignore/**\".", "add_exclusion_pattern_description": "Додайте шаблони виключень. Підстановка з використанням *, ** та ? підтримується. Для ігнорування всіх файлів у будь-якому каталозі з ім'ям «Raw», використовуйте \"**/Raw/**\". Для ігнорування всіх файлів, що закінчуються на \".tif\", використовуйте \"**/*.tif\". Для ігнорування абсолютного шляху використовуйте \"/path/to/ignore/**\".",
"asset_offline_description": "Цей зовнішній бібліотечний актив більше не знайдено на диску і був переміщений до кошика. Якщо файл був переміщений у межах бібліотеки, перевірте свій таймлайн на наявність нового відповідного активу. Щоб відновити цей актив, переконайтеся, що шлях файлу нижче доступний для Immich, і проскануйте бібліотеку.", "asset_offline_description": "Цей зовнішній бібліотечний актив більше не знайдено на диску і був переміщений до смітника. Якщо файл був переміщений у межах бібліотеки, перевірте свій таймлайн на наявність нового відповідного активу. Щоб відновити цей актив, переконайтеся, що шлях файлу нижче доступний для Immich, і проскануйте бібліотеку.",
"authentication_settings": "Налаштування аутентифікації", "authentication_settings": "Налаштування аутентифікації",
"authentication_settings_description": "Управління паролями, OAuth та іншими налаштуваннями аутентифікації", "authentication_settings_description": "Управління паролями, OAuth та іншими налаштуваннями аутентифікації",
"authentication_settings_disable_all": "Ви впевнені, що хочете вимкнути всі методи входу? Вхід буде повністю вимкнений.", "authentication_settings_disable_all": "Ви впевнені, що хочете вимкнути всі методи входу? Вхід буде повністю вимкнений.",
@@ -302,7 +302,7 @@
"transcoding_max_b_frames": "Максимальна кількість проміжних кадрів", "transcoding_max_b_frames": "Максимальна кількість проміжних кадрів",
"transcoding_max_b_frames_description": "Вищі значення покращують ефективність стиснення, але збільшують час кодування. Можуть бути несумісні з апаратним прискоренням на старих пристроях. Значення 0 вимикає B-фрейми, а -1 автоматично налаштовує це значення.", "transcoding_max_b_frames_description": "Вищі значення покращують ефективність стиснення, але збільшують час кодування. Можуть бути несумісні з апаратним прискоренням на старих пристроях. Значення 0 вимикає B-фрейми, а -1 автоматично налаштовує це значення.",
"transcoding_max_bitrate": "Максимальний бітрейт", "transcoding_max_bitrate": "Максимальний бітрейт",
"transcoding_max_bitrate_description": "Встановлення максимального бітрейту дозволяє зробити розміри файлів більш передбачуваними за мінорну вартість якості. Наприклад, для 720p типові значення: 2600к для VP9 або HEVC, або 4500к для H.264. Вимикається, якщо встановлено 0.", "transcoding_max_bitrate_description": "Встановлення максимального бітрейту дозволяє зробити розміри файлів більш передбачуваними за мінорну вартість якості. Наприклад, для 720p типові значення: 2600 кбіт/с для VP9 або HEVC, або 4500 кбіт/с для H.264. Вимикається, якщо встановлено 0.",
"transcoding_max_keyframe_interval": "Максимальний інтервал ключових кадрів", "transcoding_max_keyframe_interval": "Максимальний інтервал ключових кадрів",
"transcoding_max_keyframe_interval_description": "Встановлює максимальну відстань між ключовими кадрами. Нижчі значення погіршують ефективність стиснення, але покращують час пошуку і можуть покращити якість в сценах з швидкими рухами. Значення 0 автоматично встановлює це значення.", "transcoding_max_keyframe_interval_description": "Встановлює максимальну відстань між ключовими кадрами. Нижчі значення погіршують ефективність стиснення, але покращують час пошуку і можуть покращити якість в сценах з швидкими рухами. Значення 0 автоматично встановлює це значення.",
"transcoding_optimal_description": "Відео з роздільною здатністю вище цільової або не в прийнятому форматі", "transcoding_optimal_description": "Відео з роздільною здатністю вище цільової або не в прийнятому форматі",
@@ -331,11 +331,11 @@
"transcoding_two_pass_encoding_setting_description": "Транскодування за двома проходами для отримання кращих закодованих відео. Коли ввімкнено максимальний бітрейт (необхідний для роботи з H.264 та HEVC), цей режим використовує діапазон бітрейту, заснований на максимальному бітрейті, і ігнорує CRF. Для VP9 можна використовувати CRF, якщо вимкнено максимальний бітрейт.", "transcoding_two_pass_encoding_setting_description": "Транскодування за двома проходами для отримання кращих закодованих відео. Коли ввімкнено максимальний бітрейт (необхідний для роботи з H.264 та HEVC), цей режим використовує діапазон бітрейту, заснований на максимальному бітрейті, і ігнорує CRF. Для VP9 можна використовувати CRF, якщо вимкнено максимальний бітрейт.",
"transcoding_video_codec": "Відеокодек", "transcoding_video_codec": "Відеокодек",
"transcoding_video_codec_description": "VP9 має високу ефективність і сумісність з вебом, але потребує більше часу на транскодування. HEVC працює схоже, але має меншу сумісність з вебом. H.264 має широку сумісність і швидко транскодується, але створює значно більші файли. AV1 - найефективніший кодек, але не підтримується на старіших пристроях.", "transcoding_video_codec_description": "VP9 має високу ефективність і сумісність з вебом, але потребує більше часу на транскодування. HEVC працює схоже, але має меншу сумісність з вебом. H.264 має широку сумісність і швидко транскодується, але створює значно більші файли. AV1 - найефективніший кодек, але не підтримується на старіших пристроях.",
"trash_enabled_description": "Увімкнення кошика", "trash_enabled_description": "Увімкнення смітника",
"trash_number_of_days": "Кількість днів", "trash_number_of_days": "Кількість днів",
"trash_number_of_days_description": "Кількість днів, щоб залишити ресурси в кошику перед остаточним їх видаленням", "trash_number_of_days_description": "Кількість днів, щоб залишити ресурси в смітнику перед остаточним їх видаленням",
"trash_settings": "Налаштування кошика", "trash_settings": "Налаштування смітника",
"trash_settings_description": "Керування налаштуваннями кошика", "trash_settings_description": "Керування налаштуваннями смітника",
"untracked_files": "Невідстежувані файли", "untracked_files": "Невідстежувані файли",
"untracked_files_description": "Ці файли не відстежуються програмою. Вони можуть бути результатом невдалого переміщення, перерваного завантаження або залишитися через помилку програми", "untracked_files_description": "Ці файли не відстежуються програмою. Вони можуть бути результатом невдалого переміщення, перерваного завантаження або залишитися через помилку програми",
"user_cleanup_job": "Очищення користувача", "user_cleanup_job": "Очищення користувача",
@@ -426,12 +426,12 @@
"assets_added_to_album_count": "Додано {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}} до альбому", "assets_added_to_album_count": "Додано {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}} до альбому",
"assets_added_to_name_count": "Додано {count, plural, one {# елемент} other {# елементів}} до {hasName, select, true {<b>{name}</b>} other {нового альбому}}", "assets_added_to_name_count": "Додано {count, plural, one {# елемент} other {# елементів}} до {hasName, select, true {<b>{name}</b>} other {нового альбому}}",
"assets_count": "{count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}", "assets_count": "{count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}",
"assets_moved_to_trash_count": "Переміщено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}} у кошик", "assets_moved_to_trash_count": "Переміщено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}} у смітник",
"assets_permanently_deleted_count": "Остаточно видалено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}", "assets_permanently_deleted_count": "Остаточно видалено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}",
"assets_removed_count": "Вилучено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}", "assets_removed_count": "Вилучено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}",
"assets_restore_confirmation": "Ви впевнені, що хочете відновити всі свої активи з кошика? Цю дію не можна скасувати! Зверніть увагу, що будь-які офлайн-активи не можуть бути відновлені таким чином.", "assets_restore_confirmation": "Ви впевнені, що хочете відновити всі свої активи з смітника? Цю дію не можна скасувати! Зверніть увагу, що будь-які офлайн-активи не можуть бути відновлені таким чином.",
"assets_restored_count": "Відновлено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}", "assets_restored_count": "Відновлено {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}",
"assets_trashed_count": "Поміщено в кошик {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}", "assets_trashed_count": "Поміщено в смітник {count, plural, one {# ресурс} few {# ресурси} other {# ресурсів}}",
"assets_were_part_of_album_count": "{count, plural, one {Ресурс був} few {Ресурси були} other {Ресурси були}} вже частиною альбому", "assets_were_part_of_album_count": "{count, plural, one {Ресурс був} few {Ресурси були} other {Ресурси були}} вже частиною альбому",
"authorized_devices": "Авторизовані пристрої", "authorized_devices": "Авторизовані пристрої",
"back": "Назад", "back": "Назад",
@@ -445,7 +445,7 @@
"build_image": "Версія збірки", "build_image": "Версія збірки",
"bulk_delete_duplicates_confirmation": "Ви впевнені, що хочете масово видалити {count, plural, one {# дубльований ресурс} few {# дубльовані ресурси} other {# дубльованих ресурсів}}? Це дія залишить найбільший ресурс у кожній групі і остаточно видалить всі інші дублікати. Цю дію неможливо скасувати!", "bulk_delete_duplicates_confirmation": "Ви впевнені, що хочете масово видалити {count, plural, one {# дубльований ресурс} few {# дубльовані ресурси} other {# дубльованих ресурсів}}? Це дія залишить найбільший ресурс у кожній групі і остаточно видалить всі інші дублікати. Цю дію неможливо скасувати!",
"bulk_keep_duplicates_confirmation": "Ви впевнені, що хочете залишити {count, plural, one {# дубльований ресурс} few {# дубльовані ресурси} other {# дубльованих ресурсів}}? Це дозволить вирішити всі групи дублікатів без видалення чого-небудь.", "bulk_keep_duplicates_confirmation": "Ви впевнені, що хочете залишити {count, plural, one {# дубльований ресурс} few {# дубльовані ресурси} other {# дубльованих ресурсів}}? Це дозволить вирішити всі групи дублікатів без видалення чого-небудь.",
"bulk_trash_duplicates_confirmation": "Ви впевнені, що хочете викинути в кошик {count, plural, one {# дубльований ресурс} few {# дубльовані ресурси} other {# дубльованих ресурсів}} масово? Це залишить найбільший ресурс у кожній групі і викине в кошик всі інші дублікати.", "bulk_trash_duplicates_confirmation": "Ви впевнені, що хочете викинути в смітник {count, plural, one {# дубльований ресурс} few {# дубльовані ресурси} other {# дубльованих ресурсів}} масово? Це залишить найбільший ресурс у кожній групі і викине в смітник всі інші дублікати.",
"buy": "Придбайте Immich", "buy": "Придбайте Immich",
"camera": "Камера", "camera": "Камера",
"camera_brand": "Марка камери", "camera_brand": "Марка камери",
@@ -600,8 +600,8 @@
"editor_crop_tool_h2_aspect_ratios": "Пропорції зображення", "editor_crop_tool_h2_aspect_ratios": "Пропорції зображення",
"editor_crop_tool_h2_rotation": "Орієнтація", "editor_crop_tool_h2_rotation": "Орієнтація",
"email": "Електронна пошта", "email": "Електронна пошта",
"empty_trash": "Очистити кошик", "empty_trash": "Очистити смітник",
"empty_trash_confirmation": "Ви впевнені, що хочете очистити кошик? Це остаточно видалить всі ресурси в кошику з Immich.\nЦю дію не можна скасувати!", "empty_trash_confirmation": "Ви впевнені, що хочете очистити смітник? Це остаточно видалить всі ресурси в смітнику з Immich.\nЦю дію не можна скасувати!",
"enable": "Увімкнути", "enable": "Увімкнути",
"enabled": "Увімкнено", "enabled": "Увімкнено",
"end_date": "Дата завершення", "end_date": "Дата завершення",
@@ -680,7 +680,7 @@
"unable_to_download_files": "Неможливо завантажити файли", "unable_to_download_files": "Неможливо завантажити файли",
"unable_to_edit_exclusion_pattern": "Не вдалося редагувати шаблон виключення", "unable_to_edit_exclusion_pattern": "Не вдалося редагувати шаблон виключення",
"unable_to_edit_import_path": "Неможливо відредагувати шлях імпорту", "unable_to_edit_import_path": "Неможливо відредагувати шлях імпорту",
"unable_to_empty_trash": "Неможливо очистити кошик", "unable_to_empty_trash": "Неможливо очистити смітник",
"unable_to_enter_fullscreen": "Неможливо увійти в повноекранний режим", "unable_to_enter_fullscreen": "Неможливо увійти в повноекранний режим",
"unable_to_exit_fullscreen": "Неможливо вийти з повноекранного режиму", "unable_to_exit_fullscreen": "Неможливо вийти з повноекранного режиму",
"unable_to_get_comments_number": "Не вдалося отримати кількість коментарів", "unable_to_get_comments_number": "Не вдалося отримати кількість коментарів",
@@ -710,7 +710,7 @@
"unable_to_reset_password": "Не вдається скинути пароль", "unable_to_reset_password": "Не вдається скинути пароль",
"unable_to_resolve_duplicate": "Не вдається вирішити дублікат", "unable_to_resolve_duplicate": "Не вдається вирішити дублікат",
"unable_to_restore_assets": "Неможливо відновити активи", "unable_to_restore_assets": "Неможливо відновити активи",
"unable_to_restore_trash": "Неможливо відновити сміття", "unable_to_restore_trash": "Не вдалося відновити вміст",
"unable_to_restore_user": "Не вдається відновити користувача", "unable_to_restore_user": "Не вдається відновити користувача",
"unable_to_save_album": "Не вдається зберегти альбом", "unable_to_save_album": "Не вдається зберегти альбом",
"unable_to_save_api_key": "Не вдається зберегти ключ API", "unable_to_save_api_key": "Не вдається зберегти ключ API",
@@ -1079,6 +1079,8 @@
"remove_from_album": "Видалити з альбому", "remove_from_album": "Видалити з альбому",
"remove_from_favorites": "Видалити з обраного", "remove_from_favorites": "Видалити з обраного",
"remove_from_shared_link": "Видалити зі спільного посилання", "remove_from_shared_link": "Видалити зі спільного посилання",
"remove_memory": "Видалити спогад",
"remove_photo_from_memory": "Видалити фото з цього спогаду",
"remove_url": "Видалити URL", "remove_url": "Видалити URL",
"remove_user": "Видалити користувача", "remove_user": "Видалити користувача",
"removed_api_key": "Видалено ключ API: {name}", "removed_api_key": "Видалено ключ API: {name}",
@@ -1149,6 +1151,7 @@
"searching_locales": "Триває пошук перекладів...", "searching_locales": "Триває пошук перекладів...",
"second": "Секунда", "second": "Секунда",
"see_all_people": "Переглянути всіх людей", "see_all_people": "Переглянути всіх людей",
"select": "Виберіть",
"select_album_cover": "Обрати обкладинку альбому", "select_album_cover": "Обрати обкладинку альбому",
"select_all": "Вибрати все", "select_all": "Вибрати все",
"select_all_duplicates": "Вибрати всі дублікати", "select_all_duplicates": "Вибрати всі дублікати",
@@ -1286,7 +1289,7 @@
"toggle_theme": "Перемикання теми", "toggle_theme": "Перемикання теми",
"total": "Усього", "total": "Усього",
"total_usage": "Загальне використання", "total_usage": "Загальне використання",
"trash": "Кошик", "trash": "Смітник",
"trash_all": "Видалити все", "trash_all": "Видалити все",
"trash_count": "Видалити {count, number}", "trash_count": "Видалити {count, number}",
"trash_delete_asset": "Смітник/Видалити ресурс", "trash_delete_asset": "Смітник/Видалити ресурс",
+18 -1
View File
@@ -1,3 +1,20 @@
{ {
"about": "متعلق" "about": "متعلق",
"account": "اکاؤنٹ",
"account_settings": "اکاؤنٹ کی ترتیبات",
"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": "مزید صارفین شامل کریں",
"add_partner": "ساتھی شامل کریں",
"add_path": "راستہ شامل کریں"
} }
+38 -34
View File
@@ -2,7 +2,7 @@
"about": "关于", "about": "关于",
"account": "账户", "account": "账户",
"account_settings": "账户设置", "account_settings": "账户设置",
"acknowledge": "确认", "acknowledge": "我知道了",
"action": "操作", "action": "操作",
"actions": "操作", "actions": "操作",
"active": "正在处理", "active": "正在处理",
@@ -893,7 +893,7 @@
"moved_to_trash": "已放入回收站", "moved_to_trash": "已放入回收站",
"mute_memories": "静音回忆", "mute_memories": "静音回忆",
"my_albums": "我的相册", "my_albums": "我的相册",
"name": "名", "name": "名",
"name_or_nickname": "名称或昵称", "name_or_nickname": "名称或昵称",
"never": "永不过期", "never": "永不过期",
"new_album": "新相册", "new_album": "新相册",
@@ -987,6 +987,7 @@
"permanently_deleted_asset": "永久删除的项目", "permanently_deleted_asset": "永久删除的项目",
"permanently_deleted_assets_count": "{count, plural, one {#个项目} other {#个项目}}已删除", "permanently_deleted_assets_count": "{count, plural, one {#个项目} other {#个项目}}已删除",
"person": "人物", "person": "人物",
"person_birthdate": "出生于{date}",
"person_hidden": "{name}{hidden, select, true {(已隐藏)} other {}}", "person_hidden": "{name}{hidden, select, true {(已隐藏)} other {}}",
"photo_shared_all_users": "看起来您已与所有用户共享了此相册,或者您根本没有任何用户可共享。", "photo_shared_all_users": "看起来您已与所有用户共享了此相册,或者您根本没有任何用户可共享。",
"photos": "照片", "photos": "照片",
@@ -1066,18 +1067,20 @@
"refreshed": "已刷新", "refreshed": "已刷新",
"refreshes_every_file": "重新扫描所有现有文件和新文件", "refreshes_every_file": "重新扫描所有现有文件和新文件",
"refreshing_encoded_video": "正在刷新已编码视频", "refreshing_encoded_video": "正在刷新已编码视频",
"refreshing_faces": "正在刷新人脸", "refreshing_faces": "正在面部重新识别",
"refreshing_metadata": "正在刷新元数据", "refreshing_metadata": "正在刷新元数据",
"regenerating_thumbnails": "正在重新生成缩略图", "regenerating_thumbnails": "正在重新生成缩略图",
"remove": "移除", "remove": "移除",
"remove_assets_album_confirmation": "确定要从项目中移除{count, plural, one {#个项目} other {#个项目}}", "remove_assets_album_confirmation": "确定要从图库中移除{count, plural, one {#个项目} other {#个项目}}",
"remove_assets_shared_link_confirmation": "确定要从共享链接中移除{count, plural, one {#个项目} other {#个项目}}", "remove_assets_shared_link_confirmation": "确定要从共享链接中移除{count, plural, one {#个项目} other {#个项目}}",
"remove_assets_title": "移除项目?", "remove_assets_title": "移除项目?",
"remove_custom_date_range": "取消自定义日期范围", "remove_custom_date_range": "取消自定义日期范围",
"remove_deleted_assets": "删除离线文件", "remove_deleted_assets": "彻底删除文件",
"remove_from_album": "从相册中移除", "remove_from_album": "从相册中移除",
"remove_from_favorites": "移出收藏", "remove_from_favorites": "移出收藏",
"remove_from_shared_link": "从共享链接中移除", "remove_from_shared_link": "从共享链接中移除",
"remove_memory": "移出回忆区",
"remove_photo_from_memory": "从当前回忆区移除照片",
"remove_url": "移除 URL", "remove_url": "移除 URL",
"remove_user": "移除用户", "remove_user": "移除用户",
"removed_api_key": "已移除 API Key{name}", "removed_api_key": "已移除 API Key{name}",
@@ -1085,32 +1088,32 @@
"removed_from_favorites": "从收藏中移除", "removed_from_favorites": "从收藏中移除",
"removed_from_favorites_count": "从收藏中移除{count, plural, other {#项}}", "removed_from_favorites_count": "从收藏中移除{count, plural, other {#项}}",
"removed_memory": "已删除的回忆", "removed_memory": "已删除的回忆",
"removed_photo_from_memory": "从回忆中删除的照片", "removed_photo_from_memory": "从回忆中删除的照片",
"removed_tagged_assets": "从 {count, plural, one {# 个项目} other {# 个项目}}中删除标签", "removed_tagged_assets": "从 {count, plural, one {# 个项目} other {# 个项目}}中删除标签",
"rename": "重命名", "rename": "重命名",
"repair": "修复", "repair": "修复",
"repair_no_results_message": "未跟踪和缺失的文件将在此处显示", "repair_no_results_message": "未跟踪和缺失的文件将在此处显示",
"replace_with_upload": "上传替换", "replace_with_upload": "上传替换",
"repository": "库", "repository": "库",
"require_password": "需要密码", "require_password": "需要密码",
"require_user_to_change_password_on_first_login": "要求用户在首次登录时更改密码", "require_user_to_change_password_on_first_login": "用户在首次登录时必须更改密码",
"rescan": "重新扫描", "rescan": "重新扫描",
"reset": "重置", "reset": "重置",
"reset_password": "重置密码", "reset_password": "重置密码",
"reset_people_visibility": "重置人物可见性", "reset_people_visibility": "重置人物识别",
"reset_to_default": "恢复默认值", "reset_to_default": "恢复默认值",
"resolve_duplicates": "处理重复项", "resolve_duplicates": "处理重复项",
"resolved_all_duplicates": "解决所有重复问题", "resolved_all_duplicates": "处理所有重复",
"restore": "恢复", "restore": "恢复",
"restore_all": "恢复所有", "restore_all": "恢复全部",
"restore_user": "恢复用户", "restore_user": "恢复用户",
"restored_asset": "已恢复项目", "restored_asset": "已恢复项目",
"resume": "继续", "resume": "继续",
"retry_upload": "重新上传", "retry_upload": "重新上传",
"review_duplicates": "检查重复项", "review_duplicates": "检查重复项",
"role": "角色", "role": "选择用户权限",
"role_editor": "编辑", "role_editor": "编辑",
"role_viewer": "查看", "role_viewer": "查看",
"save": "保存", "save": "保存",
"saved_api_key": "已保存的 API Key", "saved_api_key": "已保存的 API Key",
"saved_profile": "已保存资料", "saved_profile": "已保存资料",
@@ -1122,38 +1125,39 @@
"scanning_for_album": "扫描相册中...", "scanning_for_album": "扫描相册中...",
"search": "搜索", "search": "搜索",
"search_albums": "搜索相册", "search_albums": "搜索相册",
"search_by_context": "按照片情景搜索", "search_by_context": "通过描述的场景查找",
"search_by_description": "按描述搜索", "search_by_description": "通过描述查找",
"search_by_description_example": "在沙巴徒步的日子", "search_by_description_example": "在沙巴徒步的日子",
"search_by_filename": "按文件名搜索", "search_by_filename": "按文件名或扩展名查找",
"search_by_filename_example": "如 IMG_1234.JPG 或 PNG", "search_by_filename_example": "如 IMG_1234.JPG 或 PNG",
"search_camera_make": "搜索相机品牌...", "search_camera_make": "相机品牌查找...",
"search_camera_model": "搜索相机型号...", "search_camera_model": "相机型号查找...",
"search_city": "搜索城市...", "search_city": "按城市查找...",
"search_country": "搜索国家...", "search_country": "按国家查找...",
"search_for": "搜索", "search_for": "查找",
"search_for_existing_person": "搜索已有人物", "search_for_existing_person": "查找已有人物",
"search_no_people": "找不到人物", "search_no_people": "找不到人物",
"search_no_people_named": "人物“{name}”不存在", "search_no_people_named": "人物“{name}”不存在",
"search_options": "搜索选项", "search_options": "搜索选项",
"search_people": "搜索人物", "search_people": "按人物查找",
"search_places": "搜索地点", "search_places": "按地点查找",
"search_rating": "按星级搜索...", "search_rating": "按星级查找...",
"search_settings": "搜索设置", "search_settings": "搜索设置",
"search_state": "搜索省份...", "search_state": "按省份查找...",
"search_tags": "搜索标签…", "search_tags": "按标签查找…",
"search_timezone": "搜索时区...", "search_timezone": "按时区查找...",
"search_type": "搜索类型", "search_type": "按类型查找",
"search_your_photos": "搜索您的照片", "search_your_photos": "查找您的照片",
"searching_locales": "搜索地区...", "searching_locales": "根据地区查找...",
"second": "秒", "second": "秒",
"see_all_people": "查看所有人物", "see_all_people": "查看所有人物",
"select": "选择",
"select_album_cover": "选择相册封面", "select_album_cover": "选择相册封面",
"select_all": "全选", "select_all": "全选",
"select_all_duplicates": "选择所有重复项", "select_all_duplicates": "选择所有重复项",
"select_avatar_color": "选择头像颜色", "select_avatar_color": "选择头像颜色",
"select_face": "选择人脸", "select_face": "选择人脸",
"select_featured_photo": "选择人物头像", "select_featured_photo": "选择个性头像",
"select_from_computer": "从计算机中选择", "select_from_computer": "从计算机中选择",
"select_keep_all": "全部保留", "select_keep_all": "全部保留",
"select_library_owner": "选择图库所有者", "select_library_owner": "选择图库所有者",
@@ -1166,7 +1170,7 @@
"send_welcome_email": "发送欢迎邮件", "send_welcome_email": "发送欢迎邮件",
"server_offline": "服务器离线", "server_offline": "服务器离线",
"server_online": "服务器在线", "server_online": "服务器在线",
"server_stats": "服务统计", "server_stats": "服务器状态",
"server_version": "服务器版本", "server_version": "服务器版本",
"set": "设置", "set": "设置",
"set_as_album_cover": "设为相册封面", "set_as_album_cover": "设为相册封面",
+19 -11
View File
@@ -1,6 +1,6 @@
ARG DEVICE=cpu ARG DEVICE=cpu
FROM python:3.11-bookworm@sha256:d270285656e8f061ae0004297df62ac4b26d5cef9408b9cc9a5bf08c2cd8d60c AS builder-cpu FROM python:3.11-bookworm@sha256:ebfa8696e47a68cffebb31e370a93ce57c01bc753f246ceaaef72801d1661351 AS builder-cpu
FROM builder-cpu AS builder-openvino FROM builder-cpu AS builder-openvino
@@ -51,11 +51,10 @@ ARG DEVICE
ENV PYTHONDONTWRITEBYTECODE=1 \ ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \ PYTHONUNBUFFERED=1 \
VIRTUAL_ENV=/opt/venv VIRTUAL_ENV=/opt/venv
WORKDIR /usr/src/app
RUN apt-get update && apt-get install -y --no-install-recommends g++ RUN apt-get update && apt-get install -y --no-install-recommends g++
COPY --from=ghcr.io/astral-sh/uv:latest@sha256:cb641b1979723dc5ab87d61f079000009edc107d30ae7cbb6e7419fdac044e9f /uv /uvx /bin/ COPY --from=ghcr.io/astral-sh/uv:latest@sha256:fb91e82e8643382d5bce074ba0d167677d678faff4bd518dac670476d19b159c /uv /uvx /bin/
RUN --mount=type=cache,target=/root/.cache/uv \ RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
@@ -66,7 +65,9 @@ RUN if [ "$DEVICE" = "rocm" ]; then \
FROM python:3.11-slim-bookworm@sha256:7029b00486ac40bed03e36775b864d3f3d39dcbdf19cd45e6a52d541e6c178f0 AS prod-cpu FROM python:3.11-slim-bookworm@sha256:7029b00486ac40bed03e36775b864d3f3d39dcbdf19cd45e6a52d541e6c178f0 AS prod-cpu
FROM prod-cpu AS prod-openvino ENV LD_PRELOAD=/usr/lib/libmimalloc.so.2
FROM python:3.11-slim-bookworm@sha256:7029b00486ac40bed03e36775b864d3f3d39dcbdf19cd45e6a52d541e6c178f0 AS prod-openvino
RUN apt-get update && \ RUN apt-get update && \
apt-get install --no-install-recommends -yqq ocl-icd-libopencl1 wget && \ apt-get install --no-install-recommends -yqq ocl-icd-libopencl1 wget && \
@@ -81,6 +82,8 @@ RUN apt-get update && \
FROM nvidia/cuda:12.2.2-runtime-ubuntu22.04@sha256:94c1577b2cd9dd6c0312dc04dff9cb2fdce2b268018abc3d7c2dbcacf1155000 AS prod-cuda FROM nvidia/cuda:12.2.2-runtime-ubuntu22.04@sha256:94c1577b2cd9dd6c0312dc04dff9cb2fdce2b268018abc3d7c2dbcacf1155000 AS prod-cuda
ENV LD_PRELOAD=/usr/lib/libmimalloc.so.2
RUN apt-get update && \ RUN apt-get update && \
apt-get install --no-install-recommends -yqq libcudnn9-cuda-12 && \ apt-get install --no-install-recommends -yqq libcudnn9-cuda-12 && \
apt-get clean && \ apt-get clean && \
@@ -94,7 +97,8 @@ FROM rocm/dev-ubuntu-22.04:6.3.4-complete@sha256:1f7e92ca7e3a3785680473329ed1091
FROM prod-cpu AS prod-armnn FROM prod-cpu AS prod-armnn
ENV LD_LIBRARY_PATH=/opt/armnn ENV LD_LIBRARY_PATH=/opt/armnn \
LD_PRELOAD=/usr/lib/libmimalloc.so.2
RUN apt-get update && apt-get install -y --no-install-recommends ocl-icd-libopencl1 mesa-opencl-icd libgomp1 && \ RUN apt-get update && apt-get install -y --no-install-recommends ocl-icd-libopencl1 mesa-opencl-icd libgomp1 && \
rm -rf /var/lib/apt/lists/* && \ rm -rf /var/lib/apt/lists/* && \
@@ -114,6 +118,8 @@ COPY --from=builder-armnn \
FROM prod-cpu AS prod-rknn FROM prod-cpu AS prod-rknn
ENV LD_PRELOAD=/usr/lib/libmimalloc.so.2
ADD --checksum=sha256:73993ed4b440460825f21611731564503cc1d5a0c123746477da6cd574f34885 https://github.com/airockchip/rknn-toolkit2/raw/refs/tags/v2.3.0/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so /usr/lib/ ADD --checksum=sha256:73993ed4b440460825f21611731564503cc1d5a0c123746477da6cd574f34885 https://github.com/airockchip/rknn-toolkit2/raw/refs/tags/v2.3.0/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so /usr/lib/
FROM prod-${DEVICE} AS prod FROM prod-${DEVICE} AS prod
@@ -126,14 +132,17 @@ RUN apt-get update && \
apt-get clean && \ apt-get clean && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src/app RUN ln -s "/usr/lib/$(arch)-linux-gnu/libmimalloc.so.2" /usr/lib/libmimalloc.so.2
WORKDIR /usr/src
ENV TRANSFORMERS_CACHE=/cache \ ENV TRANSFORMERS_CACHE=/cache \
PYTHONDONTWRITEBYTECODE=1 \ PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \ PYTHONUNBUFFERED=1 \
PATH="/opt/venv/bin:$PATH" \ PATH="/opt/venv/bin:$PATH" \
PYTHONPATH=/usr/src \ PYTHONPATH=/usr/src \
DEVICE=${DEVICE} \ DEVICE=${DEVICE} \
VIRTUAL_ENV=/opt/venv VIRTUAL_ENV=/opt/venv \
MACHINE_LEARNING_CACHE_FOLDER=/cache
# prevent core dumps # prevent core dumps
RUN echo "hard core 0" >> /etc/security/limits.conf && \ RUN echo "hard core 0" >> /etc/security/limits.conf && \
@@ -141,9 +150,8 @@ RUN echo "hard core 0" >> /etc/security/limits.conf && \
echo 'ulimit -S -c 0 > /dev/null 2>&1' >> /etc/profile echo 'ulimit -S -c 0 > /dev/null 2>&1' >> /etc/profile
COPY --from=builder /opt/venv /opt/venv COPY --from=builder /opt/venv /opt/venv
COPY ann/ann.py /usr/src/ann/ann.py COPY scripts/healthcheck.py .
COPY start.sh log_conf.json gunicorn_conf.py ./ COPY immich_ml immich_ml
COPY app .
ARG BUILD_ID ARG BUILD_ID
ARG BUILD_IMAGE ARG BUILD_IMAGE
@@ -161,6 +169,6 @@ ENV IMMICH_SOURCE_COMMIT=${BUILD_SOURCE_COMMIT}
ENV IMMICH_SOURCE_URL=https://github.com/immich-app/immich/commit/${BUILD_SOURCE_COMMIT} ENV IMMICH_SOURCE_URL=https://github.com/immich-app/immich/commit/${BUILD_SOURCE_COMMIT}
ENTRYPOINT ["tini", "--"] ENTRYPOINT ["tini", "--"]
CMD ["./start.sh"] CMD ["python", "-m", "immich_ml"]
HEALTHCHECK CMD python3 healthcheck.py HEALTHCHECK CMD python3 healthcheck.py
@@ -8,9 +8,8 @@ from fastapi.testclient import TestClient
from numpy.typing import NDArray from numpy.typing import NDArray
from PIL import Image from PIL import Image
from app.config import log from immich_ml.config import log
from immich_ml.main import app
from .main import app
@pytest.fixture @pytest.fixture
@@ -25,7 +24,7 @@ def cv_image(pil_image: Image.Image) -> NDArray[np.float32]:
@pytest.fixture @pytest.fixture
def mock_get_model() -> Iterator[mock.Mock]: def mock_get_model() -> Iterator[mock.Mock]:
with mock.patch("app.models.cache.from_model_type", autospec=True) as mocked: with mock.patch("immich_ml.models.cache.from_model_type", autospec=True) as mocked:
yield mocked yield mocked
@@ -104,14 +103,14 @@ def providers(request: pytest.FixtureRequest) -> Iterator[mock.Mock]:
raise ValueError("Missing marker 'providers'") raise ValueError("Missing marker 'providers'")
providers = marker.args[0] providers = marker.args[0]
with mock.patch("app.sessions.ort.ort.get_available_providers") as mocked: with mock.patch("immich_ml.sessions.ort.ort.get_available_providers") as mocked:
mocked.return_value = providers mocked.return_value = providers
yield providers yield providers
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def ort_pybind() -> Iterator[mock.Mock]: def ort_pybind() -> Iterator[mock.Mock]:
with mock.patch("app.sessions.ort.ort.capi._pybind_state") as mocked: with mock.patch("immich_ml.sessions.ort.ort.capi._pybind_state") as mocked:
yield mocked yield mocked
@@ -126,25 +125,25 @@ def ov_device_ids(request: pytest.FixtureRequest, ort_pybind: mock.Mock) -> Iter
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def ort_session() -> Iterator[mock.Mock]: def ort_session() -> Iterator[mock.Mock]:
with mock.patch("app.sessions.ort.ort.InferenceSession") as mocked: with mock.patch("immich_ml.sessions.ort.ort.InferenceSession") as mocked:
yield mocked yield mocked
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def ann_session() -> Iterator[mock.Mock]: def ann_session() -> Iterator[mock.Mock]:
with mock.patch("app.sessions.ann.Ann") as mocked: with mock.patch("immich_ml.sessions.ann.Ann") as mocked:
yield mocked yield mocked
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def rknn_session() -> Iterator[mock.Mock]: def rknn_session() -> Iterator[mock.Mock]:
with mock.patch("app.sessions.rknn.RknnPoolExecutor") as mocked: with mock.patch("immich_ml.sessions.rknn.RknnPoolExecutor") as mocked:
yield mocked yield mocked
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def rmtree() -> Iterator[mock.Mock]: def rmtree() -> Iterator[mock.Mock]:
with mock.patch("app.models.base.rmtree", autospec=True) as mocked: with mock.patch("immich_ml.models.base.rmtree", autospec=True) as mocked:
mocked.avoids_symlink_attacks = True mocked.avoids_symlink_attacks = True
yield mocked yield mocked
@@ -158,7 +157,7 @@ def path() -> Iterator[mock.Mock]:
path.with_suffix.return_value = path path.with_suffix.return_value = path
path.return_value = path path.return_value = path
with mock.patch("app.models.base.Path", return_value=path) as mocked: with mock.patch("immich_ml.models.base.Path", return_value=path) as mocked:
yield mocked yield mocked
@@ -182,5 +181,5 @@ def exception() -> Iterator[mock.Mock]:
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def snapshot_download() -> Iterator[mock.Mock]: def snapshot_download() -> Iterator[mock.Mock]:
with mock.patch("app.models.base.snapshot_download") as mocked: with mock.patch("immich_ml.models.base.snapshot_download") as mocked:
yield mocked yield mocked
-1
View File
@@ -1 +0,0 @@
3.12
View File
@@ -1,165 +0,0 @@
import json
import resource
from pathlib import Path
import typer
from tenacity import retry, stop_after_attempt, wait_fixed
from typing_extensions import Annotated
from .exporters.constants import DELETE_PATTERNS, SOURCE_TO_METADATA, ModelSource, ModelTask
from .exporters.onnx import export as onnx_export
from .exporters.rknn import export as rknn_export
app = typer.Typer(pretty_exceptions_show_locals=False)
def generate_readme(model_name: str, model_source: ModelSource) -> str:
(name, link, type) = SOURCE_TO_METADATA[model_source]
match model_source:
case ModelSource.MCLIP:
tags = ["immich", "clip", "multilingual"]
case ModelSource.OPENCLIP:
tags = ["immich", "clip"]
lowered = model_name.lower()
if "xlm" in lowered or "nllb" in lowered:
tags.append("multilingual")
case ModelSource.INSIGHTFACE:
tags = ["immich", "facial-recognition"]
case _:
raise ValueError(f"Unsupported model source {model_source}")
return f"""---
tags:
{" - " + "\n - ".join(tags)}
---
# Model Description
This repo contains ONNX exports for the associated {type} model by {name}. See the [{name}]({link}) repo for more info.
This repo is specifically intended for use with [Immich](https://immich.app/), a self-hosted photo library.
"""
def clean_name(model_name: str) -> str:
hf_model_name = model_name.split("/")[-1]
hf_model_name = hf_model_name.replace("xlm-roberta-large", "XLM-Roberta-Large")
hf_model_name = hf_model_name.replace("xlm-roberta-base", "XLM-Roberta-Base")
return hf_model_name
@app.command()
def export(model_name: str, model_source: ModelSource, output_dir: Path = Path("models"), cache: bool = True) -> None:
hf_model_name = clean_name(model_name)
output_dir = output_dir / hf_model_name
match model_source:
case ModelSource.MCLIP | ModelSource.OPENCLIP:
output_dir.mkdir(parents=True, exist_ok=True)
onnx_export(model_name, model_source, output_dir, cache=cache)
case ModelSource.INSIGHTFACE:
from huggingface_hub import snapshot_download
# TODO: start from insightface dump instead of downloading from HF
snapshot_download(f"immich-app/{hf_model_name}", local_dir=output_dir)
case _:
raise ValueError(f"Unsupported model source {model_source}")
try:
rknn_export(output_dir, cache=cache)
except Exception as e:
print(f"Failed to export model {model_name} to rknn: {e}")
(output_dir / "rknpu").unlink(missing_ok=True)
readme_path = output_dir / "README.md"
if not (cache or readme_path.exists()):
with open(readme_path, "w") as f:
f.write(generate_readme(model_name, model_source))
@app.command()
def profile(model_dir: Path, model_task: ModelTask, output_path: Path) -> None:
from timeit import timeit
import numpy as np
import onnxruntime as ort
np.random.seed(0)
sess_options = ort.SessionOptions()
sess_options.enable_cpu_mem_arena = False
providers = ["CPUExecutionProvider"]
provider_options = [{"arena_extend_strategy": "kSameAsRequested"}]
match model_task:
case ModelTask.SEARCH:
textual = ort.InferenceSession(
model_dir / "textual" / "model.onnx",
sess_options=sess_options,
providers=providers,
provider_options=provider_options,
)
tokens = {node.name: np.random.rand(*node.shape).astype(np.int32) for node in textual.get_inputs()}
visual = ort.InferenceSession(
model_dir / "visual" / "model.onnx",
sess_options=sess_options,
providers=providers,
provider_options=provider_options,
)
image = {node.name: np.random.rand(*node.shape).astype(np.float32) for node in visual.get_inputs()}
def predict() -> None:
textual.run(None, tokens)
visual.run(None, image)
case ModelTask.FACIAL_RECOGNITION:
detection = ort.InferenceSession(
model_dir / "detection" / "model.onnx",
sess_options=sess_options,
providers=providers,
provider_options=provider_options,
)
image = {node.name: np.random.rand(1, 3, 640, 640).astype(np.float32) for node in detection.get_inputs()}
recognition = ort.InferenceSession(
model_dir / "recognition" / "model.onnx",
sess_options=sess_options,
providers=providers,
provider_options=provider_options,
)
face = {node.name: np.random.rand(1, 3, 112, 112).astype(np.float32) for node in recognition.get_inputs()}
def predict() -> None:
detection.run(None, image)
recognition.run(None, face)
case _:
raise ValueError(f"Unsupported model task {model_task}")
predict()
ms = timeit(predict, number=100)
rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
json.dump({"pretrained_model": model_dir.name, "peak_rss": rss, "exec_time_ms": ms}, output_path.open("w"))
print(f"Model {model_dir.name} took {ms:.2f}ms per iteration using {rss / 1024:.2f}MiB of memory")
@app.command()
def upload(
model_dir: Path,
hf_organization: str = "immich-app",
hf_auth_token: Annotated[str | None, typer.Option(envvar="HF_AUTH_TOKEN")] = None,
) -> None:
from huggingface_hub import create_repo, upload_folder
repo_id = f"{hf_organization}/{model_dir.name}"
@retry(stop=stop_after_attempt(5), wait=wait_fixed(5))
def upload_model() -> None:
create_repo(repo_id, exist_ok=True, token=hf_auth_token)
upload_folder(
repo_id=repo_id,
folder_path=model_dir,
# remote repo files to be deleted before uploading
# deletion is in the same commit as the upload, so it's atomic
delete_patterns=DELETE_PATTERNS,
token=hf_auth_token,
)
upload_model()
@@ -1,3 +0,0 @@
from immich_model_exporter import app
app()
@@ -1,54 +0,0 @@
from enum import StrEnum
from typing import NamedTuple
class ModelSource(StrEnum):
INSIGHTFACE = "insightface"
MCLIP = "mclip"
OPENCLIP = "openclip"
class ModelTask(StrEnum):
FACIAL_RECOGNITION = "facial-recognition"
SEARCH = "clip"
class SourceMetadata(NamedTuple):
name: str
link: str
type: str
SOURCE_TO_METADATA = {
ModelSource.MCLIP: SourceMetadata("M-CLIP", "https://huggingface.co/M-CLIP", "CLIP"),
ModelSource.OPENCLIP: SourceMetadata("OpenCLIP", "https://github.com/mlfoundations/open_clip", "CLIP"),
ModelSource.INSIGHTFACE: SourceMetadata(
"InsightFace", "https://github.com/deepinsight/insightface/tree/master", "facial recognition"
),
}
SOURCE_TO_TASK = {
ModelSource.MCLIP: ModelTask.SEARCH,
ModelSource.OPENCLIP: ModelTask.SEARCH,
ModelSource.INSIGHTFACE: ModelTask.FACIAL_RECOGNITION,
}
RKNN_SOCS = ["rk3566", "rk3568", "rk3576", "rk3588"]
# glob to delete old UUID blobs when reuploading models
_uuid_char = "[a-fA-F0-9]"
_uuid_glob = _uuid_char * 8 + "-" + _uuid_char * 4 + "-" + _uuid_char * 4 + "-" + _uuid_char * 4 + "-" + _uuid_char * 12
DELETE_PATTERNS = [
"**/*onnx*",
"**/Constant*",
"**/*.weight",
"**/*.bias",
"**/*.proj",
"**/*in_proj_bias",
"**/*.npy",
"**/*.latent",
"**/*.pos_embed",
f"**/{_uuid_glob}",
]
@@ -1,20 +0,0 @@
from pathlib import Path
from ..constants import ModelSource
from .models import mclip, openclip
def export(
model_name: str, model_source: ModelSource, output_dir: Path, opset_version: int = 19, cache: bool = True
) -> None:
visual_dir = output_dir / "visual"
textual_dir = output_dir / "textual"
match model_source:
case ModelSource.MCLIP:
mclip.to_onnx(model_name, opset_version, visual_dir, textual_dir, cache=cache)
case ModelSource.OPENCLIP:
name, _, pretrained = model_name.partition("__")
config = openclip.OpenCLIPModelConfig(name, pretrained)
openclip.to_onnx(config, opset_version, visual_dir, textual_dir, cache=cache)
case _:
raise ValueError(f"Unsupported model source {model_source}")
@@ -1,77 +0,0 @@
import warnings
from pathlib import Path
from typing import Any
from .openclip import OpenCLIPModelConfig
from .openclip import to_onnx as openclip_to_onnx
from .util import get_model_path
_MCLIP_TO_OPENCLIP = {
"M-CLIP/XLM-Roberta-Large-Vit-B-32": OpenCLIPModelConfig("ViT-B-32", "openai"),
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus": OpenCLIPModelConfig("ViT-B-16-plus-240", "laion400m_e32"),
"M-CLIP/LABSE-Vit-L-14": OpenCLIPModelConfig("ViT-L-14", "openai"),
"M-CLIP/XLM-Roberta-Large-Vit-L-14": OpenCLIPModelConfig("ViT-L-14", "openai"),
}
def to_onnx(
model_name: str,
opset_version: int,
output_dir_visual: Path | str,
output_dir_textual: Path | str,
cache: bool = True,
) -> tuple[Path, Path]:
textual_path = get_model_path(output_dir_textual)
if not cache or not textual_path.exists():
import torch
from multilingual_clip.pt_multilingual_clip import MultilingualCLIP
from transformers import AutoTokenizer
torch.backends.mha.set_fastpath_enabled(False)
model = MultilingualCLIP.from_pretrained(model_name)
AutoTokenizer.from_pretrained(model_name).save_pretrained(output_dir_textual)
model.eval()
for param in model.parameters():
param.requires_grad_(False)
_export_text_encoder(model, textual_path, opset_version)
else:
print(f"Model {textual_path} already exists, skipping")
visual_path, _ = openclip_to_onnx(_MCLIP_TO_OPENCLIP[model_name], opset_version, output_dir_visual, cache=cache)
assert visual_path is not None, "Visual model export failed"
return visual_path, textual_path
def _export_text_encoder(model: Any, output_path: Path | str, opset_version: int) -> None:
import torch
from multilingual_clip.pt_multilingual_clip import MultilingualCLIP
output_path = Path(output_path)
def forward(self: MultilingualCLIP, input_ids: torch.Tensor, attention_mask: torch.Tensor) -> torch.Tensor:
embs = self.transformer(input_ids, attention_mask)[0]
embs = (embs * attention_mask.unsqueeze(2)).sum(dim=1) / attention_mask.sum(dim=1)[:, None]
embs = self.LinearTransformation(embs)
return torch.nn.functional.normalize(embs, dim=-1)
# unfortunately need to monkeypatch for tracing to work here
# otherwise it hits the 2GiB protobuf serialization limit
MultilingualCLIP.forward = forward
args = (torch.ones(1, 77, dtype=torch.int32), torch.ones(1, 77, dtype=torch.int32))
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
torch.onnx.export(
model,
args,
output_path.as_posix(),
input_names=["input_ids", "attention_mask"],
output_names=["embedding"],
opset_version=opset_version,
# dynamic_axes={
# "input_ids": {0: "batch_size", 1: "sequence_length"},
# "attention_mask": {0: "batch_size", 1: "sequence_length"},
# },
)
@@ -1,151 +0,0 @@
import warnings
from dataclasses import dataclass
from functools import cached_property
from pathlib import Path
from typing import Any
from .util import get_model_path, save_config
@dataclass
class OpenCLIPModelConfig:
name: str
pretrained: str
@cached_property
def model_config(self) -> dict[str, Any]:
import open_clip
config: dict[str, Any] | None = open_clip.get_model_config(self.name)
if config is None:
raise ValueError(f"Unknown model {self.name}")
return config
@property
def image_size(self) -> int:
image_size: int = self.model_config["vision_cfg"]["image_size"]
return image_size
@property
def sequence_length(self) -> int:
context_length: int = self.model_config["text_cfg"].get("context_length", 77)
return context_length
def to_onnx(
model_cfg: OpenCLIPModelConfig,
opset_version: int,
output_dir_visual: Path | str | None = None,
output_dir_textual: Path | str | None = None,
cache: bool = True,
) -> tuple[Path | None, Path | None]:
visual_path = None
textual_path = None
if output_dir_visual is not None:
output_dir_visual = Path(output_dir_visual)
visual_path = get_model_path(output_dir_visual)
if output_dir_textual is not None:
output_dir_textual = Path(output_dir_textual)
textual_path = get_model_path(output_dir_textual)
if cache and ((textual_path is None or textual_path.exists()) and (visual_path is None or visual_path.exists())):
print(f"Models {textual_path} and {visual_path} already exist, skipping")
return visual_path, textual_path
import open_clip
import torch
from transformers import AutoTokenizer
torch.backends.mha.set_fastpath_enabled(False)
model = open_clip.create_model(
model_cfg.name,
pretrained=model_cfg.pretrained,
jit=False,
require_pretrained=True,
)
text_vision_cfg = open_clip.get_model_config(model_cfg.name)
model.eval()
for param in model.parameters():
param.requires_grad_(False)
if visual_path is not None and output_dir_visual is not None:
if not cache or not visual_path.exists():
save_config(
open_clip.get_model_preprocess_cfg(model),
output_dir_visual / "preprocess_cfg.json",
)
save_config(text_vision_cfg, output_dir_visual.parent / "config.json")
_export_image_encoder(model, model_cfg, visual_path, opset_version)
else:
print(f"Model {visual_path} already exists, skipping")
if textual_path is not None and output_dir_textual is not None:
if not cache or not textual_path.exists():
tokenizer_name = text_vision_cfg["text_cfg"].get("hf_tokenizer_name", "openai/clip-vit-base-patch32")
AutoTokenizer.from_pretrained(tokenizer_name).save_pretrained(output_dir_textual)
_export_text_encoder(model, model_cfg, textual_path, opset_version)
else:
print(f"Model {textual_path} already exists, skipping")
return visual_path, textual_path
def _export_image_encoder(
model: Any, model_cfg: OpenCLIPModelConfig, output_path: Path | str, opset_version: int
) -> None:
import torch
output_path = Path(output_path)
def encode_image(image: torch.Tensor) -> torch.Tensor:
output = model.encode_image(image, normalize=True)
assert isinstance(output, torch.Tensor)
return output
model.forward = encode_image
args = (torch.randn(1, 3, model_cfg.image_size, model_cfg.image_size),)
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
torch.onnx.export(
model,
args,
output_path.as_posix(),
input_names=["image"],
output_names=["embedding"],
opset_version=opset_version,
# dynamic_axes={"image": {0: "batch_size"}},
)
def _export_text_encoder(
model: Any, model_cfg: OpenCLIPModelConfig, output_path: Path | str, opset_version: int
) -> None:
import torch
output_path = Path(output_path)
def encode_text(text: torch.Tensor) -> torch.Tensor:
output = model.encode_text(text, normalize=True)
assert isinstance(output, torch.Tensor)
return output
model.forward = encode_text
args = (torch.ones(1, model_cfg.sequence_length, dtype=torch.int32),)
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
torch.onnx.export(
model,
args,
output_path.as_posix(),
input_names=["text"],
output_names=["embedding"],
opset_version=opset_version,
# dynamic_axes={"text": {0: "batch_size"}},
)
@@ -1,15 +0,0 @@
import json
from pathlib import Path
from typing import Any
def get_model_path(output_dir: Path | str) -> Path:
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
return output_dir / "model.onnx"
def save_config(config: Any, output_path: Path | str) -> None:
output_path = Path(output_path)
output_path.parent.mkdir(parents=True, exist_ok=True)
json.dump(config, output_path.open("w"))
@@ -1,96 +0,0 @@
from pathlib import Path
from .constants import RKNN_SOCS
def _export_platform(
model_dir: Path,
target_platform: str,
inputs: list[str] | None = None,
input_size_list: list[list[int]] | None = None,
fuse_matmul_softmax_matmul_to_sdpa: bool = True,
cache: bool = True,
) -> None:
from rknn.api import RKNN
input_path = model_dir / "model.onnx"
output_path = model_dir / "rknpu" / target_platform / "model.rknn"
if cache and output_path.exists():
print(f"Model {input_path} already exists at {output_path}, skipping")
return
print(f"Exporting model {input_path} to {output_path}")
rknn = RKNN(verbose=False)
rknn.config(
target_platform=target_platform,
disable_rules=["fuse_matmul_softmax_matmul_to_sdpa"] if not fuse_matmul_softmax_matmul_to_sdpa else [],
enable_flash_attention=False,
model_pruning=True,
)
ret = rknn.load_onnx(model=input_path.as_posix(), inputs=inputs, input_size_list=input_size_list)
if ret != 0:
raise RuntimeError("Load failed!")
ret = rknn.build(do_quantization=False)
if ret != 0:
raise RuntimeError("Build failed!")
output_path.parent.mkdir(parents=True, exist_ok=True)
ret = rknn.export_rknn(output_path.as_posix())
if ret != 0:
raise RuntimeError("Export rknn model failed!")
def _export_platforms(
model_dir: Path,
inputs: list[str] | None = None,
input_size_list: list[list[int]] | None = None,
cache: bool = True,
) -> None:
fuse_matmul_softmax_matmul_to_sdpa = True
for soc in RKNN_SOCS:
try:
_export_platform(
model_dir,
soc,
inputs=inputs,
input_size_list=input_size_list,
fuse_matmul_softmax_matmul_to_sdpa=fuse_matmul_softmax_matmul_to_sdpa,
cache=cache,
)
except Exception as e:
print(f"Failed to export model for {soc}: {e}")
if "inputs or 'outputs' must be set" in str(e):
print("Retrying without fuse_matmul_softmax_matmul_to_sdpa")
fuse_matmul_softmax_matmul_to_sdpa = False
_export_platform(
model_dir,
soc,
inputs=inputs,
input_size_list=input_size_list,
fuse_matmul_softmax_matmul_to_sdpa=fuse_matmul_softmax_matmul_to_sdpa,
cache=cache,
)
def export(model_dir: Path, cache: bool = True) -> None:
textual = model_dir / "textual"
visual = model_dir / "visual"
detection = model_dir / "detection"
recognition = model_dir / "recognition"
if textual.is_dir():
_export_platforms(textual, cache=cache)
if visual.is_dir():
_export_platforms(visual, cache=cache)
if detection.is_dir():
_export_platforms(detection, inputs=["input.1"], input_size_list=[[1, 3, 640, 640]], cache=cache)
if recognition.is_dir():
_export_platforms(recognition, inputs=["input.1"], input_size_list=[[1, 3, 112, 112]], cache=cache)
@@ -1,22 +0,0 @@
import json
from pathlib import Path
models_dir = Path("models")
model_to_embed_dim = {}
for model_dir in models_dir.iterdir():
if not model_dir.is_dir():
continue
config_path = model_dir / "config.json"
if not config_path.exists():
print(f"Skipping {model_dir.name} as it does not have a config.json")
continue
with open(config_path) as f:
config = json.load(f)
embed_dim = config.get("embed_dim")
if embed_dim is None:
print(f"Skipping {model_dir.name} as it does not have an embed_dim")
continue
print(f"{model_dir.name}: {embed_dim}")
model_to_embed_dim[model_dir.name] = {"dimSize": embed_dim}
print(json.dumps(model_to_embed_dim))
@@ -1,121 +0,0 @@
import polars as pl
def collapsed_table(language: str, df: pl.DataFrame) -> str:
with pl.Config(
tbl_formatting="ASCII_MARKDOWN",
tbl_hide_column_data_types=True,
tbl_hide_dataframe_shape=True,
fmt_str_lengths=100,
tbl_rows=1000,
tbl_width_chars=1000,
):
return f"<details>\n<summary>{language}</summary>\n{str(df)}\n</details>"
languages = {
"en": "English",
"ar": "Arabic",
"bn": "Bengali",
"zh": "Chinese (Simplified)",
"hr": "Croatian",
"quz": "Cusco Quechua",
"cs": "Czech",
"da": "Danish",
"nl": "Dutch",
"fil": "Filipino",
"fi": "Finnish",
"fr": "French",
"de": "German",
"el": "Greek",
"he": "Hebrew",
"hi": "Hindi",
"hu": "Hungarian",
"id": "Indonesian",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"mi": "Maori",
"no": "Norwegian",
"fa": "Persian",
"pl": "Polish",
"pt": "Portuguese",
"ro": "Romanian",
"ru": "Russian",
"es": "Spanish",
"sw": "Swahili",
"sv": "Swedish",
"te": "Telugu",
"th": "Thai",
"tr": "Turkish",
"uk": "Ukrainian",
"vi": "Vietnamese",
}
profile_df = pl.scan_ndjson("profiling/*.json").select("pretrained_model", "peak_rss", "exec_time_ms")
eval_df = pl.scan_ndjson("results/*.json").select("model", "pretrained", "language", "metrics")
eval_df = eval_df.with_columns(
model=pl.col("model")
.str.replace("xlm-roberta-base", "XLM-Roberta-Base")
.str.replace("xlm-roberta-large", "XLM-Roberta-Large")
)
eval_df = eval_df.with_columns(pretrained_model=pl.concat_str(pl.col("model"), pl.col("pretrained"), separator="__"))
eval_df = eval_df.drop("model", "pretrained")
eval_df = eval_df.join(profile_df, on="pretrained_model")
eval_df = eval_df.with_columns(
recall=(
pl.col("metrics").struct.field("image_retrieval_recall@1")
+ pl.col("metrics").struct.field("image_retrieval_recall@5")
+ pl.col("metrics").struct.field("image_retrieval_recall@10")
)
* (100 / 3)
)
pareto_front = eval_df.join_where(
eval_df.select("language", "peak_rss", "exec_time_ms", "recall").rename(
{
"language": "language_other",
"peak_rss": "peak_rss_other",
"exec_time_ms": "exec_time_ms_other",
"recall": "recall_other",
}
),
(pl.col("language") == pl.col("language_other"))
& (pl.col("peak_rss_other") <= pl.col("peak_rss"))
& (pl.col("exec_time_ms_other") <= pl.col("exec_time_ms"))
& (pl.col("recall_other") >= pl.col("recall"))
& (
(pl.col("peak_rss_other") < pl.col("peak_rss"))
| (pl.col("exec_time_ms_other") < pl.col("exec_time_ms"))
| (pl.col("recall_other") > pl.col("recall"))
),
)
eval_df = eval_df.join(pareto_front, on=["pretrained_model", "language"], how="left")
eval_df = eval_df.with_columns(is_pareto=pl.col("recall_other").is_null())
eval_df = (
eval_df.drop("peak_rss_other", "exec_time_ms_other", "recall_other", "language_other")
.unique(subset=["pretrained_model", "language"])
.collect()
)
eval_df.write_parquet("model_info.parquet")
eval_df = eval_df.drop("metrics")
eval_df = eval_df.filter(pl.col("recall") >= 20)
eval_df = eval_df.sort("recall", descending=True)
eval_df = eval_df.select(
pl.col("pretrained_model").alias("Model"),
(pl.col("peak_rss") / 1024).round().cast(pl.UInt32).alias("Memory (MiB)"),
pl.col("exec_time_ms").round(2).alias("Execution Time (ms)"),
pl.col("language").alias("Language"),
pl.col("recall").round(2).alias("Recall (%)"),
pl.when(pl.col("is_pareto")).then(pl.lit("")).otherwise(pl.lit("")).alias("Pareto Optimal"),
)
for language in languages:
lang_df = eval_df.filter(pl.col("Language") == language).drop("Language")
if lang_df.shape[0] == 0:
continue
print(collapsed_table(languages[language], lang_df))
@@ -1,171 +0,0 @@
import subprocess
from pathlib import Path
from exporters.constants import ModelSource
from immich_model_exporter import clean_name
from immich_model_exporter.exporters.constants import SOURCE_TO_TASK
mclip = [
"M-CLIP/LABSE-Vit-L-14",
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus",
"M-CLIP/XLM-Roberta-Large-Vit-B-32",
"M-CLIP/XLM-Roberta-Large-Vit-L-14",
]
openclip = [
"RN101__openai",
"RN101__yfcc15m",
"RN50__cc12m",
"RN50__openai",
"RN50__yfcc15m",
"RN50x16__openai",
"RN50x4__openai",
"RN50x64__openai",
"ViT-B-16-SigLIP-256__webli",
"ViT-B-16-SigLIP-384__webli",
"ViT-B-16-SigLIP-512__webli",
"ViT-B-16-SigLIP-i18n-256__webli",
"ViT-B-16-SigLIP2__webli",
"ViT-B-16-SigLIP__webli",
"ViT-B-16-plus-240__laion400m_e31",
"ViT-B-16-plus-240__laion400m_e32",
"ViT-B-16__laion400m_e31",
"ViT-B-16__laion400m_e32",
"ViT-B-16__openai",
"ViT-B-32-SigLIP2-256__webli",
"ViT-B-32__laion2b-s34b-b79k",
"ViT-B-32__laion2b_e16",
"ViT-B-32__laion400m_e31",
"ViT-B-32__laion400m_e32",
"ViT-B-32__openai",
"ViT-H-14-378-quickgelu__dfn5b",
"ViT-H-14-quickgelu__dfn5b",
"ViT-H-14__laion2b-s32b-b79k",
"ViT-L-14-336__openai",
"ViT-L-14-quickgelu__dfn2b",
"ViT-L-14__laion2b-s32b-b82k",
"ViT-L-14__laion400m_e31",
"ViT-L-14__laion400m_e32",
"ViT-L-14__openai",
"ViT-L-16-SigLIP-256__webli",
"ViT-L-16-SigLIP-384__webli",
"ViT-L-16-SigLIP2-256__webli",
"ViT-L-16-SigLIP2-384__webli",
"ViT-L-16-SigLIP2-512__webli",
"ViT-SO400M-14-SigLIP-384__webli",
"ViT-SO400M-14-SigLIP2-378__webli",
"ViT-SO400M-14-SigLIP2__webli",
"ViT-SO400M-16-SigLIP2-256__webli",
"ViT-SO400M-16-SigLIP2-384__webli",
"ViT-SO400M-16-SigLIP2-512__webli",
"ViT-gopt-16-SigLIP2-256__webli",
"ViT-gopt-16-SigLIP2-384__webli",
"nllb-clip-base-siglip__mrl",
"nllb-clip-base-siglip__v1",
"nllb-clip-large-siglip__mrl",
"nllb-clip-large-siglip__v1",
"xlm-roberta-base-ViT-B-32__laion5b_s13b_b90k",
"xlm-roberta-large-ViT-H-14__frozen_laion5b_s13b_b90k",
]
insightface = [
"antelopev2",
"buffalo_l",
"buffalo_m",
"buffalo_s",
]
def export_models(models: list[str], source: ModelSource) -> None:
profiling_dir = Path("profiling")
profiling_dir.mkdir(exist_ok=True)
for model in models:
try:
model_dir = f"models/{clean_name(model)}"
task = SOURCE_TO_TASK[source]
print(f"Processing model {model}")
subprocess.check_call(["python", "-m", "immich_model_exporter", "export", model, source])
subprocess.check_call(
[
"python",
"-m",
"immich_model_exporter",
"profile",
model_dir,
task,
"--output_path",
profiling_dir / f"{model}.json",
]
)
subprocess.check_call(["python", "-m", "immich_model_exporter", "upload", model_dir])
except Exception as e:
print(f"Failed to export model {model}: {e}")
if __name__ == "__main__":
export_models(mclip, ModelSource.MCLIP)
export_models(openclip, ModelSource.OPENCLIP)
export_models(insightface, ModelSource.INSIGHTFACE)
Path("results").mkdir(exist_ok=True)
subprocess.check_call(
[
"python",
"clip_benchmark",
"eval",
"--pretrained_model",
*[name.replace("__", ",") for name in openclip],
"--task",
"zeroshot_retrieval",
"--dataset",
"crossmodal3600",
"--batch_size",
"64",
"--language",
"ar",
"bn",
"cs",
"da",
"de",
"el",
"en",
"es",
"fa",
"fi",
"fil",
"fr",
"he",
"hi",
"hr",
"hu",
"id",
"it",
"ja",
"ko",
"mi",
"nl",
"no",
"pl",
"pt",
"quz",
"ro",
"ru",
"sv",
"sw",
"te",
"th",
"tr",
"uk",
"vi",
"zh",
"--recall_k",
"1",
"5",
"10",
"--no_amp",
"--output",
"results/{dataset}_{language}_{model}_{pretrained}.json",
]
)
-60
View File
@@ -1,60 +0,0 @@
[project]
name = "immich_model_exporter"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10, <4.0"
dependencies = [
"huggingface-hub>=0.29.3",
"multilingual-clip>=1.0.10",
"onnx>=1.14.1",
"onnxruntime>=1.16.0",
"open-clip-torch>=2.31.0",
"typer>=0.15.2",
"rknn-toolkit2>=2.3.0",
"transformers>=4.49.0",
"tenacity>=9.0.0",
"clip-benchmark>=1.6.1",
"polars>=1.25.2",
]
[dependency-groups]
dev = ["black>=23.3.0", "mypy>=1.3.0", "ruff>=0.0.272"]
[tool.uv]
override-dependencies = [
"onnx>=1.16.0,<2",
"onnxruntime>=1.18.2,<2",
"torch>=2.4",
"torchvision>=0.21",
]
[tool.hatch.build.targets.sdist]
include = ["immich_model_exporter"]
[tool.hatch.build.targets.wheel]
include = ["immich_model_exporter"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.mypy]
python_version = "3.12"
follow_imports = "silent"
warn_redundant_casts = true
disallow_any_generics = true
check_untyped_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
[tool.ruff]
line-length = 120
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I"]
[tool.black]
line-length = 120
target-version = ['py312']
-1924
View File
File diff suppressed because it is too large Load Diff
+43
View File
@@ -0,0 +1,43 @@
import os
import signal
import subprocess
from pathlib import Path
from .config import log, non_prefixed_settings, settings
if source_ref := os.getenv("IMMICH_SOURCE_REF"):
log.info(f"Initializing Immich ML [{source_ref}]")
else:
log.info("Initializing Immich ML")
module_dir = Path(__file__).parent
try:
with subprocess.Popen(
[
"python",
"-m",
"gunicorn",
"immich_ml.main:app",
"-k",
"immich_ml.config.CustomUvicornWorker",
"-c",
module_dir / "gunicorn_conf.py",
"-b",
f"{non_prefixed_settings.immich_host}:{non_prefixed_settings.immich_port}",
"-w",
str(settings.workers),
"-t",
str(settings.worker_timeout),
"--log-config-json",
module_dir / "log_conf.json",
"--keep-alive",
str(settings.http_keepalive_timeout_s),
"--graceful-timeout",
"10",
],
) as cmd:
cmd.wait()
except KeyboardInterrupt:
cmd.send_signal(signal.SIGINT)
exit(cmd.returncode)
@@ -51,12 +51,12 @@ class Settings(BaseSettings):
protected_namespaces=("settings_",), protected_namespaces=("settings_",),
) )
cache_folder: Path = Path("/cache") cache_folder: Path = (Path.home() / ".cache" / "immich_ml").resolve()
model_ttl: int = 300 model_ttl: int = 300
model_ttl_poll_s: int = 10 model_ttl_poll_s: int = 10
host: str = "0.0.0.0"
port: int = 3003
workers: int = 1 workers: int = 1
worker_timeout: int = 300
http_keepalive_timeout_s: int = 2
test_full: bool = False test_full: bool = False
request_threads: int = os.cpu_count() or 4 request_threads: int = os.cpu_count() or 4
model_inter_op_threads: int = 0 model_inter_op_threads: int = 0
@@ -74,9 +74,11 @@ class Settings(BaseSettings):
return os.environ.get("MACHINE_LEARNING_DEVICE_ID", "0") return os.environ.get("MACHINE_LEARNING_DEVICE_ID", "0")
class LogSettings(BaseSettings): class NonPrefixedSettings(BaseSettings):
model_config = SettingsConfigDict(case_sensitive=False) model_config = SettingsConfigDict(case_sensitive=False)
immich_host: str = "[::]"
immich_port: int = 3003
immich_log_level: str = "info" immich_log_level: str = "info"
no_color: bool = False no_color: bool = False
@@ -100,14 +102,14 @@ LOG_LEVELS: dict[str, int] = {
} }
settings = Settings() settings = Settings()
log_settings = LogSettings() non_prefixed_settings = NonPrefixedSettings()
LOG_LEVEL = LOG_LEVELS.get(log_settings.immich_log_level.lower(), logging.INFO) LOG_LEVEL = LOG_LEVELS.get(non_prefixed_settings.immich_log_level.lower(), logging.INFO)
class CustomRichHandler(RichHandler): class CustomRichHandler(RichHandler):
def __init__(self) -> None: def __init__(self) -> None:
console = Console(color_system="standard", no_color=log_settings.no_color) console = Console(color_system="standard", no_color=non_prefixed_settings.no_color)
self.excluded = ["uvicorn", "starlette", "fastapi"] self.excluded = ["uvicorn", "starlette", "fastapi"]
super().__init__( super().__init__(
show_path=False, show_path=False,
+21
View File
@@ -0,0 +1,21 @@
{
"version": 1,
"disable_existing_loggers": false,
"handlers": {
"console": {
"class": "immich_ml.config.CustomRichHandler"
}
},
"loggers": {
"gunicorn.error": {
"handlers": [
"console"
]
}
},
"root": {
"handlers": [
"console"
]
}
}

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