Compare commits

...

165 Commits

Author SHA1 Message Date
Millun Atluri
ad786130ff Updated version to 3.3.0post3 2023-10-16 13:52:05 +11:00
Millun Atluri
77a444f3bc Updated JS & locale files 2023-10-16 13:49:31 +11:00
psychedelicious
24209b60a4 chore(ui): regen types 2023-10-16 13:38:07 +11:00
psychedelicious
cf2b847e33 fix(api): fix socketio breaking change
Fix for breaking change in `python-socketio` 5.10.0 in which `enter_room` and `leave_room` were made coroutines.
2023-10-16 13:20:29 +11:00
psychedelicious
5f35ad078d merge conflict: fix(db): use RLock instead of Lock 2023-10-16 13:20:05 +11:00
Surisen
43266b18c7 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 100.0% (1217 of 1217 strings)

Co-authored-by: Surisen <zhonghx0804@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-16 13:18:17 +11:00
Riccardo Giovanetti
d521145c36 translationBot(ui): update translation (Italian)
Currently translated at 97.5% (1187 of 1217 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-16 13:18:03 +11:00
psychedelicious
bf359bd91f chore(ui): update deps 2023-10-16 13:17:57 +11:00
Jonathan
25ad74922e Update facetools.py
Facetools nodes were cutting off faces that extended beyond chunk boundaries in some cases. All faces found are considered and are coalesced rather than pruned, meaning that you should not see half a face any more.
2023-10-16 13:17:53 +11:00
psychedelicious
d8c31e9ed5 translationBot(ui): update translation (Italian)
Currently translated at 91.9% (1119 of 1217 strings)

Co-authored-by: psychedelicious <mabianfu@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-16 13:17:49 +11:00
Riccardo Giovanetti
fc958217eb translationBot(ui): update translation (Italian)
Currently translated at 91.9% (1119 of 1217 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-16 13:17:45 +11:00
psychedelicious
5010412341 fix(ui): reset canvas batchIds on clear/batch cancel
Closes #4889
2023-10-16 13:17:41 +11:00
psychedelicious
0e93c4e856 fix(ui): use _other for control adapter collapse 2023-10-16 13:17:35 +11:00
psychedelicious
98e6c62214 fix(ui): fix control adapter translation string 2023-10-16 13:17:17 +11:00
psychedelicious
e1d2d382cf feat(ui): add tooltip to clear intermediates button when disabled 2023-10-16 13:17:05 +11:00
psychedelicious
d349e00965 feat(ui): disable clear intermediates button when queue has items 2023-10-16 13:17:00 +11:00
psychedelicious
bbe1097c05 chore(ui): lint 2023-10-16 13:16:54 +11:00
Marta Nahorniuk
a10acde5eb fixed problems 2023-10-16 13:16:50 +11:00
Marta Nahorniuk
171532ec44 fixed bug #4857 2023-10-16 13:16:45 +11:00
psychedelicious
54cbadeffa fix(nodes,ui): optional metadata
- Make all metadata items optional. This will reduce errors related to metadata not being provided when we update the backend but old queue items still exist
- Fix a bug in t2i adapter metadata handling where it checked for ip adapter metadata instaed of t2i adapter metadata
- Fix some metadata fields that were not using `InputField`
2023-10-16 13:16:40 +11:00
mickr777
a76e58017c Clean up communityNodes.md (#4870)
* Clean up communityNodes.md

* Update communityNodes.md
2023-10-16 13:15:48 +11:00
Hosted Weblate
17be3e1234 translationBot(ui): update translation files
Updated by "Remove blank strings" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-16 13:15:45 +11:00
Surisen
73ba6b03ab translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 100.0% (1216 of 1216 strings)

Co-authored-by: Surisen <zhonghx0804@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-16 13:15:41 +11:00
Dennis
6f37fbdee4 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (1216 of 1216 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-16 13:15:38 +11:00
Riccardo Giovanetti
1928d1af29 translationBot(ui): update translation (Italian)
Currently translated at 91.4% (1112 of 1216 strings)

translationBot(ui): update translation (Italian)

Currently translated at 90.4% (1100 of 1216 strings)

translationBot(ui): update translation (Italian)

Currently translated at 90.4% (1100 of 1216 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-16 13:15:31 +11:00
Lincoln Stein
f6127a1b6b brought in pypi release action from PR #4875 2023-10-14 10:24:43 -04:00
Lincoln Stein
7f457ca03d merge in PR #4880 and #4879 2023-10-14 10:14:35 -04:00
Lincoln Stein
2b972cda6c Merge remote-tracking branch 'origin/fix/ui/sync-translations' into release/3.3.0post2 2023-10-14 10:11:48 -04:00
Lincoln Stein
47b0e1d7b4 Merge remote-tracking branch 'origin/fix/backend/mallinfo-old-glibc' into release/3.3.0post2 2023-10-14 10:07:23 -04:00
Lincoln Stein
fe0a16c846 pin xformers to 0.0.21 and bump version 2023-10-14 10:00:50 -04:00
blessedcoolant
8c61cda4b8 Merge branch 'main' into fix/ui/sync-translations 2023-10-14 18:35:48 +05:30
psychedelicious
f19c6069a9 fix(backend): handle systems with glibc < 2.33
`mallinfo2` is not available on `glibc` < 2.33.

On these systems, we successfully load the library but get an `AttributeError` on attempting to access `mallinfo2`.

I'm not sure if the old `mallinfo` will work, and not sure how to install it safely to test, so for now we just handle the `AttributeError`.

This means the enhanced memory snapshot logic will be skipped for these systems, which isn't a big deal.
2023-10-14 09:00:11 -04:00
Paul Curry
75663ec81e feat (ui, generation): High Resolution Fix MVP in Text2Image Linear Flow (#4819)
* added HrfScale type with initial value

* working

* working

* working

* working

* working

* added addHrfToGraph

* continueing to implement this

* working on this

* comments

* working

* made hrf into its own collapse

* working on adding strength slider

* working

* working

* refactoring

* working

* change of this working: 0

* removed onnx support since apparently its not used

* working

* made scale integer

* trying out psycicpebbles idea

* working

* working on this

* working

* added toggle

* comments

* self review

* fixing things

* remove 'any' type

* fixing typing

* changed initial strength value to 3 (large values cause issues)

* set denoising start to be 1 - strength to resemble image to image

* set initial value

* added image to image

* pr1

* pr2

* updating to resolution finding

* working

* working

* working

* working

* working

* working

* working

* working

* working

* use memo

* connect rescale hw to noise

* working

* fixed min bug

* nit

* hides elements conditionally

* style

* feat(ui): add config for HRF, disable if feature disabled or ONNX model in use

* fix(ui): use `useCallback` for HRF toggle

---------

Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
2023-10-14 10:34:41 +00:00
glibesyck
40a568c060 Hide Metadata in Info View (#4787)
* #4665 hides value of the corresponding metadata item by click on arrow

* #4787 return recall button back:)

* #4787 optional hide of metadata item, truncation and scrolling

* remove unused import

* #4787 recall parameters as separate tab in panel

* #4787 remove debug code

* fix(ui): undo changes to dist/locales/en.json

This file is autogenerated by our translation system and shouldn't be modified directly

* feat(ui): use scrollbar-enabled component for parameter recall tab

* fix(ui): revert unnecessary changes to DataViewer component

---------

Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
2023-10-14 21:25:07 +11:00
psychedelicious
8e7aa74a16 Merge remote-tracking branch 'weblate/main' 2023-10-14 20:35:21 +11:00
Lincoln Stein
fcba4382b2 upload to pypi whenever a branch starting with "release/" is released 2023-10-13 12:49:24 -04:00
Lincoln Stein
6f45931711 tweak pypi workflow again 2023-10-13 12:04:25 -04:00
Lincoln Stein
278392d52c Update pypi-release.yml 2023-10-13 11:59:05 -04:00
Lincoln Stein
b2f942d714 tweak pypi workflow 2023-10-13 11:57:22 -04:00
Lincoln Stein
6bc2253894 bump version 2023-10-13 09:17:32 -04:00
psychedelicious
97d6f207d8 update version to 3.3.1 2023-10-13 21:52:53 +11:00
psychedelicious
dc9a9d7bec Revert "feat(backend): organise service dependencies"
This reverts commit 2a35d93a4d.
2023-10-13 21:49:55 +11:00
psychedelicious
15a3e49a40 Revert "feat(backend): move pagination models to own file"
This reverts commit 5048fc7c9e.
2023-10-13 21:49:45 +11:00
psychedelicious
7ccfc499dc Revert "feat(backend): rename db.py to sqlite.py"
This reverts commit 88bee96ca3.
2023-10-13 21:49:04 +11:00
psychedelicious
56d0d80a39 Revert "feat: refactor services folder/module structure"
This reverts commit 402cf9b0ee.
2023-10-13 21:48:48 +11:00
psychedelicious
2d64ee7f9e Revert "fix(backend): remove logic to create workflows column"
This reverts commit 3611029057.
2023-10-13 21:48:37 +11:00
psychedelicious
10ada84404 Revert "fix: merge conflicts"
This reverts commit f50f95a81d.
2023-10-13 21:48:28 +11:00
psychedelicious
7744e01e2c Revert "chore: rebase conflicts"
This reverts commit d1fce4b70b.
2023-10-13 21:48:18 +11:00
psychedelicious
ce8e5f9adf Revert "fix(app): remove errant logger line"
This reverts commit d2fb29cf0d.
2023-10-13 21:48:10 +11:00
psychedelicious
fc1021b6be Revert "chore(ui): regen types"
This reverts commit b89ec2b9c3.
2023-10-13 21:48:01 +11:00
psychedelicious
fadfe1dfe9 Revert "fix: fix test imports"
This reverts commit 9646157ad5.
2023-10-13 21:47:51 +11:00
psychedelicious
2716ae353b Revert "chore: typegen"
This reverts commit fc09ab7e13.
2023-10-13 21:47:31 +11:00
psychedelicious
bf9f7271dd add ref to pypi-release workflow to fix release with unintentional changes
v3.3.0 was accidentally released with more changes than intended. This workflows change will allow us release to pypi from a separate branch rather than main.
2023-10-13 18:58:36 +11:00
Millun Atluri
d3821594df Release/v3.3.0 (#4868)
## What type of PR is this? (check all applicable)

v3.3.0 release

## Have you discussed this change with the InvokeAI team?
- [X] Yes
- [ ] No, because:

      
## Have you updated all relevant documentation?
- [X] Yes
- [ ] No
2023-10-13 17:45:34 +11:00
Millun Atluri
631ad1596f Updated JS files 2023-10-13 17:27:41 +11:00
Millun Atluri
dfe32e467d Update version to 3.3.0 2023-10-13 17:27:41 +11:00
Millun Atluri
3575cf3b3b Enable the ram cache slider in invokeai-configure (#4866)
## What type of PR is this? (check all applicable)

- [ ] Refactor
- [ ] Feature
- [X] Bug Fix
- [ ] Optimization
- [ ] Documentation Update
- [ ] Community Node Submission


## Have you discussed this change with the InvokeAI team?
- [X] Yes
- [ ] No, because:

      
## Have you updated all relevant documentation?
- [ ] Yes
- [ ] No


## Description

The `invokeai-configure` TUI's slider for the RAM cache was not picking
up the current settings in `invokeai.yaml`, leading users to think their
change hadn't taken effect. This is fixed in this PR.


## Related Tickets & Documents

First described here:


https://discord.com/channels/1020123559063990373/1161919551441735711/1162058518417907743
2023-10-13 16:08:03 +11:00
Lincoln Stein
29c3f49182 enable the ram cache slider in invokeai-configure 2023-10-12 23:04:16 -04:00
Lincoln Stein
d2149a8380 Fix gratuitous, parasitic, endlessly repeated, pointless menu in version 3.2.0 (#4864)
## What type of PR is this? (check all applicable)

- [ ] Refactor
- [ ] Feature
- [X] Bug Fix
- [ ] Optimization
- [ ] Documentation Update
- [ ] Community Node Submission


## Have you discussed this change with the InvokeAI team?
- [X] Yes
- [ ] No, because:

      
## Have you updated all relevant documentation?
- [X] Yes
- [ ] No


## Description

A regression in 3.2.0 causes a seemingly nonsensical multiple choice
menu to appear when importing an SD-1 checkpoint model from the
autoimport directory. The menu asks the user to identify which type of
SD-2 model they are trying to import, which makes no sense.

In fact, the menu is popping up because there are now both "epsilon" and
"vprediction" SchedulerPredictionTypes for SD-1 as well as SD-2 models,
and the prober can't determine which prediction type to use. This PR
does two things:

1) rewords the menu as shown below
2) defaults to the most likely choice -- epsilon for v1 models and
vprediction for v2s

Here is the revised multiple-choice menu:
```
Please select the scheduler prediction type of the checkpoint named v1-5-pruned-emaonly.safetensors:
[1] "epsilon" - most v1.5 models and v2 models trained on 512 pixel images
[2] "vprediction" - v2 models trained on 768 pixel images and a few v1.5 models
[3] Accept the best guess;  you can fix it in the Web UI later

select [3]> 
```

Note that one can also put the appropriate config file into the same
directory as the checkpoint you wish to import. Give it the same name as
the model file, but with the extension `.yaml`. For example
`v1-5-pruned-emaonly.yaml`. The system will notice the yaml file and use
that, suppressing the quiz entirely.

## Related Tickets & Documents
- Closes #4768
- Closes #4827
2023-10-12 22:27:28 -04:00
Lincoln Stein
6532d9ffa1 closes #4768 2023-10-12 22:04:54 -04:00
Ryan Dick
89db8c83c2 Add a comment to warn about a necessary action before bumping the diffusers version. 2023-10-12 14:48:10 -04:00
psychedelicious
fc09ab7e13 chore: typegen 2023-10-12 12:15:06 -04:00
psychedelicious
9646157ad5 fix: fix test imports 2023-10-12 12:15:06 -04:00
psychedelicious
b89ec2b9c3 chore(ui): regen types 2023-10-12 12:15:06 -04:00
psychedelicious
d2fb29cf0d fix(app): remove errant logger line 2023-10-12 12:15:06 -04:00
psychedelicious
d1fce4b70b chore: rebase conflicts 2023-10-12 12:15:06 -04:00
psychedelicious
f50f95a81d fix: merge conflicts 2023-10-12 12:15:06 -04:00
psychedelicious
3611029057 fix(backend): remove logic to create workflows column
Snuck in there while I was organising
2023-10-12 12:15:06 -04:00
psychedelicious
402cf9b0ee feat: refactor services folder/module structure
Refactor services folder/module structure.

**Motivation**

While working on our services I've repeatedly encountered circular imports and a general lack of clarity regarding where to put things. The structure introduced goes a long way towards resolving those issues, setting us up for a clean structure going forward.

**Services**

Services are now in their own folder with a few files:

- `services/{service_name}/__init__.py`: init as needed, mostly empty now
- `services/{service_name}/{service_name}_base.py`: the base class for the service
- `services/{service_name}/{service_name}_{impl_type}.py`: the default concrete implementation of the service - typically one of `sqlite`, `default`, or `memory`
- `services/{service_name}/{service_name}_common.py`: any common items - models, exceptions, utilities, etc

Though it's a bit verbose to have the service name both as the folder name and the prefix for files, I found it is _extremely_ confusing to have all of the base classes just be named `base.py`. So, at the cost of some verbosity when importing things, I've included the service name in the filename.

There are some minor logic changes. For example, in `InvocationProcessor`, instead of assigning the model manager service to a variable to be used later in the file, the service is used directly via the `Invoker`.

**Shared**

Things that are used across disparate services are in `services/shared/`:

- `default_graphs.py`: previously in `services/`
- `graphs.py`: previously in `services/`
- `paginatation`: generic pagination models used in a few services
- `sqlite`: the `SqliteDatabase` class, other sqlite-specific things
2023-10-12 12:15:06 -04:00
psychedelicious
88bee96ca3 feat(backend): rename db.py to sqlite.py 2023-10-12 12:15:06 -04:00
psychedelicious
5048fc7c9e feat(backend): move pagination models to own file 2023-10-12 12:15:06 -04:00
psychedelicious
2a35d93a4d feat(backend): organise service dependencies
**Service Dependencies**

Services that depend on other services now access those services via the `Invoker` object. This object is provided to the service as a kwarg to its `start()` method.

Until now, most services did not utilize this feature, and several services required their dependencies to be initialized and passed in on init.

Additionally, _all_ services are now registered as invocation services - including the low-level services. This obviates issues with inter-dependent services we would otherwise experience as we add workflow storage.

**Database Access**

Previously, we were passing in a separate sqlite connection and corresponding lock as args to services in their init. A good amount of posturing was done in each service that uses the db.

These objects, along with the sqlite startup and cleanup logic, is now abstracted into a simple `SqliteDatabase` class. This creates the shared connection and lock objects, enables foreign keys, and provides a `clean()` method to do startup db maintenance.

This is not a service as it's only used by sqlite services.
2023-10-12 12:15:06 -04:00
psychedelicious
10fac5c085 feat(ui): set w/h to multiple of 64 on add t2i 2023-10-12 23:51:01 +11:00
Surisen
58850ded22 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 98.0% (1186 of 1210 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 98.0% (1179 of 1203 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 97.9% (1175 of 1199 strings)

Co-authored-by: Surisen <zhonghx0804@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
f21ebdfaca translationBot(ui): update translation files
Updated by "Remove blank strings" hook in Weblate.

translationBot(ui): update translation files

Updated by "Remove blank strings" hook in Weblate.

translationBot(ui): update translation files

Updated by "Remove blank strings" hook in Weblate.

translationBot(ui): update translation files

Updated by "Remove blank strings" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Surisen
c4f1e94cc4 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 92.0% (1104 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 92.1% (1105 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 83.2% (998 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 83.0% (996 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 67.5% (810 of 1199 strings)

Co-authored-by: Surisen <zhonghx0804@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
dbbcce9f70 translationBot(ui): update translation files
Updated by "Remove blank strings" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
cc52896bd9 translationBot(ui): update translation (Italian)
Currently translated at 85.5% (1026 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.7% (1016 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.7% (1016 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.4% (1012 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.3% (1011 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 83.5% (1002 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.5% (978 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 80.8% (969 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 80.7% (968 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
d12314fb8b translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Dennis
07b88e3017 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
gallegonovato
0b85f2487c translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (607 of 607 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
nemuruibai
5530d3fcd2 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 95.7% (579 of 605 strings)

Co-authored-by: nemuruibai <nemuruibai@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
System X - Files
7b1b24900f translationBot(ui): update translation (Russian)
Currently translated at 65.5% (643 of 981 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
f52fb45276 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
fb9f0339a2 translationBot(ui): update translation (Italian)
Currently translated at 81.2% (958 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.2% (958 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 76.6% (904 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 76.5% (903 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 71.9% (848 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 71.7% (845 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 71.7% (845 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 67.8% (799 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 58.5% (689 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 59.8% (640 of 1069 strings)

translationBot(ui): update translation (Italian)

Currently translated at 57.2% (612 of 1069 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (607 of 607 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (605 of 605 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (605 of 605 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (602 of 602 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
nemuruibai
ac501ee742 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 96.1% (579 of 602 strings)

Co-authored-by: nemuruibai <nemuruibai@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
2182ccf8d1 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
gallegonovato
fc674ff1b8 translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
708ac6a511 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Arnold Cordewiner
d0e0b64fc8 translationBot(ui): update translation (Dutch)
Currently translated at 99.6% (591 of 593 strings)

Co-authored-by: Arnold Cordewiner <weblate@a14r.be>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
a23580664d translationBot(ui): update translation (Italian)
Currently translated at 97.8% (589 of 602 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (603 of 603 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (599 of 599 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (596 of 596 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (595 of 595 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (595 of 595 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (593 of 593 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
gallegonovato
0edf01d927 translationBot(ui): update translation (Spanish)
Currently translated at 99.6% (601 of 603 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 99.5% (600 of 603 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (599 of 599 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (596 of 596 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 99.8% (594 of 595 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (593 of 593 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
4af5b9cbf7 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Simona Liliac
1bf973d46e translationBot(ui): update translation (Polish)
Currently translated at 58.4% (338 of 578 strings)

Co-authored-by: Simona Liliac <simonaliliac@yandex.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/pl/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Dennis
72252e3ff7 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (563 of 563 strings)

translationBot(ui): update translation (Dutch)

Currently translated at 100.0% (563 of 563 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
8d2596c288 translationBot(ui): update translation (Italian)
Currently translated at 100.0% (591 of 591 strings)

translationBot(ui): update translation (Italian)

Currently translated at 99.3% (587 of 591 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (586 of 586 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (578 of 578 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (563 of 563 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (559 of 559 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (559 of 559 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (551 of 551 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
0ffb7ecaa8 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
System X - Files
10f30fc599 translationBot(ui): update translation (Russian)
Currently translated at 99.5% (602 of 605 strings)

translationBot(ui): update translation (Russian)

Currently translated at 99.8% (605 of 606 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (596 of 596 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (595 of 595 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (593 of 593 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (592 of 592 strings)

translationBot(ui): update translation (Russian)

Currently translated at 90.2% (534 of 592 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (543 of 543 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
136570aa1d translationBot(ui): update translation (Italian)
Currently translated at 100.0% (550 of 550 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (548 of 548 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (546 of 546 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (541 of 541 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (544 of 544 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (543 of 543 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
5a30b507e0 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Song, Pengcheng
d47fbf283c translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 88.0% (477 of 542 strings)

Co-authored-by: Song, Pengcheng <17528592@qq.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
7c24312d3f translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Dennis
905cd8c639 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (538 of 538 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
nekowaiz
b13ba55c26 translationBot(ui): update translation (Chinese (Traditional))
Currently translated at 8.9% (48 of 536 strings)

Co-authored-by: nekowaiz <nekowaiz@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hant/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
System X - Files
82747e2260 translationBot(ui): update translation (Russian)
Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Russian)

Currently translated at 98.8% (536 of 542 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (533 of 533 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
910553f49a translationBot(ui): update translation (Italian)
Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (540 of 540 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (538 of 538 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 99.8% (535 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (533 of 533 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (533 of 533 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
gallegonovato
faabd83717 translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (591 of 591 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (586 of 586 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (578 of 578 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (563 of 563 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (550 of 550 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (550 of 550 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (548 of 548 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (546 of 546 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (544 of 544 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (543 of 543 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (540 of 540 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (533 of 533 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 99.8% (532 of 533 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
5ad77ece4b translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
System X - Files
6b3c413a5b translationBot(ui): update translation (Russian)
Currently translated at 100.0% (526 of 526 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
pand4z31
2a923d1f69 translationBot(ui): update translation (French)
Currently translated at 80.7% (419 of 519 strings)

Co-authored-by: pand4z31 <pand4zdev31@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/fr/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
c54a5ce10e translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Riccardo Giovanetti
14fbe41834 translationBot(ui): update translation (Italian)
Currently translated at 100.0% (526 of 526 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (523 of 523 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (519 of 519 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (515 of 515 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
gallegonovato
64ebe042b5 translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (526 of 526 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (523 of 523 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (519 of 519 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (515 of 515 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 23:45:46 +11:00
Hosted Weblate
5b2ed4ffb4 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:45:13 +00:00
Surisen
a49b8febed translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 98.0% (1186 of 1210 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 98.0% (1179 of 1203 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 97.9% (1175 of 1199 strings)

Co-authored-by: Surisen <zhonghx0804@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 12:45:12 +00:00
Hosted Weblate
e543db5a5d translationBot(ui): update translation files
Updated by "Remove blank strings" hook in Weblate.

translationBot(ui): update translation files

Updated by "Remove blank strings" hook in Weblate.

translationBot(ui): update translation files

Updated by "Remove blank strings" hook in Weblate.

translationBot(ui): update translation files

Updated by "Remove blank strings" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:45:10 +00:00
Surisen
670f3aa165 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 92.0% (1104 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 92.1% (1105 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 83.2% (998 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 83.0% (996 of 1199 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 67.5% (810 of 1199 strings)

Co-authored-by: Surisen <zhonghx0804@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 12:45:09 +00:00
Hosted Weblate
c0534d6519 translationBot(ui): update translation files
Updated by "Remove blank strings" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:45:07 +00:00
Riccardo Giovanetti
7bc6c23dfa translationBot(ui): update translation (Italian)
Currently translated at 87.1% (1054 of 1210 strings)

translationBot(ui): update translation (Italian)

Currently translated at 85.5% (1026 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.7% (1016 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.7% (1016 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.4% (1012 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 84.3% (1011 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 83.5% (1002 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.5% (978 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 80.8% (969 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 80.7% (968 of 1199 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.3% (959 of 1179 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:45:05 +00:00
Hosted Weblate
851ce36250 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:45:04 +00:00
Dennis
d631088566 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 12:45:01 +00:00
gallegonovato
f0bf733309 translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (607 of 607 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 12:45:00 +00:00
nemuruibai
65af7dd8f8 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 95.7% (579 of 605 strings)

Co-authored-by: nemuruibai <nemuruibai@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 12:44:59 +00:00
System X - Files
74c666aaa2 translationBot(ui): update translation (Russian)
Currently translated at 65.5% (643 of 981 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 12:44:58 +00:00
Hosted Weblate
45f9aca7e5 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:56 +00:00
Riccardo Giovanetti
9fb624f390 translationBot(ui): update translation (Italian)
Currently translated at 81.2% (958 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 81.2% (958 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 76.6% (904 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 76.5% (903 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 71.9% (848 of 1179 strings)

translationBot(ui): update translation (Italian)

Currently translated at 71.7% (845 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 71.7% (845 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 67.8% (799 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 58.5% (689 of 1177 strings)

translationBot(ui): update translation (Italian)

Currently translated at 59.8% (640 of 1069 strings)

translationBot(ui): update translation (Italian)

Currently translated at 57.2% (612 of 1069 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (607 of 607 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (605 of 605 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (605 of 605 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (602 of 602 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:44:53 +00:00
nemuruibai
962e51320b translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 96.1% (579 of 602 strings)

Co-authored-by: nemuruibai <nemuruibai@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 12:44:52 +00:00
Hosted Weblate
44932923eb translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:50 +00:00
gallegonovato
ffcf6dfde6 translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (605 of 605 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 12:44:46 +00:00
Hosted Weblate
be52eb153c translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:44 +00:00
Arnold Cordewiner
bd97c6b708 translationBot(ui): update translation (Dutch)
Currently translated at 99.6% (591 of 593 strings)

Co-authored-by: Arnold Cordewiner <weblate@a14r.be>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 12:44:41 +00:00
Riccardo Giovanetti
9940cbfa87 translationBot(ui): update translation (Italian)
Currently translated at 97.8% (589 of 602 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (603 of 603 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (599 of 599 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (596 of 596 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (595 of 595 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (595 of 595 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (593 of 593 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:44:40 +00:00
gallegonovato
77aeb9a421 translationBot(ui): update translation (Spanish)
Currently translated at 99.6% (601 of 603 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 99.5% (600 of 603 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (599 of 599 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (596 of 596 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 99.8% (594 of 595 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (593 of 593 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (592 of 592 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 12:44:38 +00:00
Hosted Weblate
2bad8b9f29 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:36 +00:00
Simona Liliac
8e943b2ce1 translationBot(ui): update translation (Polish)
Currently translated at 58.4% (338 of 578 strings)

Co-authored-by: Simona Liliac <simonaliliac@yandex.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/pl/
Translation: InvokeAI/Web UI
2023-10-12 12:44:33 +00:00
Dennis
5d3ab4f333 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (563 of 563 strings)

translationBot(ui): update translation (Dutch)

Currently translated at 100.0% (563 of 563 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 12:44:32 +00:00
Riccardo Giovanetti
1047d08835 translationBot(ui): update translation (Italian)
Currently translated at 100.0% (591 of 591 strings)

translationBot(ui): update translation (Italian)

Currently translated at 99.3% (587 of 591 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (586 of 586 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (578 of 578 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (563 of 563 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (559 of 559 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (559 of 559 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (551 of 551 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:44:30 +00:00
Hosted Weblate
516cc258f9 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:28 +00:00
System X - Files
7c2aa1dc20 translationBot(ui): update translation (Russian)
Currently translated at 99.5% (602 of 605 strings)

translationBot(ui): update translation (Russian)

Currently translated at 99.8% (605 of 606 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (596 of 596 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (595 of 595 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (593 of 593 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (592 of 592 strings)

translationBot(ui): update translation (Russian)

Currently translated at 90.2% (534 of 592 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (543 of 543 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 12:44:25 +00:00
Riccardo Giovanetti
035f1e12e1 translationBot(ui): update translation (Italian)
Currently translated at 100.0% (550 of 550 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (548 of 548 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (546 of 546 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (541 of 541 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (544 of 544 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (543 of 543 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:44:23 +00:00
Hosted Weblate
4c93202ee4 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:20 +00:00
Song, Pengcheng
227046bdb0 translationBot(ui): update translation (Chinese (Simplified))
Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Chinese (Simplified))

Currently translated at 88.0% (477 of 542 strings)

Co-authored-by: Song, Pengcheng <17528592@qq.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2023-10-12 12:44:17 +00:00
Hosted Weblate
83b123f1f6 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:15 +00:00
Dennis
320ef15ee9 translationBot(ui): update translation (Dutch)
Currently translated at 100.0% (538 of 538 strings)

Co-authored-by: Dennis <dennis@vanzoerlandt.nl>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/nl/
Translation: InvokeAI/Web UI
2023-10-12 12:44:11 +00:00
nekowaiz
6905c61912 translationBot(ui): update translation (Chinese (Traditional))
Currently translated at 8.9% (48 of 536 strings)

Co-authored-by: nekowaiz <nekowaiz@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hant/
Translation: InvokeAI/Web UI
2023-10-12 12:44:09 +00:00
System X - Files
494bde785e translationBot(ui): update translation (Russian)
Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Russian)

Currently translated at 98.8% (536 of 542 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (533 of 533 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 12:44:08 +00:00
Riccardo Giovanetti
732ab38ca6 translationBot(ui): update translation (Italian)
Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (540 of 540 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (538 of 538 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 99.8% (535 of 536 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (533 of 533 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (533 of 533 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:44:07 +00:00
gallegonovato
ba38aa56a5 translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (591 of 591 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (586 of 586 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (578 of 578 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (563 of 563 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (550 of 550 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (550 of 550 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (548 of 548 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (546 of 546 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (544 of 544 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (543 of 543 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (542 of 542 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (540 of 540 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (536 of 536 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (533 of 533 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 99.8% (532 of 533 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 12:44:04 +00:00
Hosted Weblate
0a48c5a712 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

translationBot(ui): update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:44:01 +00:00
System X - Files
133ab91c8d translationBot(ui): update translation (Russian)
Currently translated at 100.0% (526 of 526 strings)

translationBot(ui): update translation (Russian)

Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: System X - Files <vasyasos@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2023-10-12 12:43:56 +00:00
pand4z31
7a672bd2b2 translationBot(ui): update translation (French)
Currently translated at 80.7% (419 of 519 strings)

Co-authored-by: pand4z31 <pand4zdev31@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/fr/
Translation: InvokeAI/Web UI
2023-10-12 12:43:51 +00:00
Hosted Weblate
7dee6f51a3 translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2023-10-12 12:43:50 +00:00
Riccardo Giovanetti
3c029eee29 translationBot(ui): update translation (Italian)
Currently translated at 100.0% (526 of 526 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (523 of 523 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (519 of 519 strings)

translationBot(ui): update translation (Italian)

Currently translated at 100.0% (515 of 515 strings)

Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2023-10-12 12:43:47 +00:00
gallegonovato
1a8f9d1ecb translationBot(ui): update translation (Spanish)
Currently translated at 100.0% (526 of 526 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (523 of 523 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (519 of 519 strings)

translationBot(ui): update translation (Spanish)

Currently translated at 100.0% (515 of 515 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2023-10-12 12:43:45 +00:00
blessedcoolant
80d329c900 fix(ui): fix plurals (#4860) 2023-10-12 18:07:22 +05:30
psychedelicious
89db749d89 fix(ui): add missing translation strings 2023-10-12 22:46:47 +11:00
psychedelicious
18164fc72a fix(ui): prettier ignores translation files 2023-10-12 21:37:45 +11:00
psychedelicious
75de20af6a fix(ui): fix plurals in translation 2023-10-12 21:34:24 +11:00
blessedcoolant
cb1509bf52 feat(ui): add translation strings for clear intermediates (#4856)
## What type of PR is this? (check all applicable)

- [ ] Refactor
- [x] Feature
- [ ] Bug Fix
- [ ] Optimization
- [ ] Documentation Update
- [ ] Community Node Submission


## Description

feat(ui): add translation strings for clear intermediates

## Related Tickets & Documents

<!--
For pull requests that relate or close an issue, please include them
below. 

For example having the text: "closes #1234" would connect the current
pull
request to issue 1234.  And when we merge the pull request, Github will
automatically close the issue.
-->

- Related Issue #
- Closes #4851

## [optional] Are there any post deployment tasks we need to perform?

@Millu this can go into 3.3.0
2023-10-12 13:16:54 +05:30
psychedelicious
10cd814cf7 feat(ui): add translation strings for clear intermediates 2023-10-12 18:35:33 +11:00
psychedelicious
8ef38ecc7c fix(ui): only count enabled control adapters in collapse heading 2023-10-12 16:48:01 +11:00
Mary Hipp Rogers
69937d68d2 Maryhipp/dummy bulk download (#4852)
* UI for bulk downloading boards or groups of images

* placeholder route for bulk downloads that does nothing

* lint

---------

Co-authored-by: Mary Hipp <maryhipp@Marys-MacBook-Air.local>
2023-10-11 23:27:22 +00:00
Ryan Dick
40f9e49b5e Demote model cache logs from warning to debug based on the conversation here: https://discord.com/channels/1020123559063990373/1049495067846524939/1161647290189090816 2023-10-11 12:02:46 -04:00
Ryan Dick
98fa234529 Bump safetensors to ~=0.4.0 (#4844)
## What type of PR is this? (check all applicable)

- [ ] Refactor
- [ ] Feature
- [ ] Bug Fix
- [x] Optimization
- [ ] Documentation Update
- [ ] Community Node Submission

## Description

@Millu pointed out this safetensors PR a few weeks ago, which claimed to
offer a performance benefit:
https://github.com/huggingface/safetensors/pull/362 . It was superseded
by https://github.com/huggingface/safetensors/pull/363 and included in
the latest [safetensors 0.4.0
release](https://github.com/huggingface/safetensors/releases/tag/v0.4.0).

Here are the results from my local performance comparison:
```
Before(0.3.1) / After(0.4.0)

sdxl:main:tokenizer from disk to cpu in                              0.46s / 0.46s
sdxl:main:text_encoder from disk to cpu in                           2.12s / 2.32s
embroidered_style_v1_sdxl.safetensors:sdxl:lora' from disk to cpu in 0.67s / 0.36s
VoxelXL_v1.safetensors:sdxl:lora' from disk to cpu in                1.64s / 0.60s
ryan_db_sdxl_epoch640.safetensors:sdxl:lora' from disk to cpu in     2.46s / 1.40s
sdxl:main:tokenizer_2 from disk to cpu in                            0.37s / 0.39s
sdxl:main:text_encoder_2 from disk to cpu in                         3.78s / 4.70s
sdxl:main:unet from disk to cpu in                                   4.66s / 3.08s
sdxl:main:scheduler from disk to cpu in                              0.34s / 0.33s
sdxl:main:vae from disk to cpu in                                    0.66s / 0.51s

TOTAL GRAPH EXECUTION TIME:                                        56.489s / 53.416s
```

The benefit was marginal on my system (maybe even within measurement
error), but I figured we might as well pull it.
2023-10-11 09:40:47 -04:00
Ryan Dick
fe889235cc Bump safetensors to ~=0.4.0 2023-10-10 18:00:15 -04:00
114 changed files with 9216 additions and 2383 deletions

View File

@@ -28,7 +28,7 @@ jobs:
run: twine check dist/*
- name: check PyPI versions
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/v2.3'
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')
run: |
pip install --upgrade requests
python -c "\

View File

@@ -8,28 +8,42 @@ To download a node, simply download the `.py` node file from the link and add it
To use a community workflow, download the the `.json` node graph file and load it into Invoke AI via the **Load Workflow** button in the Workflow Editor.
--------------------------------
- Community Nodes
+ [Depth Map from Wavefront OBJ](#depth-map-from-wavefront-obj)
+ [Film Grain](#film-grain)
+ [Generative Grammar-Based Prompt Nodes](#generative-grammar-based-prompt-nodes)
+ [GPT2RandomPromptMaker](#gpt2randompromptmaker)
+ [Grid to Gif](#grid-to-gif)
+ [Halftone](#halftone)
+ [Ideal Size](#ideal-size)
+ [Image and Mask Composition Pack](#image-and-mask-composition-pack)
+ [Image to Character Art Image Nodes](#image-to-character-art-image-nodes)
+ [Image Picker](#image-picker)
+ [Load Video Frame](#load-video-frame)
+ [Make 3D](#make-3d)
+ [Oobabooga](#oobabooga)
+ [Prompt Tools](#prompt-tools)
+ [Retroize](#retroize)
+ [Size Stepper Nodes](#size-stepper-nodes)
+ [Text font to Image](#text-font-to-image)
+ [Thresholding](#thresholding)
+ [XY Image to Grid and Images to Grids nodes](#xy-image-to-grid-and-images-to-grids-nodes)
- [Example Node Template](#example-node-template)
- [Disclaimer](#disclaimer)
- [Help](#help)
--------------------------------
### Make 3D
### Depth Map from Wavefront OBJ
**Description:** Create compelling 3D stereo images from 2D originals.
**Description:** Render depth maps from Wavefront .obj files (triangulated) using this simple 3D renderer utilizing numpy and matplotlib to compute and color the scene. There are simple parameters to change the FOV, camera position, and model orientation.
**Node Link:** [https://gitlab.com/srcrr/shift3d/-/raw/main/make3d.py](https://gitlab.com/srcrr/shift3d)
To be imported, an .obj must use triangulated meshes, so make sure to enable that option if exporting from a 3D modeling program. This renderer makes each triangle a solid color based on its average depth, so it will cause anomalies if your .obj has large triangles. In Blender, the Remesh modifier can be helpful to subdivide a mesh into small pieces that work well given these limitations.
**Example Node Graph:** https://gitlab.com/srcrr/shift3d/-/raw/main/example-workflow.json?ref_type=heads&inline=false
**Node Link:** https://github.com/dwringer/depth-from-obj-node
**Output Examples**
![Painting of a cozy delapidated house](https://gitlab.com/srcrr/shift3d/-/raw/main/example-1.png){: style="height:512px;width:512px"}
![Photo of cute puppies](https://gitlab.com/srcrr/shift3d/-/raw/main/example-2.png){: style="height:512px;width:512px"}
--------------------------------
### Ideal Size
**Description:** This node calculates an ideal image size for a first pass of a multi-pass upscaling. The aim is to avoid duplication that results from choosing a size larger than the model is capable of.
**Node Link:** https://github.com/JPPhoto/ideal-size-node
**Example Usage:**
</br><img src="https://raw.githubusercontent.com/dwringer/depth-from-obj-node/main/depth_from_obj_usage.jpg" width="500" />
--------------------------------
### Film Grain
@@ -39,68 +53,19 @@ To use a community workflow, download the the `.json` node graph file and load i
**Node Link:** https://github.com/JPPhoto/film-grain-node
--------------------------------
### Image Picker
### Generative Grammar-Based Prompt Nodes
**Description:** This InvokeAI node takes in a collection of images and randomly chooses one. This can be useful when you have a number of poses to choose from for a ControlNet node, or a number of input images for another purpose.
**Description:** This set of 3 nodes generates prompts from simple user-defined grammar rules (loaded from custom files - examples provided below). The prompts are made by recursively expanding a special template string, replacing nonterminal "parts-of-speech" until no nonterminal terms remain in the string.
**Node Link:** https://github.com/JPPhoto/image-picker-node
This includes 3 Nodes:
- *Lookup Table from File* - loads a YAML file "prompt" section (or of a whole folder of YAML's) into a JSON-ified dictionary (Lookups output)
- *Lookups Entry from Prompt* - places a single entry in a new Lookups output under the specified heading
- *Prompt from Lookup Table* - uses a Collection of Lookups as grammar rules from which to randomly generate prompts.
--------------------------------
### Thresholding
**Node Link:** https://github.com/dwringer/generative-grammar-prompt-nodes
**Description:** This node generates masks for highlights, midtones, and shadows given an input image. You can optionally specify a blur for the lookup table used in making those masks from the source image.
**Node Link:** https://github.com/JPPhoto/thresholding-node
**Examples**
Input:
![image](https://github.com/invoke-ai/InvokeAI/assets/34005131/c88ada13-fb3d-484c-a4fe-947b44712632){: style="height:512px;width:512px"}
Highlights/Midtones/Shadows:
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/727021c1-36ff-4ec8-90c8-105e00de986d" style="width: 30%" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/0b721bfc-f051-404e-b905-2f16b824ddfe" style="width: 30%" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/04c1297f-1c88-42b6-a7df-dd090b976286" style="width: 30%" />
Highlights/Midtones/Shadows (with LUT blur enabled):
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/19aa718a-70c1-4668-8169-d68f4bd13771" style="width: 30%" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/0a440e43-697f-4d17-82ee-f287467df0a5" style="width: 30%" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/0701fd0f-2ca7-4fe2-8613-2b52547bafce" style="width: 30%" />
--------------------------------
### Halftone
**Description**: Halftone converts the source image to grayscale and then performs halftoning. CMYK Halftone converts the image to CMYK and applies a per-channel halftoning to make the source image look like a magazine or newspaper. For both nodes, you can specify angles and halftone dot spacing.
**Node Link:** https://github.com/JPPhoto/halftone-node
**Example**
Input:
![image](https://github.com/invoke-ai/InvokeAI/assets/34005131/fd5efb9f-4355-4409-a1c2-c1ca99e0cab4){: style="height:512px;width:512px"}
Halftone Output:
![image](https://github.com/invoke-ai/InvokeAI/assets/34005131/7e606f29-e68f-4d46-b3d5-97f799a4ec2f){: style="height:512px;width:512px"}
CMYK Halftone Output:
![image](https://github.com/invoke-ai/InvokeAI/assets/34005131/c59c578f-db8e-4d66-8c66-2851752d75ea){: style="height:512px;width:512px"}
--------------------------------
### Retroize
**Description:** Retroize is a collection of nodes for InvokeAI to "Retroize" images. Any image can be given a fresh coat of retro paint with these nodes, either from your gallery or from within the graph itself. It includes nodes to pixelize, quantize, palettize, and ditherize images; as well as to retrieve palettes from existing images.
**Node Link:** https://github.com/Ar7ific1al/invokeai-retroizeinode/
**Retroize Output Examples**
![image](https://github.com/Ar7ific1al/InvokeAI_nodes_retroize/assets/2306586/de8b4fa6-324c-4c2d-b36c-297600c73974)
**Example Usage:**
</br><img src="https://raw.githubusercontent.com/dwringer/generative-grammar-prompt-nodes/main/lookuptables_usage.jpg" width="500" />
--------------------------------
### GPT2RandomPromptMaker
@@ -113,76 +78,49 @@ CMYK Halftone Output:
Generated Prompt: An enchanted weapon will be usable by any character regardless of their alignment.
![9acf5aef-7254-40dd-95b3-8eac431dfab0 (1)](https://github.com/mickr777/InvokeAI/assets/115216705/8496ba09-bcdd-4ff7-8076-ff213b6a1e4c)
<img src="https://github.com/mickr777/InvokeAI/assets/115216705/8496ba09-bcdd-4ff7-8076-ff213b6a1e4c" width="200" />
--------------------------------
### Load Video Frame
### Grid to Gif
**Description:** This is a video frame image provider + indexer/video creation nodes for hooking up to iterators and ranges and ControlNets and such for invokeAI node experimentation. Think animation + ControlNet outputs.
**Description:** One node that turns a grid image into an image collection, one node that turns an image collection into a gif.
**Node Link:** https://github.com/helix4u/load_video_frame
**Node Link:** https://github.com/mildmisery/invokeai-GridToGifNode/blob/main/GridToGif.py
**Example Node Graph:** https://github.com/helix4u/load_video_frame/blob/main/Example_Workflow.json
**Example Node Graph:** https://github.com/mildmisery/invokeai-GridToGifNode/blob/main/Grid%20to%20Gif%20Example%20Workflow.json
**Output Example:**
**Output Examples**
![Example animation](https://github.com/helix4u/load_video_frame/blob/main/testmp4_embed_converted.gif)
[Full mp4 of Example Output test.mp4](https://github.com/helix4u/load_video_frame/blob/main/test.mp4)
<img src="https://raw.githubusercontent.com/mildmisery/invokeai-GridToGifNode/main/input.png" width="300" />
<img src="https://raw.githubusercontent.com/mildmisery/invokeai-GridToGifNode/main/output.gif" width="300" />
--------------------------------
### Halftone
### Oobabooga
**Description**: Halftone converts the source image to grayscale and then performs halftoning. CMYK Halftone converts the image to CMYK and applies a per-channel halftoning to make the source image look like a magazine or newspaper. For both nodes, you can specify angles and halftone dot spacing.
**Description:** asks a local LLM running in Oobabooga's Text-Generation-Webui to write a prompt based on the user input.
**Node Link:** https://github.com/JPPhoto/halftone-node
**Link:** https://github.com/sammyf/oobabooga-node
**Example**
Input:
**Example:**
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/fd5efb9f-4355-4409-a1c2-c1ca99e0cab4" width="300" />
"describe a new mystical creature in its natural environment"
Halftone Output:
*can return*
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/7e606f29-e68f-4d46-b3d5-97f799a4ec2f" width="300" />
"The mystical creature I am describing to you is called the "Glimmerwing". It is a majestic, iridescent being that inhabits the depths of the most enchanted forests and glimmering lakes. Its body is covered in shimmering scales that reflect every color of the rainbow, and it has delicate, translucent wings that sparkle like diamonds in the sunlight. The Glimmerwing's home is a crystal-clear lake, surrounded by towering trees with leaves that shimmer like jewels. In this serene environment, the Glimmerwing spends its days swimming gracefully through the water, chasing schools of glittering fish and playing with the gentle ripples of the lake's surface.
As the sun sets, the Glimmerwing perches on a branch of one of the trees, spreading its wings to catch the last rays of light. The creature's scales glow softly, casting a rainbow of colors across the forest floor. The Glimmerwing sings a haunting melody, its voice echoing through the stillness of the night air. Its song is said to have the power to heal the sick and bring peace to troubled souls. Those who are lucky enough to hear the Glimmerwing's song are forever changed by its beauty and grace."
CMYK Halftone Output:
![glimmerwing_small](https://github.com/sammyf/oobabooga-node/assets/42468608/cecdd820-93dd-4c35-abbf-607e001fb2ed)
**Requirement**
a Text-Generation-Webui instance (might work remotely too, but I never tried it) and obviously InvokeAI 3.x
**Note**
This node works best with SDXL models, especially as the style can be described independantly of the LLM's output.
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/c59c578f-db8e-4d66-8c66-2851752d75ea" width="300" />
--------------------------------
### Depth Map from Wavefront OBJ
### Ideal Size
**Description:** Render depth maps from Wavefront .obj files (triangulated) using this simple 3D renderer utilizing numpy and matplotlib to compute and color the scene. There are simple parameters to change the FOV, camera position, and model orientation.
**Description:** This node calculates an ideal image size for a first pass of a multi-pass upscaling. The aim is to avoid duplication that results from choosing a size larger than the model is capable of.
To be imported, an .obj must use triangulated meshes, so make sure to enable that option if exporting from a 3D modeling program. This renderer makes each triangle a solid color based on its average depth, so it will cause anomalies if your .obj has large triangles. In Blender, the Remesh modifier can be helpful to subdivide a mesh into small pieces that work well given these limitations.
**Node Link:** https://github.com/dwringer/depth-from-obj-node
**Example Usage:**
![depth from obj usage graph](https://raw.githubusercontent.com/dwringer/depth-from-obj-node/main/depth_from_obj_usage.jpg)
--------------------------------
### Generative Grammar-Based Prompt Nodes
**Description:** This set of 3 nodes generates prompts from simple user-defined grammar rules (loaded from custom files - examples provided below). The prompts are made by recursively expanding a special template string, replacing nonterminal "parts-of-speech" until no more nonterminal terms remain in the string.
This includes 3 Nodes:
- *Lookup Table from File* - loads a YAML file "prompt" section (or of a whole folder of YAML's) into a JSON-ified dictionary (Lookups output)
- *Lookups Entry from Prompt* - places a single entry in a new Lookups output under the specified heading
- *Prompt from Lookup Table* - uses a Collection of Lookups as grammar rules from which to randomly generate prompts.
**Node Link:** https://github.com/dwringer/generative-grammar-prompt-nodes
**Example Usage:**
![lookups usage example graph](https://raw.githubusercontent.com/dwringer/generative-grammar-prompt-nodes/main/lookuptables_usage.jpg)
**Node Link:** https://github.com/JPPhoto/ideal-size-node
--------------------------------
### Image and Mask Composition Pack
@@ -208,45 +146,88 @@ This includes 15 Nodes:
- *Text Mask (simple 2D)* - create and position a white on black (or black on white) line of text using any font locally available to Invoke.
**Node Link:** https://github.com/dwringer/composition-nodes
**Nodes and Output Examples:**
![composition nodes usage graph](https://raw.githubusercontent.com/dwringer/composition-nodes/main/composition_pack_overview.jpg)
</br><img src="https://raw.githubusercontent.com/dwringer/composition-nodes/main/composition_pack_overview.jpg" width="500" />
--------------------------------
### Size Stepper Nodes
### Image to Character Art Image Nodes
**Description:** This is a set of nodes for calculating the necessary size increments for doing upscaling workflows. Use the *Final Size & Orientation* node to enter your full size dimensions and orientation (portrait/landscape/random), then plug that and your initial generation dimensions into the *Ideal Size Stepper* and get 1, 2, or 3 intermediate pairs of dimensions for upscaling. Note this does not output the initial size or full size dimensions: the 1, 2, or 3 outputs of this node are only the intermediate sizes.
**Description:** Group of nodes to convert an input image into ascii/unicode art Image
A third node is included, *Random Switch (Integers)*, which is just a generic version of Final Size with no orientation selection.
**Node Link:** https://github.com/dwringer/size-stepper-nodes
**Example Usage:**
![size stepper usage graph](https://raw.githubusercontent.com/dwringer/size-stepper-nodes/main/size_nodes_usage.jpg)
--------------------------------
### Text font to Image
**Description:** text font to text image node for InvokeAI, download a font to use (or if in font cache uses it from there), the text is always resized to the image size, but can control that with padding, optional 2nd line
**Node Link:** https://github.com/mickr777/textfontimage
**Node Link:** https://github.com/mickr777/imagetoasciiimage
**Output Examples**
![a3609d48-d9b7-41f0-b280-063d857986fb](https://github.com/mickr777/InvokeAI/assets/115216705/c21b0af3-d9c6-4c16-9152-846a23effd36)
Results after using the depth controlnet
![9133eabb-bcda-4326-831e-1b641228b178](https://github.com/mickr777/InvokeAI/assets/115216705/915f1a53-968e-43eb-aa61-07cd8f1a733a)
![4f9a3fa8-9be9-4236-8a3e-fcec66decd2a](https://github.com/mickr777/InvokeAI/assets/115216705/821ef89e-8a60-44f5-b94e-471a9d8690cc)
![babd69c4-9d60-4a55-a834-5e8397f62610](https://github.com/mickr777/InvokeAI/assets/115216705/2befcb6d-49f4-4bfd-b5fc-1fee19274f89)
<img src="https://user-images.githubusercontent.com/115216705/271817646-8e061fcc-9a2c-4fa9-bcc7-c0f7b01e9056.png" width="300" /><img src="https://github.com/mickr777/imagetoasciiimage/assets/115216705/3c4990eb-2f42-46b9-90f9-0088b939dc6a" width="300" /></br>
<img src="https://github.com/mickr777/imagetoasciiimage/assets/115216705/fee7f800-a4a8-41e2-a66b-c66e4343307e" width="300" />
<img src="https://github.com/mickr777/imagetoasciiimage/assets/115216705/1d9c1003-a45f-45c2-aac7-46470bb89330" width="300" />
--------------------------------
### Image Picker
**Description:** This InvokeAI node takes in a collection of images and randomly chooses one. This can be useful when you have a number of poses to choose from for a ControlNet node, or a number of input images for another purpose.
**Node Link:** https://github.com/JPPhoto/image-picker-node
--------------------------------
### Load Video Frame
**Description:** This is a video frame image provider + indexer/video creation nodes for hooking up to iterators and ranges and ControlNets and such for invokeAI node experimentation. Think animation + ControlNet outputs.
**Node Link:** https://github.com/helix4u/load_video_frame
**Example Node Graph:** https://github.com/helix4u/load_video_frame/blob/main/Example_Workflow.json
**Output Example:**
<img src="https://github.com/helix4u/load_video_frame/blob/main/testmp4_embed_converted.gif" width="500" />
[Full mp4 of Example Output test.mp4](https://github.com/helix4u/load_video_frame/blob/main/test.mp4)
--------------------------------
### Make 3D
**Description:** Create compelling 3D stereo images from 2D originals.
**Node Link:** [https://gitlab.com/srcrr/shift3d/-/raw/main/make3d.py](https://gitlab.com/srcrr/shift3d)
**Example Node Graph:** https://gitlab.com/srcrr/shift3d/-/raw/main/example-workflow.json?ref_type=heads&inline=false
**Output Examples**
<img src="https://gitlab.com/srcrr/shift3d/-/raw/main/example-1.png" width="300" />
<img src="https://gitlab.com/srcrr/shift3d/-/raw/main/example-2.png" width="300" />
--------------------------------
### Oobabooga
**Description:** asks a local LLM running in Oobabooga's Text-Generation-Webui to write a prompt based on the user input.
**Link:** https://github.com/sammyf/oobabooga-node
**Example:**
"describe a new mystical creature in its natural environment"
*can return*
"The mystical creature I am describing to you is called the "Glimmerwing". It is a majestic, iridescent being that inhabits the depths of the most enchanted forests and glimmering lakes. Its body is covered in shimmering scales that reflect every color of the rainbow, and it has delicate, translucent wings that sparkle like diamonds in the sunlight. The Glimmerwing's home is a crystal-clear lake, surrounded by towering trees with leaves that shimmer like jewels. In this serene environment, the Glimmerwing spends its days swimming gracefully through the water, chasing schools of glittering fish and playing with the gentle ripples of the lake's surface.
As the sun sets, the Glimmerwing perches on a branch of one of the trees, spreading its wings to catch the last rays of light. The creature's scales glow softly, casting a rainbow of colors across the forest floor. The Glimmerwing sings a haunting melody, its voice echoing through the stillness of the night air. Its song is said to have the power to heal the sick and bring peace to troubled souls. Those who are lucky enough to hear the Glimmerwing's song are forever changed by its beauty and grace."
<img src="https://github.com/sammyf/oobabooga-node/assets/42468608/cecdd820-93dd-4c35-abbf-607e001fb2ed" width="300" />
**Requirement**
a Text-Generation-Webui instance (might work remotely too, but I never tried it) and obviously InvokeAI 3.x
**Note**
This node works best with SDXL models, especially as the style can be described independently of the LLM's output.
--------------------------------
### Prompt Tools
**Description:** A set of InvokeAI nodes that add general prompt manipulation tools. These where written to accompany the PromptsFromFile node and other prompt generation nodes.
**Description:** A set of InvokeAI nodes that add general prompt manipulation tools. These were written to accompany the PromptsFromFile node and other prompt generation nodes.
1. PromptJoin - Joins to prompts into one.
2. PromptReplace - performs a search and replace on a prompt. With the option of using regex.
@@ -263,51 +244,83 @@ See full docs here: https://github.com/skunkworxdark/Prompt-tools-nodes/edit/mai
**Node Link:** https://github.com/skunkworxdark/Prompt-tools-nodes
--------------------------------
### Retroize
**Description:** Retroize is a collection of nodes for InvokeAI to "Retroize" images. Any image can be given a fresh coat of retro paint with these nodes, either from your gallery or from within the graph itself. It includes nodes to pixelize, quantize, palettize, and ditherize images; as well as to retrieve palettes from existing images.
**Node Link:** https://github.com/Ar7ific1al/invokeai-retroizeinode/
**Retroize Output Examples**
<img src="https://github.com/Ar7ific1al/InvokeAI_nodes_retroize/assets/2306586/de8b4fa6-324c-4c2d-b36c-297600c73974" width="500" />
--------------------------------
### Size Stepper Nodes
**Description:** This is a set of nodes for calculating the necessary size increments for doing upscaling workflows. Use the *Final Size & Orientation* node to enter your full size dimensions and orientation (portrait/landscape/random), then plug that and your initial generation dimensions into the *Ideal Size Stepper* and get 1, 2, or 3 intermediate pairs of dimensions for upscaling. Note this does not output the initial size or full size dimensions: the 1, 2, or 3 outputs of this node are only the intermediate sizes.
A third node is included, *Random Switch (Integers)*, which is just a generic version of Final Size with no orientation selection.
**Node Link:** https://github.com/dwringer/size-stepper-nodes
**Example Usage:**
</br><img src="https://raw.githubusercontent.com/dwringer/size-stepper-nodes/main/size_nodes_usage.jpg" width="500" />
--------------------------------
### Text font to Image
**Description:** text font to text image node for InvokeAI, download a font to use (or if in font cache uses it from there), the text is always resized to the image size, but can control that with padding, optional 2nd line
**Node Link:** https://github.com/mickr777/textfontimage
**Output Examples**
<img src="https://github.com/mickr777/InvokeAI/assets/115216705/c21b0af3-d9c6-4c16-9152-846a23effd36" width="300" />
Results after using the depth controlnet
<img src="https://github.com/mickr777/InvokeAI/assets/115216705/915f1a53-968e-43eb-aa61-07cd8f1a733a" width="300" />
<img src="https://github.com/mickr777/InvokeAI/assets/115216705/821ef89e-8a60-44f5-b94e-471a9d8690cc" width="300" />
<img src="https://github.com/mickr777/InvokeAI/assets/115216705/2befcb6d-49f4-4bfd-b5fc-1fee19274f89" width="300" />
--------------------------------
### Thresholding
**Description:** This node generates masks for highlights, midtones, and shadows given an input image. You can optionally specify a blur for the lookup table used in making those masks from the source image.
**Node Link:** https://github.com/JPPhoto/thresholding-node
**Examples**
Input:
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/c88ada13-fb3d-484c-a4fe-947b44712632" width="300" />
Highlights/Midtones/Shadows:
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/727021c1-36ff-4ec8-90c8-105e00de986d" width="300" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/0b721bfc-f051-404e-b905-2f16b824ddfe" width="300" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/04c1297f-1c88-42b6-a7df-dd090b976286" width="300" />
Highlights/Midtones/Shadows (with LUT blur enabled):
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/19aa718a-70c1-4668-8169-d68f4bd13771" width="300" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/0a440e43-697f-4d17-82ee-f287467df0a5" width="300" />
<img src="https://github.com/invoke-ai/InvokeAI/assets/34005131/0701fd0f-2ca7-4fe2-8613-2b52547bafce" width="300" />
--------------------------------
### XY Image to Grid and Images to Grids nodes
**Description:** Image to grid nodes and supporting tools.
1. "Images To Grids" node - Takes a collection of images and creates a grid(s) of images. If there are more images than the size of a single grid then mutilple grids will be created until it runs out of images.
2. "XYImage To Grid" node - Converts a collection of XYImages into a labeled Grid of images. The XYImages collection has to be built using the supporoting nodes. See example node setups for more details.
1. "Images To Grids" node - Takes a collection of images and creates a grid(s) of images. If there are more images than the size of a single grid then multiple grids will be created until it runs out of images.
2. "XYImage To Grid" node - Converts a collection of XYImages into a labeled Grid of images. The XYImages collection has to be built using the supporting nodes. See example node setups for more details.
See full docs here: https://github.com/skunkworxdark/XYGrid_nodes/edit/main/README.md
**Node Link:** https://github.com/skunkworxdark/XYGrid_nodes
--------------------------------
### Image to Character Art Image Node's
**Description:** Group of nodes to convert an input image into ascii/unicode art Image
**Node Link:** https://github.com/mickr777/imagetoasciiimage
**Output Examples**
<img src="https://github.com/invoke-ai/InvokeAI/assets/115216705/8e061fcc-9a2c-4fa9-bcc7-c0f7b01e9056" width="300" />
<img src="https://github.com/mickr777/imagetoasciiimage/assets/115216705/3c4990eb-2f42-46b9-90f9-0088b939dc6a" width="300" /></br>
<img src="https://github.com/mickr777/imagetoasciiimage/assets/115216705/fee7f800-a4a8-41e2-a66b-c66e4343307e" width="300" />
<img src="https://github.com/mickr777/imagetoasciiimage/assets/115216705/1d9c1003-a45f-45c2-aac7-46470bb89330" width="300" />
--------------------------------
### Grid to Gif
**Description:** One node that turns a grid image into an image colletion, one node that turns an image collection into a gif
**Node Link:** https://github.com/mildmisery/invokeai-GridToGifNode/blob/main/GridToGif.py
**Example Node Graph:** https://github.com/mildmisery/invokeai-GridToGifNode/blob/main/Grid%20to%20Gif%20Example%20Workflow.json
**Output Examples**
<img src="https://raw.githubusercontent.com/mildmisery/invokeai-GridToGifNode/main/input.png" width="300" />
<img src="https://raw.githubusercontent.com/mildmisery/invokeai-GridToGifNode/main/output.gif" width="300" />
--------------------------------
### Example Node Template
**Description:** This node allows you to do super cool things with InvokeAI.
@@ -318,7 +331,7 @@ See full docs here: https://github.com/skunkworxdark/XYGrid_nodes/edit/main/READ
**Output Examples**
![Example Image](https://invoke-ai.github.io/InvokeAI/assets/invoke_ai_banner.png){: style="height:115px;width:240px"}
</br><img src="https://invoke-ai.github.io/InvokeAI/assets/invoke_ai_banner.png" width="500" />
## Disclaimer

View File

@@ -322,3 +322,20 @@ async def unstar_images_in_list(
return ImagesUpdatedFromListResult(updated_image_names=updated_image_names)
except Exception:
raise HTTPException(status_code=500, detail="Failed to unstar images")
class ImagesDownloaded(BaseModel):
response: Optional[str] = Field(
description="If defined, the message to display to the user when images begin downloading"
)
@images_router.post("/download", operation_id="download_images_from_list", response_model=ImagesDownloaded)
async def download_images_from_list(
image_names: list[str] = Body(description="The list of names of images to download", embed=True),
board_id: Optional[str] = Body(
default=None, description="The board from which image should be downloaded from", embed=True
),
) -> ImagesDownloaded:
# return ImagesDownloaded(response="Your images are downloading")
raise HTTPException(status_code=501, detail="Endpoint is not yet implemented")

View File

@@ -30,8 +30,8 @@ class SocketIO:
async def _handle_sub_queue(self, sid, data, *args, **kwargs):
if "queue_id" in data:
self.__sio.enter_room(sid, data["queue_id"])
await self.__sio.enter_room(sid, data["queue_id"])
async def _handle_unsub_queue(self, sid, data, *args, **kwargs):
if "queue_id" in data:
self.__sio.enter_room(sid, data["queue_id"])
await self.__sio.enter_room(sid, data["queue_id"])

View File

@@ -46,6 +46,8 @@ class FaceResultData(TypedDict):
y_center: float
mesh_width: int
mesh_height: int
chunk_x_offset: int
chunk_y_offset: int
class FaceResultDataWithId(FaceResultData):
@@ -78,6 +80,48 @@ FONT_SIZE = 32
FONT_STROKE_WIDTH = 4
def coalesce_faces(face1: FaceResultData, face2: FaceResultData) -> FaceResultData:
face1_x_offset = face1["chunk_x_offset"] - min(face1["chunk_x_offset"], face2["chunk_x_offset"])
face2_x_offset = face2["chunk_x_offset"] - min(face1["chunk_x_offset"], face2["chunk_x_offset"])
face1_y_offset = face1["chunk_y_offset"] - min(face1["chunk_y_offset"], face2["chunk_y_offset"])
face2_y_offset = face2["chunk_y_offset"] - min(face1["chunk_y_offset"], face2["chunk_y_offset"])
new_im_width = (
max(face1["image"].width, face2["image"].width)
+ max(face1["chunk_x_offset"], face2["chunk_x_offset"])
- min(face1["chunk_x_offset"], face2["chunk_x_offset"])
)
new_im_height = (
max(face1["image"].height, face2["image"].height)
+ max(face1["chunk_y_offset"], face2["chunk_y_offset"])
- min(face1["chunk_y_offset"], face2["chunk_y_offset"])
)
pil_image = Image.new(mode=face1["image"].mode, size=(new_im_width, new_im_height))
pil_image.paste(face1["image"], (face1_x_offset, face1_y_offset))
pil_image.paste(face2["image"], (face2_x_offset, face2_y_offset))
# Mask images are always from the origin
new_mask_im_width = max(face1["mask"].width, face2["mask"].width)
new_mask_im_height = max(face1["mask"].height, face2["mask"].height)
mask_pil = create_white_image(new_mask_im_width, new_mask_im_height)
black_image = create_black_image(face1["mask"].width, face1["mask"].height)
mask_pil.paste(black_image, (0, 0), ImageOps.invert(face1["mask"]))
black_image = create_black_image(face2["mask"].width, face2["mask"].height)
mask_pil.paste(black_image, (0, 0), ImageOps.invert(face2["mask"]))
new_face = FaceResultData(
image=pil_image,
mask=mask_pil,
x_center=max(face1["x_center"], face2["x_center"]),
y_center=max(face1["y_center"], face2["y_center"]),
mesh_width=max(face1["mesh_width"], face2["mesh_width"]),
mesh_height=max(face1["mesh_height"], face2["mesh_height"]),
chunk_x_offset=max(face1["chunk_x_offset"], face2["chunk_x_offset"]),
chunk_y_offset=max(face2["chunk_y_offset"], face2["chunk_y_offset"]),
)
return new_face
def prepare_faces_list(
face_result_list: list[FaceResultData],
) -> list[FaceResultDataWithId]:
@@ -91,7 +135,7 @@ def prepare_faces_list(
should_add = True
candidate_x_center = candidate["x_center"]
candidate_y_center = candidate["y_center"]
for face in deduped_faces:
for idx, face in enumerate(deduped_faces):
face_center_x = face["x_center"]
face_center_y = face["y_center"]
face_radius_w = face["mesh_width"] / 2
@@ -105,6 +149,7 @@ def prepare_faces_list(
)
if p < 1: # Inside of the already-added face's radius
deduped_faces[idx] = coalesce_faces(face, candidate)
should_add = False
break
@@ -138,7 +183,6 @@ def generate_face_box_mask(
chunk_x_offset: int = 0,
chunk_y_offset: int = 0,
draw_mesh: bool = True,
check_bounds: bool = True,
) -> list[FaceResultData]:
result = []
mask_pil = None
@@ -211,33 +255,20 @@ def generate_face_box_mask(
mask_pil = create_white_image(w + chunk_x_offset, h + chunk_y_offset)
mask_pil.paste(init_mask_pil, (chunk_x_offset, chunk_y_offset))
left_side = x_center - mesh_width
right_side = x_center + mesh_width
top_side = y_center - mesh_height
bottom_side = y_center + mesh_height
im_width, im_height = pil_image.size
over_w = im_width * 0.1
over_h = im_height * 0.1
if not check_bounds or (
(left_side >= -over_w)
and (right_side < im_width + over_w)
and (top_side >= -over_h)
and (bottom_side < im_height + over_h)
):
x_center = float(x_center)
y_center = float(y_center)
face = FaceResultData(
image=pil_image,
mask=mask_pil or create_white_image(*pil_image.size),
x_center=x_center + chunk_x_offset,
y_center=y_center + chunk_y_offset,
mesh_width=mesh_width,
mesh_height=mesh_height,
)
x_center = float(x_center)
y_center = float(y_center)
face = FaceResultData(
image=pil_image,
mask=mask_pil or create_white_image(*pil_image.size),
x_center=x_center + chunk_x_offset,
y_center=y_center + chunk_y_offset,
mesh_width=mesh_width,
mesh_height=mesh_height,
chunk_x_offset=chunk_x_offset,
chunk_y_offset=chunk_y_offset,
)
result.append(face)
else:
context.services.logger.info("FaceTools --> Face out of bounds, ignoring.")
result.append(face)
return result
@@ -346,7 +377,6 @@ def get_faces_list(
chunk_x_offset=0,
chunk_y_offset=0,
draw_mesh=draw_mesh,
check_bounds=False,
)
if should_chunk or len(result) == 0:
context.services.logger.info("FaceTools --> Chunking image (chunk toggled on, or no face found in full image).")
@@ -360,24 +390,26 @@ def get_faces_list(
if width > height:
# Landscape - slice the image horizontally
fx = 0.0
steps = int(width * 2 / height)
steps = int(width * 2 / height) + 1
increment = (width - height) / (steps - 1)
while fx <= (width - height):
x = int(fx)
image_chunks.append(image.crop((x, 0, x + height - 1, height - 1)))
image_chunks.append(image.crop((x, 0, x + height, height)))
x_offsets.append(x)
y_offsets.append(0)
fx += (width - height) / steps
fx += increment
context.services.logger.info(f"FaceTools --> Chunk starting at x = {x}")
elif height > width:
# Portrait - slice the image vertically
fy = 0.0
steps = int(height * 2 / width)
steps = int(height * 2 / width) + 1
increment = (height - width) / (steps - 1)
while fy <= (height - width):
y = int(fy)
image_chunks.append(image.crop((0, y, width - 1, y + width - 1)))
image_chunks.append(image.crop((0, y, width, y + width)))
x_offsets.append(0)
y_offsets.append(y)
fy += (height - width) / steps
fy += increment
context.services.logger.info(f"FaceTools --> Chunk starting at y = {y}")
for idx in range(len(image_chunks)):
@@ -404,7 +436,7 @@ def get_faces_list(
return all_faces
@invocation("face_off", title="FaceOff", tags=["image", "faceoff", "face", "mask"], category="image", version="1.0.1")
@invocation("face_off", title="FaceOff", tags=["image", "faceoff", "face", "mask"], category="image", version="1.0.2")
class FaceOffInvocation(BaseInvocation):
"""Bound, extract, and mask a face from an image using MediaPipe detection"""
@@ -498,7 +530,7 @@ class FaceOffInvocation(BaseInvocation):
return output
@invocation("face_mask_detection", title="FaceMask", tags=["image", "face", "mask"], category="image", version="1.0.1")
@invocation("face_mask_detection", title="FaceMask", tags=["image", "face", "mask"], category="image", version="1.0.2")
class FaceMaskInvocation(BaseInvocation):
"""Face mask creation using mediapipe face detection"""
@@ -616,7 +648,7 @@ class FaceMaskInvocation(BaseInvocation):
@invocation(
"face_identifier", title="FaceIdentifier", tags=["image", "face", "identifier"], category="image", version="1.0.1"
"face_identifier", title="FaceIdentifier", tags=["image", "face", "identifier"], category="image", version="1.0.2"
)
class FaceIdentifierInvocation(BaseInvocation):
"""Outputs an image with detected face IDs printed on each face. For use with other FaceTools."""

View File

@@ -44,28 +44,31 @@ class CoreMetadata(BaseModelExcludeNull):
"""Core generation metadata for an image generated in InvokeAI."""
app_version: str = Field(default=__version__, description="The version of InvokeAI used to generate this image")
generation_mode: str = Field(
generation_mode: Optional[str] = Field(
default=None,
description="The generation mode that output this image",
)
created_by: Optional[str] = Field(description="The name of the creator of the image")
positive_prompt: str = Field(description="The positive prompt parameter")
negative_prompt: str = Field(description="The negative prompt parameter")
width: int = Field(description="The width parameter")
height: int = Field(description="The height parameter")
seed: int = Field(description="The seed used for noise generation")
rand_device: str = Field(description="The device used for random number generation")
cfg_scale: float = Field(description="The classifier-free guidance scale parameter")
steps: int = Field(description="The number of steps used for inference")
scheduler: str = Field(description="The scheduler used for inference")
positive_prompt: Optional[str] = Field(default=None, description="The positive prompt parameter")
negative_prompt: Optional[str] = Field(default=None, description="The negative prompt parameter")
width: Optional[int] = Field(default=None, description="The width parameter")
height: Optional[int] = Field(default=None, description="The height parameter")
seed: Optional[int] = Field(default=None, description="The seed used for noise generation")
rand_device: Optional[str] = Field(default=None, description="The device used for random number generation")
cfg_scale: Optional[float] = Field(default=None, description="The classifier-free guidance scale parameter")
steps: Optional[int] = Field(default=None, description="The number of steps used for inference")
scheduler: Optional[str] = Field(default=None, description="The scheduler used for inference")
clip_skip: Optional[int] = Field(
default=None,
description="The number of skipped CLIP layers",
)
model: MainModelField = Field(description="The main model used for inference")
controlnets: list[ControlField] = Field(description="The ControlNets used for inference")
ipAdapters: list[IPAdapterMetadataField] = Field(description="The IP Adapters used for inference")
t2iAdapters: list[T2IAdapterField] = Field(description="The IP Adapters used for inference")
loras: list[LoRAMetadataField] = Field(description="The LoRAs used for inference")
model: Optional[MainModelField] = Field(default=None, description="The main model used for inference")
controlnets: Optional[list[ControlField]] = Field(default=None, description="The ControlNets used for inference")
ipAdapters: Optional[list[IPAdapterMetadataField]] = Field(
default=None, description="The IP Adapters used for inference"
)
t2iAdapters: Optional[list[T2IAdapterField]] = Field(default=None, description="The IP Adapters used for inference")
loras: Optional[list[LoRAMetadataField]] = Field(default=None, description="The LoRAs used for inference")
vae: Optional[VAEModelField] = Field(
default=None,
description="The VAE used for decoding, if the main model's default was not used",
@@ -122,27 +125,34 @@ class MetadataAccumulatorOutput(BaseInvocationOutput):
class MetadataAccumulatorInvocation(BaseInvocation):
"""Outputs a Core Metadata Object"""
generation_mode: str = InputField(
generation_mode: Optional[str] = InputField(
default=None,
description="The generation mode that output this image",
)
positive_prompt: str = InputField(description="The positive prompt parameter")
negative_prompt: str = InputField(description="The negative prompt parameter")
width: int = InputField(description="The width parameter")
height: int = InputField(description="The height parameter")
seed: int = InputField(description="The seed used for noise generation")
rand_device: str = InputField(description="The device used for random number generation")
cfg_scale: float = InputField(description="The classifier-free guidance scale parameter")
steps: int = InputField(description="The number of steps used for inference")
scheduler: str = InputField(description="The scheduler used for inference")
clip_skip: Optional[int] = Field(
positive_prompt: Optional[str] = InputField(default=None, description="The positive prompt parameter")
negative_prompt: Optional[str] = InputField(default=None, description="The negative prompt parameter")
width: Optional[int] = InputField(default=None, description="The width parameter")
height: Optional[int] = InputField(default=None, description="The height parameter")
seed: Optional[int] = InputField(default=None, description="The seed used for noise generation")
rand_device: Optional[str] = InputField(default=None, description="The device used for random number generation")
cfg_scale: Optional[float] = InputField(default=None, description="The classifier-free guidance scale parameter")
steps: Optional[int] = InputField(default=None, description="The number of steps used for inference")
scheduler: Optional[str] = InputField(default=None, description="The scheduler used for inference")
clip_skip: Optional[int] = InputField(
default=None,
description="The number of skipped CLIP layers",
)
model: MainModelField = InputField(description="The main model used for inference")
controlnets: list[ControlField] = InputField(description="The ControlNets used for inference")
ipAdapters: list[IPAdapterMetadataField] = InputField(description="The IP Adapters used for inference")
t2iAdapters: list[T2IAdapterField] = Field(description="The IP Adapters used for inference")
loras: list[LoRAMetadataField] = InputField(description="The LoRAs used for inference")
model: Optional[MainModelField] = InputField(default=None, description="The main model used for inference")
controlnets: Optional[list[ControlField]] = InputField(
default=None, description="The ControlNets used for inference"
)
ipAdapters: Optional[list[IPAdapterMetadataField]] = InputField(
default=None, description="The IP Adapters used for inference"
)
t2iAdapters: Optional[list[T2IAdapterField]] = InputField(
default=None, description="The IP Adapters used for inference"
)
loras: Optional[list[LoRAMetadataField]] = InputField(default=None, description="The LoRAs used for inference")
strength: Optional[float] = InputField(
default=None,
description="The strength used for latents-to-latents",
@@ -156,6 +166,20 @@ class MetadataAccumulatorInvocation(BaseInvocation):
description="The VAE used for decoding, if the main model's default was not used",
)
# High resolution fix metadata.
hrf_width: Optional[int] = InputField(
default=None,
description="The high resolution fix height and width multipler.",
)
hrf_height: Optional[int] = InputField(
default=None,
description="The high resolution fix height and width multipler.",
)
hrf_strength: Optional[float] = InputField(
default=None,
description="The high resolution fix img2img strength used in the upscale pass.",
)
# SDXL
positive_style_prompt: Optional[str] = InputField(
default=None,

View File

@@ -55,9 +55,9 @@ class BoardImageRecordStorageBase(ABC):
class SqliteBoardImageRecordStorage(BoardImageRecordStorageBase):
_conn: sqlite3.Connection
_cursor: sqlite3.Cursor
_lock: threading.Lock
_lock: threading.RLock
def __init__(self, conn: sqlite3.Connection, lock: threading.Lock) -> None:
def __init__(self, conn: sqlite3.Connection, lock: threading.RLock) -> None:
super().__init__()
self._conn = conn
# Enable row factory to get rows as dictionaries (must be done before making the cursor!)

View File

@@ -89,9 +89,9 @@ class BoardRecordStorageBase(ABC):
class SqliteBoardRecordStorage(BoardRecordStorageBase):
_conn: sqlite3.Connection
_cursor: sqlite3.Cursor
_lock: threading.Lock
_lock: threading.RLock
def __init__(self, conn: sqlite3.Connection, lock: threading.Lock) -> None:
def __init__(self, conn: sqlite3.Connection, lock: threading.RLock) -> None:
super().__init__()
self._conn = conn
# Enable row factory to get rows as dictionaries (must be done before making the cursor!)

View File

@@ -241,8 +241,8 @@ class InvokeAIAppConfig(InvokeAISettings):
version : bool = Field(default=False, description="Show InvokeAI version and exit", category="Other")
# CACHE
ram : Union[float, Literal["auto"]] = Field(default=7.5, gt=0, description="Maximum memory amount used by model cache for rapid switching (floating point number or 'auto')", category="Model Cache", )
vram : Union[float, Literal["auto"]] = Field(default=0.25, ge=0, description="Amount of VRAM reserved for model storage (floating point number or 'auto')", category="Model Cache", )
ram : float = Field(default=7.5, gt=0, description="Maximum memory amount used by model cache for rapid switching (floating point number, GB)", category="Model Cache", )
vram : float = Field(default=0.25, ge=0, description="Amount of VRAM reserved for model storage (floating point number, GB)", category="Model Cache", )
lazy_offload : bool = Field(default=True, description="Keep models in VRAM until their space is needed", category="Model Cache", )
# DEVICE

View File

@@ -150,9 +150,9 @@ class ImageRecordStorageBase(ABC):
class SqliteImageRecordStorage(ImageRecordStorageBase):
_conn: sqlite3.Connection
_cursor: sqlite3.Cursor
_lock: threading.Lock
_lock: threading.RLock
def __init__(self, conn: sqlite3.Connection, lock: threading.Lock) -> None:
def __init__(self, conn: sqlite3.Connection, lock: threading.RLock) -> None:
super().__init__()
self._conn = conn
# Enable row factory to get rows as dictionaries (must be done before making the cursor!)

View File

@@ -36,7 +36,7 @@ class SqliteSessionQueue(SessionQueueBase):
__invoker: Invoker
__conn: sqlite3.Connection
__cursor: sqlite3.Cursor
__lock: threading.Lock
__lock: threading.RLock
def start(self, invoker: Invoker) -> None:
self.__invoker = invoker
@@ -45,7 +45,7 @@ class SqliteSessionQueue(SessionQueueBase):
local_handler.register(event_name=EventServiceBase.queue_event, _func=self._on_session_event)
self.__invoker.services.logger.info(f"Pruned {prune_result.deleted} finished queue items")
def __init__(self, conn: sqlite3.Connection, lock: threading.Lock) -> None:
def __init__(self, conn: sqlite3.Connection, lock: threading.RLock) -> None:
super().__init__()
self.__conn = conn
# Enable row factory to get rows as dictionaries (must be done before making the cursor!)

View File

@@ -16,9 +16,9 @@ class SqliteItemStorage(ItemStorageABC, Generic[T]):
_conn: sqlite3.Connection
_cursor: sqlite3.Cursor
_id_field: str
_lock: threading.Lock
_lock: threading.RLock
def __init__(self, conn: sqlite3.Connection, table_name: str, lock: threading.Lock, id_field: str = "id"):
def __init__(self, conn: sqlite3.Connection, table_name: str, lock: threading.RLock, id_field: str = "id"):
super().__init__()
self._table_name = table_name

View File

@@ -1,3 +1,3 @@
import threading
lock = threading.Lock()
lock = threading.RLock()

View File

@@ -662,7 +662,7 @@ def default_ramcache() -> float:
def default_startup_options(init_file: Path) -> Namespace:
opts = InvokeAIAppConfig.get_config()
opts.ram = default_ramcache()
opts.ram = opts.ram or default_ramcache()
return opts

View File

@@ -55,8 +55,10 @@ class MemorySnapshot:
try:
malloc_info = LibcUtil().mallinfo2()
except OSError:
# This is expected in environments that do not have the 'libc.so.6' shared library.
except (OSError, AttributeError):
# OSError: This is expected in environments that do not have the 'libc.so.6' shared library.
# AttributeError: This is expected in environments that have `libc.so.6` but do not have the `mallinfo2` (e.g. glibc < 2.33)
# TODO: Does `mallinfo` work?
malloc_info = None
return cls(process_ram, vram, malloc_info)

View File

@@ -238,11 +238,8 @@ class ModelCache(object):
f"{get_pretty_snapshot_diff(snapshot_before, snapshot_after)}"
)
# We only log a warning for over-reported (not under-reported) model sizes before load. There is a known
# issue where models report their fp32 size before load, and are then loaded as fp16. Once this issue is
# addressed, it would make sense to log a warning for both over-reported and under-reported model sizes.
if (self_reported_model_size_after_load - self_reported_model_size_before_load) > 10 * MB:
self.logger.warning(
if abs(self_reported_model_size_after_load - self_reported_model_size_before_load) > 10 * MB:
self.logger.debug(
f"Model '{key}' mis-reported its size before load. Self-reported size before/after load:"
f" {(self_reported_model_size_before_load/GIG):.2f}GB /"
f" {(self_reported_model_size_after_load/GIG):.2f}GB."
@@ -299,7 +296,7 @@ class ModelCache(object):
rel_tol=0.1,
abs_tol=10 * MB,
):
self.logger.warning(
self.logger.debug(
f"Moving model '{key}' from {source_device} to"
f" {target_device} caused an unexpected change in VRAM usage. The model's"
" estimated size may be incorrect. Estimated model size:"

View File

@@ -20,6 +20,7 @@ from multiprocessing import Process
from multiprocessing.connection import Connection, Pipe
from pathlib import Path
from shutil import get_terminal_size
from typing import Optional
import npyscreen
import torch
@@ -630,21 +631,23 @@ def ask_user_for_prediction_type(model_path: Path, tui_conn: Connection = None)
return _ask_user_for_pt_cmdline(model_path)
def _ask_user_for_pt_cmdline(model_path: Path) -> SchedulerPredictionType:
def _ask_user_for_pt_cmdline(model_path: Path) -> Optional[SchedulerPredictionType]:
choices = [SchedulerPredictionType.Epsilon, SchedulerPredictionType.VPrediction, None]
print(
f"""
Please select the type of the V2 checkpoint named {model_path.name}:
[1] A model based on Stable Diffusion v2 trained on 512 pixel images (SD-2-base)
[2] A model based on Stable Diffusion v2 trained on 768 pixel images (SD-2-768)
[3] Skip this model and come back later.
Please select the scheduler prediction type of the checkpoint named {model_path.name}:
[1] "epsilon" - most v1.5 models and v2 models trained on 512 pixel images
[2] "vprediction" - v2 models trained on 768 pixel images and a few v1.5 models
[3] Accept the best guess; you can fix it in the Web UI later
"""
)
choice = None
ok = False
while not ok:
try:
choice = input("select> ").strip()
choice = input("select [3]> ").strip()
if not choice:
return None
choice = choices[int(choice) - 1]
ok = True
except (ValueError, IndexError):
@@ -655,22 +658,18 @@ Please select the type of the V2 checkpoint named {model_path.name}:
def _ask_user_for_pt_tui(model_path: Path, tui_conn: Connection) -> SchedulerPredictionType:
try:
tui_conn.send_bytes(f"*need v2 config for:{model_path}".encode("utf-8"))
# note that we don't do any status checking here
response = tui_conn.recv_bytes().decode("utf-8")
if response is None:
return None
elif response == "epsilon":
return SchedulerPredictionType.epsilon
elif response == "v":
return SchedulerPredictionType.VPrediction
elif response == "abort":
logger.info("Conversion aborted")
return None
else:
return response
except Exception:
tui_conn.send_bytes(f"*need v2 config for:{model_path}".encode("utf-8"))
# note that we don't do any status checking here
response = tui_conn.recv_bytes().decode("utf-8")
if response is None:
return None
elif response == "epsilon":
return SchedulerPredictionType.epsilon
elif response == "v":
return SchedulerPredictionType.VPrediction
elif response == "guess":
return None
else:
return None

View File

@@ -381,12 +381,12 @@ def select_stable_diffusion_config_file(
wrap: bool = True,
model_name: str = "Unknown",
):
message = f"Please select the correct base model for the V2 checkpoint named '{model_name}'. Press <CANCEL> to skip installation."
message = f"Please select the correct prediction type for the checkpoint named '{model_name}'. Press <CANCEL> to skip installation."
title = "CONFIG FILE SELECTION"
options = [
"An SD v2.x base model (512 pixels; no 'parameterization:' line in its yaml file)",
"An SD v2.x v-predictive model (768 pixels; 'parameterization: \"v\"' line in its yaml file)",
"Skip installation for now and come back later",
"'epsilon' - most v1.5 models and v2 models trained on 512 pixel images",
"'vprediction' - v2 models trained on 768 pixel images and a few v1.5 models)",
"Accept the best guess; you can fix it in the Web UI later",
]
F = ConfirmCancelPopup(
@@ -410,7 +410,7 @@ def select_stable_diffusion_config_file(
choice = F.add(
npyscreen.SelectOne,
values=options,
value=[0],
value=[2],
max_height=len(options) + 1,
scroll_exit=True,
)
@@ -420,5 +420,5 @@ def select_stable_diffusion_config_file(
if not F.value:
return None
assert choice.value[0] in range(0, 3), "invalid choice"
choices = ["epsilon", "v", "abort"]
choices = ["epsilon", "v", "guess"]
return choices[choice.value[0]]

View File

@@ -1,4 +1,5 @@
dist/
public/locales/*.json
.husky/
node_modules/
patches/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
import{v as s,h_ as T,u as l,a1 as I,h$ as R,ad as V,i0 as z,i1 as j,i2 as D,i3 as F,i4 as G,i5 as W,i6 as K,aF as H,i7 as U,i8 as Y}from"./index-a24a7159.js";import{M as Z}from"./MantineProvider-2b56c833.js";var P=String.raw,E=P`
import{w as s,i6 as T,v as l,a2 as I,i7 as R,ae as V,i8 as z,i9 as j,ia as D,ib as F,ic as G,id as W,ie as K,aG as H,ig as U,ih as Y}from"./index-e8dfd0d9.js";import{M as Z}from"./MantineProvider-9228e738.js";var P=String.raw,E=P`
:root,
:host {
--chakra-vh: 100vh;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -15,7 +15,7 @@
margin: 0;
}
</style>
<script type="module" crossorigin src="./assets/index-a24a7159.js"></script>
<script type="module" crossorigin src="./assets/index-e8dfd0d9.js"></script>
</head>
<body dir="ltr">

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "مفاتيح الأختصار",
"themeLabel": "الموضوع",
"languagePickerLabel": "منتقي اللغة",
"reportBugLabel": "بلغ عن خطأ",
"settingsLabel": "إعدادات",
"darkTheme": "داكن",
"lightTheme": "فاتح",
"greenTheme": "أخضر",
"img2img": "صورة إلى صورة",
"unifiedCanvas": "لوحة موحدة",
"nodes": "عقد",
@@ -57,7 +53,6 @@
"maintainAspectRatio": "الحفاظ على نسبة الأبعاد",
"autoSwitchNewImages": "التبديل التلقائي إلى الصور الجديدة",
"singleColumnLayout": "تخطيط عمود واحد",
"pinGallery": "تثبيت المعرض",
"allImagesLoaded": "تم تحميل جميع الصور",
"loadMore": "تحميل المزيد",
"noImagesInGallery": "لا توجد صور في المعرض"
@@ -342,7 +337,6 @@
"cfgScale": "مقياس الإعداد الذاتي للجملة",
"width": "عرض",
"height": "ارتفاع",
"sampler": "مزج",
"seed": "بذرة",
"randomizeSeed": "تبديل بذرة",
"shuffle": "تشغيل",
@@ -364,10 +358,6 @@
"hiresOptim": "تحسين الدقة العالية",
"imageFit": "ملائمة الصورة الأولية لحجم الخرج",
"codeformerFidelity": "الوثوقية",
"seamSize": "حجم التشقق",
"seamBlur": "ضباب التشقق",
"seamStrength": "قوة التشقق",
"seamSteps": "خطوات التشقق",
"scaleBeforeProcessing": "تحجيم قبل المعالجة",
"scaledWidth": "العرض المحجوب",
"scaledHeight": "الارتفاع المحجوب",
@@ -378,8 +368,6 @@
"infillScalingHeader": "التعبئة والتحجيم",
"img2imgStrength": "قوة صورة إلى صورة",
"toggleLoopback": "تبديل الإعادة",
"invoke": "إطلاق",
"promptPlaceholder": "اكتب المحث هنا. [العلامات السلبية], (زيادة الوزن) ++, (نقص الوزن)--, التبديل و الخلط متاحة (انظر الوثائق)",
"sendTo": "أرسل إلى",
"sendToImg2Img": "أرسل إلى صورة إلى صورة",
"sendToUnifiedCanvas": "أرسل إلى الخطوط الموحدة",
@@ -393,7 +381,6 @@
"useAll": "استخدام الكل",
"useInitImg": "استخدام الصورة الأولية",
"info": "معلومات",
"deleteImage": "حذف الصورة",
"initialImage": "الصورة الأولية",
"showOptionsPanel": "إظهار لوحة الخيارات"
},
@@ -403,7 +390,6 @@
"saveSteps": "حفظ الصور كل n خطوات",
"confirmOnDelete": "تأكيد عند الحذف",
"displayHelpIcons": "عرض أيقونات المساعدة",
"useCanvasBeta": "استخدام مخطط الأزرار بيتا",
"enableImageDebugging": "تمكين التصحيح عند التصوير",
"resetWebUI": "إعادة تعيين واجهة الويب",
"resetWebUIDesc1": "إعادة تعيين واجهة الويب يعيد فقط ذاكرة التخزين المؤقت للمتصفح لصورك وإعداداتك المذكورة. لا يحذف أي صور من القرص.",
@@ -413,7 +399,6 @@
"toast": {
"tempFoldersEmptied": "تم تفريغ مجلد المؤقت",
"uploadFailed": "فشل التحميل",
"uploadFailedMultipleImagesDesc": "تم الصق صور متعددة، قد يتم تحميل صورة واحدة فقط في الوقت الحالي",
"uploadFailedUnableToLoadDesc": "تعذر تحميل الملف",
"downloadImageStarted": "بدأ تنزيل الصورة",
"imageCopied": "تم نسخ الصورة",

View File

@@ -1,12 +1,8 @@
{
"common": {
"themeLabel": "Thema",
"languagePickerLabel": "Sprachauswahl",
"reportBugLabel": "Fehler melden",
"settingsLabel": "Einstellungen",
"darkTheme": "Dunkel",
"lightTheme": "Hell",
"greenTheme": "Grün",
"img2img": "Bild zu Bild",
"nodes": "Knoten",
"langGerman": "Deutsch",
@@ -48,7 +44,6 @@
"langEnglish": "Englisch",
"langDutch": "Niederländisch",
"langFrench": "Französisch",
"oceanTheme": "Ozean",
"langItalian": "Italienisch",
"langPortuguese": "Portogisisch",
"langRussian": "Russisch",
@@ -76,7 +71,6 @@
"maintainAspectRatio": "Seitenverhältnis beibehalten",
"autoSwitchNewImages": "Automatisch zu neuen Bildern wechseln",
"singleColumnLayout": "Einspaltiges Layout",
"pinGallery": "Galerie anpinnen",
"allImagesLoaded": "Alle Bilder geladen",
"loadMore": "Mehr laden",
"noImagesInGallery": "Keine Bilder in der Galerie"
@@ -346,7 +340,6 @@
"cfgScale": "CFG-Skala",
"width": "Breite",
"height": "Höhe",
"sampler": "Sampler",
"randomizeSeed": "Zufälliger Seed",
"shuffle": "Mischen",
"noiseThreshold": "Rausch-Schwellenwert",
@@ -367,10 +360,6 @@
"hiresOptim": "High-Res-Optimierung",
"imageFit": "Ausgangsbild an Ausgabegröße anpassen",
"codeformerFidelity": "Glaubwürdigkeit",
"seamSize": "Nahtgröße",
"seamBlur": "Nahtunschärfe",
"seamStrength": "Stärke der Naht",
"seamSteps": "Nahtstufen",
"scaleBeforeProcessing": "Skalieren vor der Verarbeitung",
"scaledWidth": "Skaliert W",
"scaledHeight": "Skaliert H",
@@ -381,8 +370,6 @@
"infillScalingHeader": "Infill und Skalierung",
"img2imgStrength": "Bild-zu-Bild-Stärke",
"toggleLoopback": "Toggle Loopback",
"invoke": "Invoke",
"promptPlaceholder": "Prompt hier eingeben. [negative Token], (mehr Gewicht)++, (geringeres Gewicht)--, Tausch und Überblendung sind verfügbar (siehe Dokumente)",
"sendTo": "Senden an",
"sendToImg2Img": "Senden an Bild zu Bild",
"sendToUnifiedCanvas": "Senden an Unified Canvas",
@@ -394,7 +381,6 @@
"useSeed": "Seed verwenden",
"useAll": "Alle verwenden",
"useInitImg": "Ausgangsbild verwenden",
"deleteImage": "Bild löschen",
"initialImage": "Ursprüngliches Bild",
"showOptionsPanel": "Optionsleiste zeigen",
"cancel": {
@@ -406,7 +392,6 @@
"saveSteps": "Speichern der Bilder alle n Schritte",
"confirmOnDelete": "Bestätigen beim Löschen",
"displayHelpIcons": "Hilfesymbole anzeigen",
"useCanvasBeta": "Canvas Beta Layout verwenden",
"enableImageDebugging": "Bild-Debugging aktivieren",
"resetWebUI": "Web-Oberfläche zurücksetzen",
"resetWebUIDesc1": "Das Zurücksetzen der Web-Oberfläche setzt nur den lokalen Cache des Browsers mit Ihren Bildern und gespeicherten Einstellungen zurück. Es werden keine Bilder von der Festplatte gelöscht.",
@@ -416,7 +401,6 @@
"toast": {
"tempFoldersEmptied": "Temp-Ordner geleert",
"uploadFailed": "Hochladen fehlgeschlagen",
"uploadFailedMultipleImagesDesc": "Mehrere Bilder eingefügt, es kann nur ein Bild auf einmal hochgeladen werden",
"uploadFailedUnableToLoadDesc": "Datei kann nicht geladen werden",
"downloadImageStarted": "Bild wird heruntergeladen",
"imageCopied": "Bild kopiert",
@@ -532,7 +516,6 @@
"modifyConfig": "Optionen einstellen",
"toggleAutoscroll": "Auroscroll ein/ausschalten",
"toggleLogViewer": "Log Betrachter ein/ausschalten",
"showGallery": "Zeige Galerie",
"showOptionsPanel": "Zeige Optionen",
"reset": "Zurücksetzen",
"nextImage": "Nächstes Bild",

View File

@@ -38,19 +38,24 @@
"searchBoard": "Search Boards...",
"selectBoard": "Select a Board",
"topMessage": "This board contains images used in the following features:",
"uncategorized": "Uncategorized"
"uncategorized": "Uncategorized",
"downloadBoard": "Download Board"
},
"common": {
"accept": "Accept",
"advanced": "Advanced",
"areYouSure": "Are you sure?",
"auto": "Auto",
"back": "Back",
"batch": "Batch Manager",
"cancel": "Cancel",
"close": "Close",
"on": "On",
"communityLabel": "Community",
"controlNet": "Controlnet",
"controlNet": "ControlNet",
"controlAdapter": "Control Adapter",
"ipAdapter": "IP Adapter",
"t2iAdapter": "T2I Adapter",
"darkMode": "Dark Mode",
"discordLabel": "Discord",
"dontAskMeAgain": "Don't ask me again",
@@ -130,6 +135,17 @@
"upload": "Upload"
},
"controlnet": {
"controlAdapter_one": "Control Adapter",
"controlAdapter_other": "Control Adapters",
"controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))",
"ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))",
"t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))",
"addControlNet": "Add $t(common.controlNet)",
"addIPAdapter": "Add $t(common.ipAdapter)",
"addT2IAdapter": "Add $t(common.t2iAdapter)",
"controlNetEnabledT2IDisabled": "$t(common.controlNet) enabled, $t(common.t2iAdapter)s disabled",
"t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) enabled, $t(common.controlNet)s disabled",
"controlNetT2IMutexDesc": "$t(common.controlNet) and $t(common.t2iAdapter) at same time is currently unsupported.",
"amult": "a_mult",
"autoConfigure": "Auto configure processor",
"balanced": "Balanced",
@@ -262,7 +278,8 @@
"batchValues": "Batch Values",
"notReady": "Unable to Queue",
"batchQueued": "Batch Queued",
"batchQueuedDesc": "Added {{item_count}} sessions to {{direction}} of queue",
"batchQueuedDesc_one": "Added {{count}} sessions to {{direction}} of queue",
"batchQueuedDesc_other": "Added {{count}} sessions to {{direction}} of queue",
"front": "front",
"back": "back",
"batchFailedToQueue": "Failed to Queue Batch",
@@ -311,7 +328,10 @@
"showUploads": "Show Uploads",
"singleColumnLayout": "Single Column Layout",
"unableToLoad": "Unable to load Gallery",
"uploads": "Uploads"
"uploads": "Uploads",
"downloadSelection": "Download Selection",
"preparingDownload": "Preparing Download",
"preparingDownloadFailed": "Problem Preparing Download"
},
"hotkeys": {
"acceptStagingImage": {
@@ -539,8 +559,10 @@
"negativePrompt": "Negative Prompt",
"noImageDetails": "No image details found",
"noMetaData": "No metadata found",
"noRecallParameters": "No parameters to recall found",
"perlin": "Perlin Noise",
"positivePrompt": "Positive Prompt",
"recallParameters": "Recall Parameters",
"scheduler": "Scheduler",
"seamless": "Seamless",
"seed": "Seed",
@@ -685,6 +707,7 @@
"vae": "VAE",
"vaeLocation": "VAE Location",
"vaeLocationValidationMsg": "Path to where your VAE is located.",
"vaePrecision": "VAE Precision",
"vaeRepoID": "VAE Repo ID",
"vaeRepoIDValidationMsg": "Online repository of your VAE",
"variant": "Variant",
@@ -905,6 +928,7 @@
},
"parameters": {
"aspectRatio": "Aspect Ratio",
"aspectRatioFree": "Free",
"boundingBoxHeader": "Bounding Box",
"boundingBoxHeight": "Bounding Box Height",
"boundingBoxWidth": "Bounding Box Width",
@@ -952,9 +976,10 @@
"missingFieldTemplate": "Missing field template",
"missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} missing input",
"missingNodeTemplate": "Missing node template",
"noControlImageForControlNet": "ControlNet {{index}} has no control image",
"noControlImageForControlAdapter": "Control Adapter #{{number}} has no control image",
"noInitialImageSelected": "No initial image selected",
"noModelForControlNet": "ControlNet {{index}} has no model selected.",
"noModelForControlAdapter": "Control Adapter #{{number}} has no model selected.",
"incompatibleBaseModelForControlAdapter": "Control Adapter #{{number}} model is invalid with main model.",
"noModelSelected": "No model selected",
"noPrompts": "No prompts generated",
"noNodesInGraph": "No nodes in graph",
@@ -1089,11 +1114,23 @@
"showAdvancedOptions": "Show Advanced Options",
"showProgressInViewer": "Show Progress Images in Viewer",
"ui": "User Interface",
"useSlidersForAll": "Use Sliders For All Options"
"useSlidersForAll": "Use Sliders For All Options",
"clearIntermediatesDisabled": "Queue must be empty to clear intermediates",
"clearIntermediatesDesc1": "Clearing intermediates will reset your Canvas and ControlNet state.",
"clearIntermediatesDesc2": "Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space.",
"clearIntermediatesDesc3": "Your gallery images will not be deleted.",
"clearIntermediates": "Clear Intermediates",
"clearIntermediatesWithCount_one": "Clear {{count}} Intermediate",
"clearIntermediatesWithCount_other": "Clear {{count}} Intermediates",
"clearIntermediatesWithCount_zero": "No Intermediates to Clear",
"intermediatesCleared_one": "Cleared {{count}} Intermediate",
"intermediatesCleared_other": "Cleared {{count}} Intermediates",
"intermediatesClearedFailed": "Problem Clearing Intermediates"
},
"toast": {
"addedToBoard": "Added to board",
"baseModelChangedCleared": "Base model changed, cleared",
"baseModelChangedCleared_one": "Base model changed, cleared or disabled {{count}} incompatible submodel",
"baseModelChangedCleared_other": "Base model changed, cleared or disabled {{count}} incompatible submodels",
"canceled": "Processing Canceled",
"canvasCopiedClipboard": "Canvas Copied to Clipboard",
"canvasDownloaded": "Canvas Downloaded",
@@ -1113,7 +1150,6 @@
"imageSavingFailed": "Image Saving Failed",
"imageUploaded": "Image Uploaded",
"imageUploadFailed": "Image Upload Failed",
"incompatibleSubmodel": "incompatible submodel",
"initialImageNotSet": "Initial Image Not Set",
"initialImageNotSetDesc": "Could not load initial image",
"initialImageSet": "Initial Image Set",

View File

@@ -1,16 +1,12 @@
{
"common": {
"hotkeysLabel": "Atajos de teclado",
"themeLabel": "Tema",
"languagePickerLabel": "Selector de idioma",
"reportBugLabel": "Reportar errores",
"settingsLabel": "Ajustes",
"darkTheme": "Oscuro",
"lightTheme": "Claro",
"greenTheme": "Verde",
"img2img": "Imagen a Imagen",
"unifiedCanvas": "Lienzo Unificado",
"nodes": "Nodos",
"nodes": "Editor del flujo de trabajo",
"langSpanish": "Español",
"nodesDesc": "Un sistema de generación de imágenes basado en nodos, actualmente se encuentra en desarrollo. Mantente pendiente a nuestras actualizaciones acerca de esta fabulosa funcionalidad.",
"postProcessing": "Post-procesamiento",
@@ -19,7 +15,7 @@
"postProcessDesc3": "La Interfaz de Línea de Comandos de Invoke AI ofrece muchas otras características, incluyendo -Embiggen-.",
"training": "Entrenamiento",
"trainingDesc1": "Un flujo de trabajo dedicado para el entrenamiento de sus propios -embeddings- y puntos de control utilizando Inversión Textual y Dreambooth desde la interfaz web.",
"trainingDesc2": "InvokeAI ya soporta el entrenamiento de -embeddings- personalizados utilizando la Inversión Textual mediante el script principal.",
"trainingDesc2": "InvokeAI ya admite el entrenamiento de incrustaciones personalizadas mediante la inversión textual mediante el script principal.",
"upload": "Subir imagen",
"close": "Cerrar",
"load": "Cargar",
@@ -63,18 +59,27 @@
"statusConvertingModel": "Convertir el modelo",
"statusModelConverted": "Modelo adaptado",
"statusMergingModels": "Fusionar modelos",
"oceanTheme": "Océano",
"langPortuguese": "Portugués",
"langKorean": "Coreano",
"langHebrew": "Hebreo",
"pinOptionsPanel": "Pin del panel de opciones",
"loading": "Cargando",
"loadingInvokeAI": "Cargando invocar a la IA",
"postprocessing": "Tratamiento posterior",
"txt2img": "De texto a imagen",
"accept": "Aceptar",
"cancel": "Cancelar",
"linear": "Lineal"
"linear": "Lineal",
"random": "Aleatorio",
"generate": "Generar",
"openInNewTab": "Abrir en una nueva pestaña",
"dontAskMeAgain": "No me preguntes de nuevo",
"areYouSure": "¿Estas seguro?",
"imagePrompt": "Indicación de imagen",
"batch": "Administrador de lotes",
"darkMode": "Modo oscuro",
"lightMode": "Modo claro",
"modelManager": "Administrador de modelos",
"communityLabel": "Comunidad"
},
"gallery": {
"generations": "Generaciones",
@@ -87,10 +92,15 @@
"maintainAspectRatio": "Mantener relación de aspecto",
"autoSwitchNewImages": "Auto seleccionar Imágenes nuevas",
"singleColumnLayout": "Diseño de una columna",
"pinGallery": "Fijar galería",
"allImagesLoaded": "Todas las imágenes cargadas",
"loadMore": "Cargar más",
"noImagesInGallery": "Sin imágenes en la galería"
"noImagesInGallery": "No hay imágenes para mostrar",
"deleteImage": "Eliminar Imagen",
"deleteImageBin": "Las imágenes eliminadas se enviarán a la papelera de tu sistema operativo.",
"deleteImagePermanent": "Las imágenes eliminadas no se pueden restaurar.",
"images": "Imágenes",
"assets": "Activos",
"autoAssignBoardOnClick": "Asignación automática de tableros al hacer clic"
},
"hotkeys": {
"keyboardShortcuts": "Atajos de teclado",
@@ -297,7 +307,12 @@
"acceptStagingImage": {
"title": "Aceptar imagen",
"desc": "Aceptar la imagen actual en el área de preparación"
}
},
"addNodes": {
"title": "Añadir Nodos",
"desc": "Abre el menú para añadir nodos"
},
"nodesHotkeys": "Teclas de acceso rápido a los nodos"
},
"modelManager": {
"modelManager": "Gestor de Modelos",
@@ -349,8 +364,8 @@
"delete": "Eliminar",
"deleteModel": "Eliminar Modelo",
"deleteConfig": "Eliminar Configuración",
"deleteMsg1": "¿Estás seguro de querer eliminar esta entrada de modelo de InvokeAI?",
"deleteMsg2": "El checkpoint del modelo no se eliminará de tu disco. Puedes volver a añadirlo si lo deseas.",
"deleteMsg1": "¿Estás seguro de que deseas eliminar este modelo de InvokeAI?",
"deleteMsg2": "Esto eliminará el modelo del disco si está en la carpeta raíz de InvokeAI. Si está utilizando una ubicación personalizada, el modelo NO se eliminará del disco.",
"safetensorModels": "SafeTensors",
"addDiffuserModel": "Añadir difusores",
"inpainting": "v1 Repintado",
@@ -369,8 +384,8 @@
"convertToDiffusers": "Convertir en difusores",
"convertToDiffusersHelpText1": "Este modelo se convertirá al formato 🧨 Difusores.",
"convertToDiffusersHelpText2": "Este proceso sustituirá su entrada del Gestor de Modelos por la versión de Difusores del mismo modelo.",
"convertToDiffusersHelpText3": "Su archivo de puntos de control en el disco NO será borrado ni modificado de ninguna manera. Puede volver a añadir su punto de control al Gestor de Modelos si lo desea.",
"convertToDiffusersHelpText5": "Asegúrese de que dispone de suficiente espacio en disco. Los modelos suelen variar entre 4 GB y 7 GB de tamaño.",
"convertToDiffusersHelpText3": "Tu archivo del punto de control en el disco se eliminará si está en la carpeta raíz de InvokeAI. Si está en una ubicación personalizada, NO se eliminará.",
"convertToDiffusersHelpText5": "Por favor, asegúrate de tener suficiente espacio en el disco. Los modelos generalmente varían entre 2 GB y 7 GB de tamaño.",
"convertToDiffusersHelpText6": "¿Desea transformar este modelo?",
"convertToDiffusersSaveLocation": "Guardar ubicación",
"v1": "v1",
@@ -409,7 +424,27 @@
"pickModelType": "Elige el tipo de modelo",
"v2_768": "v2 (768px)",
"addDifference": "Añadir una diferencia",
"scanForModels": "Buscar modelos"
"scanForModels": "Buscar modelos",
"vae": "VAE",
"variant": "Variante",
"baseModel": "Modelo básico",
"modelConversionFailed": "Conversión al modelo fallida",
"selectModel": "Seleccionar un modelo",
"modelUpdateFailed": "Error al actualizar el modelo",
"modelsMergeFailed": "Fusión del modelo fallida",
"convertingModelBegin": "Convirtiendo el modelo. Por favor, espere.",
"modelDeleted": "Modelo eliminado",
"modelDeleteFailed": "Error al borrar el modelo",
"noCustomLocationProvided": "No se proporcionó una ubicación personalizada",
"importModels": "Importar los modelos",
"settings": "Ajustes",
"syncModels": "Sincronizar las plantillas",
"syncModelsDesc": "Si tus plantillas no están sincronizados con el backend, puedes actualizarlas usando esta opción. Esto suele ser útil en los casos en los que actualizas manualmente tu archivo models.yaml o añades plantillas a la carpeta raíz de InvokeAI después de que la aplicación haya arrancado.",
"modelsSynced": "Plantillas sincronizadas",
"modelSyncFailed": "La sincronización de la plantilla falló",
"loraModels": "LoRA",
"onnxModels": "Onnx",
"oliveModels": "Olives"
},
"parameters": {
"images": "Imágenes",
@@ -417,10 +452,9 @@
"cfgScale": "Escala CFG",
"width": "Ancho",
"height": "Alto",
"sampler": "Muestreo",
"seed": "Semilla",
"randomizeSeed": "Semilla aleatoria",
"shuffle": "Aleatorizar",
"shuffle": "Semilla aleatoria",
"noiseThreshold": "Umbral de Ruido",
"perlinNoise": "Ruido Perlin",
"variations": "Variaciones",
@@ -439,10 +473,6 @@
"hiresOptim": "Optimización de Alta Resolución",
"imageFit": "Ajuste tamaño de imagen inicial al tamaño objetivo",
"codeformerFidelity": "Fidelidad",
"seamSize": "Tamaño del parche",
"seamBlur": "Desenfoque del parche",
"seamStrength": "Fuerza del parche",
"seamSteps": "Pasos del parche",
"scaleBeforeProcessing": "Redimensionar antes de procesar",
"scaledWidth": "Ancho escalado",
"scaledHeight": "Alto escalado",
@@ -453,8 +483,6 @@
"infillScalingHeader": "Remplazo y escalado",
"img2imgStrength": "Peso de Imagen a Imagen",
"toggleLoopback": "Alternar Retroalimentación",
"invoke": "Invocar",
"promptPlaceholder": "Ingrese la entrada aquí. [símbolos negativos], (subir peso)++, (bajar peso)--, también disponible alternado y mezclado (ver documentación)",
"sendTo": "Enviar a",
"sendToImg2Img": "Enviar a Imagen a Imagen",
"sendToUnifiedCanvas": "Enviar a Lienzo Unificado",
@@ -467,7 +495,6 @@
"useAll": "Usar Todo",
"useInitImg": "Usar Imagen Inicial",
"info": "Información",
"deleteImage": "Eliminar Imagen",
"initialImage": "Imagen Inicial",
"showOptionsPanel": "Mostrar panel de opciones",
"symmetry": "Simetría",
@@ -481,37 +508,72 @@
},
"copyImage": "Copiar la imagen",
"general": "General",
"negativePrompts": "Preguntas negativas",
"imageToImage": "Imagen a imagen",
"denoisingStrength": "Intensidad de la eliminación del ruido",
"hiresStrength": "Alta resistencia",
"showPreview": "Mostrar la vista previa",
"hidePreview": "Ocultar la vista previa"
"hidePreview": "Ocultar la vista previa",
"noiseSettings": "Ruido",
"seamlessXAxis": "Eje x",
"seamlessYAxis": "Eje y",
"scheduler": "Programador",
"boundingBoxWidth": "Anchura del recuadro",
"boundingBoxHeight": "Altura del recuadro",
"positivePromptPlaceholder": "Prompt Positivo",
"negativePromptPlaceholder": "Prompt Negativo",
"controlNetControlMode": "Modo de control",
"clipSkip": "Omitir el CLIP",
"aspectRatio": "Relación",
"maskAdjustmentsHeader": "Ajustes de la máscara",
"maskBlur": "Difuminar",
"maskBlurMethod": "Método del desenfoque",
"seamHighThreshold": "Alto",
"seamLowThreshold": "Bajo",
"coherencePassHeader": "Parámetros de la coherencia",
"compositingSettingsHeader": "Ajustes de la composición",
"coherenceSteps": "Pasos",
"coherenceStrength": "Fuerza",
"patchmatchDownScaleSize": "Reducir a escala",
"coherenceMode": "Modo"
},
"settings": {
"models": "Modelos",
"displayInProgress": "Mostrar imágenes en progreso",
"displayInProgress": "Mostrar las imágenes del progreso",
"saveSteps": "Guardar imágenes cada n pasos",
"confirmOnDelete": "Confirmar antes de eliminar",
"displayHelpIcons": "Mostrar iconos de ayuda",
"useCanvasBeta": "Usar versión beta del Lienzo",
"enableImageDebugging": "Habilitar depuración de imágenes",
"resetWebUI": "Restablecer interfaz web",
"resetWebUIDesc1": "Al restablecer la interfaz web, solo se restablece la caché local del navegador de sus imágenes y la configuración guardada. No se elimina ninguna imagen de su disco duro.",
"resetWebUIDesc2": "Si las imágenes no se muestran en la galería o algo más no funciona, intente restablecer antes de reportar un incidente en GitHub.",
"resetComplete": "La interfaz web se ha restablecido. Actualice la página para recargarla.",
"useSlidersForAll": "Utilice controles deslizantes para todas las opciones"
"resetComplete": "Se ha restablecido la interfaz web.",
"useSlidersForAll": "Utilice controles deslizantes para todas las opciones",
"general": "General",
"consoleLogLevel": "Nivel del registro",
"shouldLogToConsole": "Registro de la consola",
"developer": "Desarrollador",
"antialiasProgressImages": "Imágenes del progreso de Antialias",
"showProgressInViewer": "Mostrar las imágenes del progreso en el visor",
"ui": "Interfaz del usuario",
"generation": "Generación",
"favoriteSchedulers": "Programadores favoritos",
"favoriteSchedulersPlaceholder": "No hay programadores favoritos",
"showAdvancedOptions": "Mostrar las opciones avanzadas",
"alternateCanvasLayout": "Diseño alternativo del lienzo",
"beta": "Beta",
"enableNodesEditor": "Activar el editor de nodos",
"experimental": "Experimental",
"autoChangeDimensions": "Actualiza W/H a los valores predeterminados del modelo cuando se modifica"
},
"toast": {
"tempFoldersEmptied": "Directorio temporal vaciado",
"uploadFailed": "Error al subir archivo",
"uploadFailedMultipleImagesDesc": "Únicamente se puede subir una imágen a la vez",
"uploadFailedUnableToLoadDesc": "No se pudo cargar la imágen",
"downloadImageStarted": "Descargando imágen",
"imageCopied": "Imágen copiada",
"imageLinkCopied": "Enlace de imágen copiado",
"imageNotLoaded": "No se cargó la imágen",
"imageNotLoadedDesc": "No se encontró imagen para enviar al módulo Imagen a Imagen",
"imageNotLoadedDesc": "No se pudo encontrar la imagen",
"imageSavedToGallery": "Imágen guardada en la galería",
"canvasMerged": "Lienzo consolidado",
"sentToImageToImage": "Enviar hacia Imagen a Imagen",
@@ -536,7 +598,21 @@
"serverError": "Error en el servidor",
"disconnected": "Desconectado del servidor",
"canceled": "Procesando la cancelación",
"connected": "Conectado al servidor"
"connected": "Conectado al servidor",
"problemCopyingImageLink": "No se puede copiar el enlace de la imagen",
"uploadFailedInvalidUploadDesc": "Debe ser una sola imagen PNG o JPEG",
"parameterSet": "Conjunto de parámetros",
"parameterNotSet": "Parámetro no configurado",
"nodesSaved": "Nodos guardados",
"nodesLoadedFailed": "Error al cargar los nodos",
"nodesLoaded": "Nodos cargados",
"nodesCleared": "Nodos borrados",
"problemCopyingImage": "No se puede copiar la imagen",
"nodesNotValidJSON": "JSON no válido",
"nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.",
"nodesUnrecognizedTypes": "No se puede cargar. El gráfico tiene tipos no reconocidos",
"nodesNotValidGraph": "Gráfico del nodo InvokeAI no válido",
"nodesBrokenConnections": "No se puede cargar. Algunas conexiones están rotas."
},
"tooltip": {
"feature": {
@@ -610,7 +686,8 @@
"betaClear": "Limpiar",
"betaDarkenOutside": "Oscurecer fuera",
"betaLimitToBox": "Limitar a caja",
"betaPreserveMasked": "Preservar área enmascarada"
"betaPreserveMasked": "Preservar área enmascarada",
"antialiasing": "Suavizado"
},
"accessibility": {
"invokeProgressBar": "Activar la barra de progreso",
@@ -631,8 +708,30 @@
"modifyConfig": "Modificar la configuración",
"toggleAutoscroll": "Activar el autodesplazamiento",
"toggleLogViewer": "Alternar el visor de registros",
"showGallery": "Mostrar galería",
"showOptionsPanel": "Mostrar el panel de opciones",
"showOptionsPanel": "Mostrar el panel lateral",
"menu": "Menú"
},
"ui": {
"hideProgressImages": "Ocultar el progreso de la imagen",
"showProgressImages": "Mostrar el progreso de la imagen",
"swapSizes": "Cambiar los tamaños",
"lockRatio": "Proporción del bloqueo"
},
"nodes": {
"showGraphNodes": "Mostrar la superposición de los gráficos",
"zoomInNodes": "Acercar",
"hideMinimapnodes": "Ocultar el minimapa",
"fitViewportNodes": "Ajustar la vista",
"zoomOutNodes": "Alejar",
"hideGraphNodes": "Ocultar la superposición de los gráficos",
"hideLegendNodes": "Ocultar la leyenda del tipo de campo",
"showLegendNodes": "Mostrar la leyenda del tipo de campo",
"showMinimapnodes": "Mostrar el minimapa",
"reloadNodeTemplates": "Recargar las plantillas de nodos",
"loadWorkflow": "Cargar el flujo de trabajo",
"resetWorkflow": "Reiniciar e flujo de trabajo",
"resetWorkflowDesc": "¿Está seguro de que deseas restablecer este flujo de trabajo?",
"resetWorkflowDesc2": "Al reiniciar el flujo de trabajo se borrarán todos los nodos, aristas y detalles del flujo de trabajo.",
"downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON"
}
}

View File

@@ -15,7 +15,6 @@
"rotateCounterClockwise": "Kierrä vastapäivään",
"rotateClockwise": "Kierrä myötäpäivään",
"flipVertically": "Käännä pystysuoraan",
"showGallery": "Näytä galleria",
"modifyConfig": "Muokkaa konfiguraatiota",
"toggleAutoscroll": "Kytke automaattinen vieritys",
"toggleLogViewer": "Kytke lokin katselutila",
@@ -34,18 +33,13 @@
"hotkeysLabel": "Pikanäppäimet",
"reportBugLabel": "Raportoi Bugista",
"langPolish": "Puola",
"themeLabel": "Teema",
"langDutch": "Hollanti",
"settingsLabel": "Asetukset",
"githubLabel": "Github",
"darkTheme": "Tumma",
"lightTheme": "Vaalea",
"greenTheme": "Vihreä",
"langGerman": "Saksa",
"langPortuguese": "Portugali",
"discordLabel": "Discord",
"langEnglish": "Englanti",
"oceanTheme": "Meren sininen",
"langRussian": "Venäjä",
"langUkranian": "Ukraina",
"langSpanish": "Espanja",
@@ -79,7 +73,6 @@
"statusGeneratingInpainting": "Generoidaan sisällemaalausta",
"statusGeneratingOutpainting": "Generoidaan ulosmaalausta",
"statusRestoringFaces": "Korjataan kasvoja",
"pinOptionsPanel": "Kiinnitä asetukset -paneeli",
"loadingInvokeAI": "Ladataan Invoke AI:ta",
"loading": "Ladataan",
"statusGenerating": "Generoidaan",
@@ -95,7 +88,6 @@
"galleryImageResetSize": "Resetoi koko",
"maintainAspectRatio": "Säilytä kuvasuhde",
"galleryImageSize": "Kuvan koko",
"pinGallery": "Kiinnitä galleria",
"showGenerations": "Näytä generaatiot",
"singleColumnLayout": "Yhden sarakkeen asettelu",
"generations": "Generoinnit",

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "Raccourcis clavier",
"themeLabel": "Thème",
"languagePickerLabel": "Sélecteur de langue",
"reportBugLabel": "Signaler un bug",
"settingsLabel": "Paramètres",
"darkTheme": "Sombre",
"lightTheme": "Clair",
"greenTheme": "Vert",
"img2img": "Image en image",
"unifiedCanvas": "Canvas unifié",
"nodes": "Nœuds",
@@ -55,7 +51,6 @@
"statusConvertingModel": "Conversion du modèle",
"statusModelConverted": "Modèle converti",
"loading": "Chargement",
"pinOptionsPanel": "Épingler la page d'options",
"statusMergedModels": "Modèles mélangés",
"txt2img": "Texte vers image",
"postprocessing": "Post-Traitement"
@@ -71,7 +66,6 @@
"maintainAspectRatio": "Maintenir le rapport d'aspect",
"autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images",
"singleColumnLayout": "Mise en page en colonne unique",
"pinGallery": "Épingler la galerie",
"allImagesLoaded": "Toutes les images chargées",
"loadMore": "Charger plus",
"noImagesInGallery": "Aucune image dans la galerie"
@@ -356,7 +350,6 @@
"cfgScale": "CFG Echelle",
"width": "Largeur",
"height": "Hauteur",
"sampler": "Echantillonneur",
"seed": "Graine",
"randomizeSeed": "Graine Aléatoire",
"shuffle": "Mélanger",
@@ -378,10 +371,6 @@
"hiresOptim": "Optimisation Haute Résolution",
"imageFit": "Ajuster Image Initiale à la Taille de Sortie",
"codeformerFidelity": "Fidélité",
"seamSize": "Taille des Joints",
"seamBlur": "Flou des Joints",
"seamStrength": "Force des Joints",
"seamSteps": "Etapes des Joints",
"scaleBeforeProcessing": "Echelle Avant Traitement",
"scaledWidth": "Larg. Échelle",
"scaledHeight": "Haut. Échelle",
@@ -392,8 +381,6 @@
"infillScalingHeader": "Remplissage et Mise à l'Échelle",
"img2imgStrength": "Force de l'Image à l'Image",
"toggleLoopback": "Activer/Désactiver la Boucle",
"invoke": "Invoker",
"promptPlaceholder": "Tapez le prompt ici. [tokens négatifs], (poids positif)++, (poids négatif)--, swap et blend sont disponibles (voir les docs)",
"sendTo": "Envoyer à",
"sendToImg2Img": "Envoyer à Image à Image",
"sendToUnifiedCanvas": "Envoyer au Canvas Unifié",
@@ -407,7 +394,6 @@
"useAll": "Tout utiliser",
"useInitImg": "Utiliser l'image initiale",
"info": "Info",
"deleteImage": "Supprimer l'image",
"initialImage": "Image initiale",
"showOptionsPanel": "Afficher le panneau d'options"
},
@@ -417,7 +403,6 @@
"saveSteps": "Enregistrer les images tous les n étapes",
"confirmOnDelete": "Confirmer la suppression",
"displayHelpIcons": "Afficher les icônes d'aide",
"useCanvasBeta": "Utiliser la mise en page bêta de Canvas",
"enableImageDebugging": "Activer le débogage d'image",
"resetWebUI": "Réinitialiser l'interface Web",
"resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.",
@@ -427,7 +412,6 @@
"toast": {
"tempFoldersEmptied": "Dossiers temporaires vidés",
"uploadFailed": "Téléchargement échoué",
"uploadFailedMultipleImagesDesc": "Plusieurs images collées, peut uniquement télécharger une image à la fois",
"uploadFailedUnableToLoadDesc": "Impossible de charger le fichier",
"downloadImageStarted": "Téléchargement de l'image démarré",
"imageCopied": "Image copiée",
@@ -538,6 +522,10 @@
"useThisParameter": "Utiliser ce paramètre",
"zoomIn": "Zoom avant",
"zoomOut": "Zoom arrière",
"showOptionsPanel": "Montrer la page d'options"
"showOptionsPanel": "Montrer la page d'options",
"modelSelect": "Choix du modèle",
"invokeProgressBar": "Barre de Progression Invoke",
"copyMetadataJson": "Copie des métadonnées JSON",
"menu": "Menu"
}
}

View File

@@ -107,13 +107,10 @@
},
"common": {
"nodesDesc": "מערכת מבוססת צמתים עבור יצירת תמונות עדיין תחת פיתוח. השארו קשובים לעדכונים עבור הפיצ׳ר המדהים הזה.",
"themeLabel": "ערכת נושא",
"languagePickerLabel": "בחירת שפה",
"githubLabel": "גיטהאב",
"discordLabel": "דיסקורד",
"settingsLabel": "הגדרות",
"darkTheme": "חשוך",
"lightTheme": "מואר",
"langEnglish": "אנגלית",
"langDutch": "הולנדית",
"langArabic": "ערבית",
@@ -155,7 +152,6 @@
"statusMergedModels": "מודלים מוזגו",
"hotkeysLabel": "מקשים חמים",
"reportBugLabel": "דווח באג",
"greenTheme": "ירוק",
"langItalian": "איטלקית",
"upload": "העלאה",
"langPolish": "פולנית",
@@ -384,7 +380,6 @@
"maintainAspectRatio": "שמור על יחס רוחב-גובה",
"autoSwitchNewImages": "החלף אוטומטית לתמונות חדשות",
"singleColumnLayout": "תצוגת עמודה אחת",
"pinGallery": "הצמד גלריה",
"allImagesLoaded": "כל התמונות נטענו",
"loadMore": "טען עוד",
"noImagesInGallery": "אין תמונות בגלריה",
@@ -399,7 +394,6 @@
"cfgScale": "סולם CFG",
"width": "רוחב",
"height": "גובה",
"sampler": "דוגם",
"seed": "זרע",
"imageToImage": "תמונה לתמונה",
"randomizeSeed": "זרע אקראי",
@@ -416,10 +410,6 @@
"hiresOptim": "אופטימיזצית רזולוציה גבוהה",
"hiresStrength": "חוזק רזולוציה גבוהה",
"codeformerFidelity": "דבקות",
"seamSize": "גודל תפר",
"seamBlur": "טשטוש תפר",
"seamStrength": "חוזק תפר",
"seamSteps": "שלבי תפר",
"scaleBeforeProcessing": "שנה קנה מידה לפני עיבוד",
"scaledWidth": "קנה מידה לאחר שינוי W",
"scaledHeight": "קנה מידה לאחר שינוי H",
@@ -432,14 +422,12 @@
"symmetry": "סימטריה",
"vSymmetryStep": "צעד סימטריה V",
"hSymmetryStep": "צעד סימטריה H",
"invoke": "הפעלה",
"cancel": {
"schedule": "ביטול לאחר האיטרציה הנוכחית",
"isScheduled": "מבטל",
"immediate": "ביטול מיידי",
"setType": "הגדר סוג ביטול"
},
"negativePrompts": "בקשות שליליות",
"sendTo": "שליחה אל",
"copyImage": "העתקת תמונה",
"downloadImage": "הורדת תמונה",
@@ -464,15 +452,12 @@
"seamlessTiling": "ריצוף חלק",
"img2imgStrength": "חוזק תמונה לתמונה",
"initialImage": "תמונה ראשונית",
"copyImageToLink": "העתקת תמונה לקישור",
"deleteImage": "מחיקת תמונה",
"promptPlaceholder": "הקלד בקשה כאן. [אסימונים שליליים], (העלאת משקל)++ , (הורדת משקל)--, החלפה ומיזוג זמינים (ראה מסמכים)"
"copyImageToLink": "העתקת תמונה לקישור"
},
"settings": {
"models": "מודלים",
"displayInProgress": "הצגת תמונות בתהליך",
"confirmOnDelete": "אישור בעת המחיקה",
"useCanvasBeta": "שימוש בגרסת ביתא של תצוגת הקנבס",
"useSlidersForAll": "שימוש במחוונים לכל האפשרויות",
"resetWebUI": "איפוס ממשק משתמש",
"resetWebUIDesc1": "איפוס ממשק המשתמש האינטרנטי מאפס רק את המטמון המקומי של הדפדפן של התמונות וההגדרות שנשמרו. זה לא מוחק תמונות מהדיסק.",
@@ -484,7 +469,6 @@
},
"toast": {
"uploadFailed": "העלאה נכשלה",
"uploadFailedMultipleImagesDesc": "תמונות מרובות הודבקו, ניתן להעלות תמונה אחת בלבד בכל פעם",
"imageCopied": "התמונה הועתקה",
"imageLinkCopied": "קישור תמונה הועתק",
"imageNotLoadedDesc": "לא נמצאה תמונה לשליחה למודול תמונה לתמונה",

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,8 @@
{
"common": {
"themeLabel": "テーマ",
"languagePickerLabel": "言語選択",
"reportBugLabel": "バグ報告",
"settingsLabel": "設定",
"darkTheme": "ダーク",
"lightTheme": "ライト",
"greenTheme": "緑",
"langJapanese": "日本語",
"nodesDesc": "現在、画像生成のためのノードベースシステムを開発中です。機能についてのアップデートにご期待ください。",
"postProcessing": "後処理",
@@ -56,14 +52,12 @@
"loadingInvokeAI": "Invoke AIをロード中",
"statusConvertingModel": "モデルの変換",
"statusMergedModels": "マージ済モデル",
"pinOptionsPanel": "オプションパネルを固定",
"githubLabel": "Github",
"hotkeysLabel": "ホットキー",
"langHebrew": "עברית",
"discordLabel": "Discord",
"langItalian": "Italiano",
"langEnglish": "English",
"oceanTheme": "オーシャン",
"langArabic": "アラビア語",
"langDutch": "Nederlands",
"langFrench": "Français",
@@ -83,7 +77,6 @@
"gallerySettings": "ギャラリーの設定",
"maintainAspectRatio": "アスペクト比を維持",
"singleColumnLayout": "1カラムレイアウト",
"pinGallery": "ギャラリーにピン留め",
"allImagesLoaded": "すべての画像を読み込む",
"loadMore": "さらに読み込む",
"noImagesInGallery": "ギャラリーに画像がありません",
@@ -355,7 +348,6 @@
"useSeed": "シード値を使用",
"useAll": "すべてを使用",
"info": "情報",
"deleteImage": "画像を削除",
"showOptionsPanel": "オプションパネルを表示"
},
"settings": {
@@ -364,7 +356,6 @@
"saveSteps": "nステップごとに画像を保存",
"confirmOnDelete": "削除時に確認",
"displayHelpIcons": "ヘルプアイコンを表示",
"useCanvasBeta": "キャンバスレイアウト(Beta)を使用する",
"enableImageDebugging": "画像のデバッグを有効化",
"resetWebUI": "WebUIをリセット",
"resetWebUIDesc1": "WebUIのリセットは、画像と保存された設定のキャッシュをリセットするだけです。画像を削除するわけではありません。",
@@ -373,7 +364,6 @@
},
"toast": {
"uploadFailed": "アップロード失敗",
"uploadFailedMultipleImagesDesc": "一度にアップロードできる画像は1枚のみです。",
"uploadFailedUnableToLoadDesc": "ファイルを読み込むことができません。",
"downloadImageStarted": "画像ダウンロード開始",
"imageCopied": "画像をコピー",
@@ -471,7 +461,6 @@
"toggleAutoscroll": "自動スクロールの切替",
"modifyConfig": "Modify Config",
"toggleLogViewer": "Log Viewerの切替",
"showGallery": "ギャラリーを表示",
"showOptionsPanel": "オプションパネルを表示"
}
}

View File

@@ -1,13 +1,9 @@
{
"common": {
"themeLabel": "테마 설정",
"languagePickerLabel": "언어 설정",
"reportBugLabel": "버그 리포트",
"githubLabel": "Github",
"settingsLabel": "설정",
"darkTheme": "다크 모드",
"lightTheme": "라이트 모드",
"greenTheme": "그린 모드",
"langArabic": "العربية",
"langEnglish": "English",
"langDutch": "Nederlands",

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "Skróty klawiszowe",
"themeLabel": "Motyw",
"languagePickerLabel": "Wybór języka",
"reportBugLabel": "Zgłoś błąd",
"settingsLabel": "Ustawienia",
"darkTheme": "Ciemny",
"lightTheme": "Jasny",
"greenTheme": "Zielony",
"img2img": "Obraz na obraz",
"unifiedCanvas": "Tryb uniwersalny",
"nodes": "Węzły",
@@ -43,7 +39,11 @@
"statusUpscaling": "Powiększanie obrazu",
"statusUpscalingESRGAN": "Powiększanie (ESRGAN)",
"statusLoadingModel": "Wczytywanie modelu",
"statusModelChanged": "Zmieniono model"
"statusModelChanged": "Zmieniono model",
"githubLabel": "GitHub",
"discordLabel": "Discord",
"darkMode": "Tryb ciemny",
"lightMode": "Tryb jasny"
},
"gallery": {
"generations": "Wygenerowane",
@@ -56,7 +56,6 @@
"maintainAspectRatio": "Zachowaj proporcje",
"autoSwitchNewImages": "Przełączaj na nowe obrazy",
"singleColumnLayout": "Układ jednokolumnowy",
"pinGallery": "Przypnij galerię",
"allImagesLoaded": "Koniec listy",
"loadMore": "Wczytaj więcej",
"noImagesInGallery": "Brak obrazów w galerii"
@@ -274,7 +273,6 @@
"cfgScale": "Skala CFG",
"width": "Szerokość",
"height": "Wysokość",
"sampler": "Próbkowanie",
"seed": "Inicjator",
"randomizeSeed": "Losowy inicjator",
"shuffle": "Losuj",
@@ -296,10 +294,6 @@
"hiresOptim": "Optymalizacja wys. rozdzielczości",
"imageFit": "Przeskaluj oryginalny obraz",
"codeformerFidelity": "Dokładność",
"seamSize": "Rozmiar",
"seamBlur": "Rozmycie",
"seamStrength": "Siła",
"seamSteps": "Kroki",
"scaleBeforeProcessing": "Tryb skalowania",
"scaledWidth": "Sk. do szer.",
"scaledHeight": "Sk. do wys.",
@@ -310,8 +304,6 @@
"infillScalingHeader": "Wypełnienie i skalowanie",
"img2imgStrength": "Wpływ sugestii na obraz",
"toggleLoopback": "Wł/wył sprzężenie zwrotne",
"invoke": "Wywołaj",
"promptPlaceholder": "W tym miejscu wprowadź swoje sugestie. [negatywne sugestie], (wzmocnienie), (osłabienie)--, po więcej opcji (np. swap lub blend) zajrzyj do dokumentacji",
"sendTo": "Wyślij do",
"sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"",
"sendToUnifiedCanvas": "Użyj w trybie uniwersalnym",
@@ -324,7 +316,6 @@
"useAll": "Skopiuj wszystko",
"useInitImg": "Użyj oryginalnego obrazu",
"info": "Informacje",
"deleteImage": "Usuń obraz",
"initialImage": "Oryginalny obraz",
"showOptionsPanel": "Pokaż panel ustawień"
},
@@ -334,7 +325,6 @@
"saveSteps": "Zapisuj obrazy co X kroków",
"confirmOnDelete": "Potwierdzaj usuwanie",
"displayHelpIcons": "Wyświetlaj ikony pomocy",
"useCanvasBeta": "Nowy układ trybu uniwersalnego",
"enableImageDebugging": "Włącz debugowanie obrazu",
"resetWebUI": "Zresetuj interfejs",
"resetWebUIDesc1": "Resetowanie interfejsu wyczyści jedynie dane i ustawienia zapisane w pamięci przeglądarki. Nie usunie żadnych obrazów z dysku.",
@@ -344,7 +334,6 @@
"toast": {
"tempFoldersEmptied": "Wyczyszczono folder tymczasowy",
"uploadFailed": "Błąd przesyłania obrazu",
"uploadFailedMultipleImagesDesc": "Możliwe jest przesłanie tylko jednego obrazu na raz",
"uploadFailedUnableToLoadDesc": "Błąd wczytywania obrazu",
"downloadImageStarted": "Rozpoczęto pobieranie",
"imageCopied": "Skopiowano obraz",
@@ -446,5 +435,27 @@
"betaDarkenOutside": "Przyciemnienie",
"betaLimitToBox": "Ogranicz do zaznaczenia",
"betaPreserveMasked": "Zachowaj obszar"
},
"accessibility": {
"zoomIn": "Przybliż",
"exitViewer": "Wyjdź z podglądu",
"modelSelect": "Wybór modelu",
"invokeProgressBar": "Pasek postępu",
"reset": "Zerowanie",
"useThisParameter": "Użyj tego parametru",
"copyMetadataJson": "Kopiuj metadane JSON",
"uploadImage": "Wgrywanie obrazu",
"previousImage": "Poprzedni obraz",
"nextImage": "Następny obraz",
"zoomOut": "Oddal",
"rotateClockwise": "Obróć zgodnie ze wskazówkami zegara",
"rotateCounterClockwise": "Obróć przeciwnie do wskazówek zegara",
"flipHorizontally": "Odwróć horyzontalnie",
"flipVertically": "Odwróć wertykalnie",
"modifyConfig": "Modyfikuj ustawienia",
"toggleAutoscroll": "Przełącz autoprzewijanie",
"toggleLogViewer": "Przełącz podgląd logów",
"showOptionsPanel": "Pokaż panel opcji",
"menu": "Menu"
}
}

View File

@@ -1,11 +1,8 @@
{
"common": {
"greenTheme": "Verde",
"langArabic": "العربية",
"themeLabel": "Tema",
"reportBugLabel": "Reportar Bug",
"settingsLabel": "Configurações",
"lightTheme": "Claro",
"langBrPortuguese": "Português do Brasil",
"languagePickerLabel": "Seletor de Idioma",
"langDutch": "Nederlands",
@@ -57,14 +54,11 @@
"statusModelChanged": "Modelo Alterado",
"githubLabel": "Github",
"discordLabel": "Discord",
"darkTheme": "Escuro",
"training": "Treinando",
"statusGeneratingOutpainting": "Geração de Ampliação",
"statusGenerationComplete": "Geração Completa",
"statusMergingModels": "Mesclando Modelos",
"statusMergedModels": "Modelos Mesclados",
"oceanTheme": "Oceano",
"pinOptionsPanel": "Fixar painel de opções",
"loading": "A carregar",
"loadingInvokeAI": "A carregar Invoke AI",
"langPortuguese": "Português"
@@ -74,7 +68,6 @@
"gallerySettings": "Configurações de Galeria",
"maintainAspectRatio": "Mater Proporções",
"autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente",
"pinGallery": "Fixar Galeria",
"singleColumnLayout": "Disposição em Coluna Única",
"allImagesLoaded": "Todas as Imagens Carregadas",
"loadMore": "Carregar Mais",
@@ -407,7 +400,6 @@
"width": "Largura",
"seed": "Seed",
"hiresStrength": "Força da Alta Resolução",
"negativePrompts": "Indicações negativas",
"general": "Geral",
"randomizeSeed": "Seed Aleatório",
"shuffle": "Embaralhar",
@@ -425,10 +417,6 @@
"hiresOptim": "Otimização de Alta Res",
"imageFit": "Caber Imagem Inicial No Tamanho de Saída",
"codeformerFidelity": "Fidelidade",
"seamSize": "Tamanho da Fronteira",
"seamBlur": "Desfoque da Fronteira",
"seamStrength": "Força da Fronteira",
"seamSteps": "Passos da Fronteira",
"tileSize": "Tamanho do Ladrilho",
"boundingBoxHeader": "Caixa Delimitadora",
"seamCorrectionHeader": "Correção de Fronteira",
@@ -436,12 +424,10 @@
"img2imgStrength": "Força de Imagem Para Imagem",
"toggleLoopback": "Ativar Loopback",
"symmetry": "Simetria",
"promptPlaceholder": "Digite o prompt aqui. [tokens negativos], (upweight)++, (downweight)--, trocar e misturar estão disponíveis (veja docs)",
"sendTo": "Mandar para",
"openInViewer": "Abrir No Visualizador",
"closeViewer": "Fechar Visualizador",
"usePrompt": "Usar Prompt",
"deleteImage": "Apagar Imagem",
"initialImage": "Imagem inicial",
"showOptionsPanel": "Mostrar Painel de Opções",
"strength": "Força",
@@ -449,12 +435,10 @@
"upscale": "Redimensionar",
"upscaleImage": "Redimensionar Imagem",
"scaleBeforeProcessing": "Escala Antes do Processamento",
"invoke": "Invocar",
"images": "Imagems",
"steps": "Passos",
"cfgScale": "Escala CFG",
"height": "Altura",
"sampler": "Amostrador",
"imageToImage": "Imagem para Imagem",
"variationAmount": "Quntidade de Variatções",
"scaledWidth": "L Escalada",
@@ -481,7 +465,6 @@
"settings": {
"confirmOnDelete": "Confirmar Antes de Apagar",
"displayHelpIcons": "Mostrar Ícones de Ajuda",
"useCanvasBeta": "Usar Layout de Telas Beta",
"enableImageDebugging": "Ativar Depuração de Imagem",
"useSlidersForAll": "Usar deslizadores para todas as opções",
"resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.",
@@ -494,7 +477,6 @@
},
"toast": {
"uploadFailed": "Envio Falhou",
"uploadFailedMultipleImagesDesc": "Várias imagens copiadas, só é permitido uma imagem de cada vez",
"uploadFailedUnableToLoadDesc": "Não foj possível carregar o ficheiro",
"downloadImageStarted": "Download de Imagem Começou",
"imageNotLoadedDesc": "Nenhuma imagem encontrada a enviar para o módulo de imagem para imagem",
@@ -611,7 +593,6 @@
"flipVertically": "Espelhar verticalmente",
"modifyConfig": "Modificar config",
"toggleAutoscroll": "Alternar rolagem automática",
"showGallery": "Mostrar galeria",
"showOptionsPanel": "Mostrar painel de opções",
"uploadImage": "Enviar imagem",
"previousImage": "Imagem anterior",

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "Teclas de atalho",
"themeLabel": "Tema",
"languagePickerLabel": "Seletor de Idioma",
"reportBugLabel": "Relatar Bug",
"settingsLabel": "Configurações",
"darkTheme": "Noite",
"lightTheme": "Dia",
"greenTheme": "Verde",
"img2img": "Imagem Para Imagem",
"unifiedCanvas": "Tela Unificada",
"nodes": "Nódulos",
@@ -63,7 +59,6 @@
"statusMergedModels": "Modelos Mesclados",
"langRussian": "Russo",
"langSpanish": "Espanhol",
"pinOptionsPanel": "Fixar painel de opções",
"loadingInvokeAI": "Carregando Invoke AI",
"loading": "Carregando"
},
@@ -78,7 +73,6 @@
"maintainAspectRatio": "Mater Proporções",
"autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente",
"singleColumnLayout": "Disposição em Coluna Única",
"pinGallery": "Fixar Galeria",
"allImagesLoaded": "Todas as Imagens Carregadas",
"loadMore": "Carregar Mais",
"noImagesInGallery": "Sem Imagens na Galeria"
@@ -402,7 +396,6 @@
"cfgScale": "Escala CFG",
"width": "Largura",
"height": "Altura",
"sampler": "Amostrador",
"seed": "Seed",
"randomizeSeed": "Seed Aleatório",
"shuffle": "Embaralhar",
@@ -424,10 +417,6 @@
"hiresOptim": "Otimização de Alta Res",
"imageFit": "Caber Imagem Inicial No Tamanho de Saída",
"codeformerFidelity": "Fidelidade",
"seamSize": "Tamanho da Fronteira",
"seamBlur": "Desfoque da Fronteira",
"seamStrength": "Força da Fronteira",
"seamSteps": "Passos da Fronteira",
"scaleBeforeProcessing": "Escala Antes do Processamento",
"scaledWidth": "L Escalada",
"scaledHeight": "A Escalada",
@@ -438,8 +427,6 @@
"infillScalingHeader": "Preencimento e Escala",
"img2imgStrength": "Força de Imagem Para Imagem",
"toggleLoopback": "Ativar Loopback",
"invoke": "Invoke",
"promptPlaceholder": "Digite o prompt aqui. [tokens negativos], (upweight)++, (downweight)--, trocar e misturar estão disponíveis (veja docs)",
"sendTo": "Mandar para",
"sendToImg2Img": "Mandar para Imagem Para Imagem",
"sendToUnifiedCanvas": "Mandar para Tela Unificada",
@@ -452,14 +439,12 @@
"useAll": "Usar Todos",
"useInitImg": "Usar Imagem Inicial",
"info": "Informações",
"deleteImage": "Apagar Imagem",
"initialImage": "Imagem inicial",
"showOptionsPanel": "Mostrar Painel de Opções",
"vSymmetryStep": "V Passo de Simetria",
"hSymmetryStep": "H Passo de Simetria",
"symmetry": "Simetria",
"copyImage": "Copiar imagem",
"negativePrompts": "Indicações negativas",
"hiresStrength": "Força da Alta Resolução",
"denoisingStrength": "A força de remoção de ruído",
"imageToImage": "Imagem para Imagem",
@@ -477,7 +462,6 @@
"saveSteps": "Salvar imagens a cada n passos",
"confirmOnDelete": "Confirmar Antes de Apagar",
"displayHelpIcons": "Mostrar Ícones de Ajuda",
"useCanvasBeta": "Usar Layout de Telas Beta",
"enableImageDebugging": "Ativar Depuração de Imagem",
"resetWebUI": "Reiniciar Interface",
"resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.",
@@ -488,7 +472,6 @@
"toast": {
"tempFoldersEmptied": "Pasta de Arquivos Temporários Esvaziada",
"uploadFailed": "Envio Falhou",
"uploadFailedMultipleImagesDesc": "Várias imagens copiadas, só é permitido uma imagem de cada vez",
"uploadFailedUnableToLoadDesc": "Não foj possível carregar o arquivo",
"downloadImageStarted": "Download de Imagem Começou",
"imageCopied": "Imagem Copiada",

View File

@@ -1,16 +1,12 @@
{
"common": {
"hotkeysLabel": "Горячие клавиши",
"themeLabel": "Тема",
"languagePickerLabel": "Язык",
"reportBugLabel": "Сообщить об ошибке",
"settingsLabel": "Настройки",
"darkTheme": "Темная",
"lightTheme": "Светлая",
"greenTheme": "Зеленая",
"img2img": "Изображение в изображение (img2img)",
"unifiedCanvas": "Единый холст",
"nodes": "Ноды",
"nodes": "Редактор рабочего процесса",
"langRussian": "Русский",
"nodesDesc": "Cистема генерации изображений на основе нодов (узлов) уже разрабатывается. Следите за новостями об этой замечательной функции.",
"postProcessing": "Постобработка",
@@ -49,14 +45,12 @@
"statusMergingModels": "Слияние моделей",
"statusModelConverted": "Модель сконвертирована",
"statusMergedModels": "Модели объединены",
"pinOptionsPanel": "Закрепить панель настроек",
"loading": "Загрузка",
"loadingInvokeAI": "Загрузка Invoke AI",
"back": "Назад",
"statusConvertingModel": "Конвертация модели",
"cancel": "Отменить",
"accept": "Принять",
"oceanTheme": "Океан",
"langUkranian": "Украинский",
"langEnglish": "Английский",
"postprocessing": "Постобработка",
@@ -74,7 +68,21 @@
"langPortuguese": "Португальский",
"txt2img": "Текст в изображение (txt2img)",
"langBrPortuguese": "Португальский (Бразилия)",
"linear": "Линейная обработка"
"linear": "Линейная обработка",
"dontAskMeAgain": "Больше не спрашивать",
"areYouSure": "Вы уверены?",
"random": "Случайное",
"generate": "Сгенерировать",
"openInNewTab": "Открыть в новой вкладке",
"imagePrompt": "Запрос",
"communityLabel": "Сообщество",
"lightMode": "Светлая тема",
"batch": "Пакетный менеджер",
"modelManager": "Менеджер моделей",
"darkMode": "Темная тема",
"nodeEditor": "Редактор Нодов (Узлов)",
"controlNet": "Controlnet",
"advanced": "Расширенные"
},
"gallery": {
"generations": "Генерации",
@@ -87,10 +95,15 @@
"maintainAspectRatio": "Сохранять пропорции",
"autoSwitchNewImages": "Автоматически выбирать новые",
"singleColumnLayout": "Одна колонка",
"pinGallery": "Закрепить галерею",
"allImagesLoaded": "Все изображения загружены",
"loadMore": "Показать больше",
"noImagesInGallery": "Изображений нет"
"noImagesInGallery": "Изображений нет",
"deleteImagePermanent": "Удаленные изображения невозможно восстановить.",
"deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.",
"deleteImage": "Удалить изображение",
"images": "Изображения",
"assets": "Ресурсы",
"autoAssignBoardOnClick": "Авто-назначение доски по клику"
},
"hotkeys": {
"keyboardShortcuts": "Горячие клавиши",
@@ -297,7 +310,12 @@
"acceptStagingImage": {
"title": "Принять изображение",
"desc": "Принять текущее изображение"
}
},
"addNodes": {
"desc": "Открывает меню добавления узла",
"title": "Добавление узлов"
},
"nodesHotkeys": "Горячие клавиши узлов"
},
"modelManager": {
"modelManager": "Менеджер моделей",
@@ -350,14 +368,14 @@
"deleteModel": "Удалить модель",
"deleteConfig": "Удалить конфигурацию",
"deleteMsg1": "Вы точно хотите удалить модель из InvokeAI?",
"deleteMsg2": "Это не удалит файл модели с диска. Позже вы можете добавить его снова.",
"deleteMsg2": "Это приведет К УДАЛЕНИЮ модели С ДИСКА, если она находится в корневой папке Invoke. Если вы используете пользовательское расположение, то модель НЕ будет удалена с диска.",
"repoIDValidationMsg": "Онлайн-репозиторий модели",
"convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 4 7 Гб.",
"convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 27 Гб.",
"invokeAIFolder": "Каталог InvokeAI",
"ignoreMismatch": "Игнорировать несоответствия между выбранными моделями",
"addCheckpointModel": "Добавить модель Checkpoint/Safetensor",
"formMessageDiffusersModelLocationDesc": "Укажите хотя бы одно.",
"convertToDiffusersHelpText3": "Файл модели на диске НЕ будет удалён или изменён. Вы сможете заново добавить его в Model Manager при необходимости.",
"convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.",
"vaeRepoID": "ID репозитория VAE",
"mergedModelName": "Название объединенной модели",
"checkpointModels": "Checkpoints",
@@ -409,7 +427,27 @@
"weightedSum": "Взвешенная сумма",
"safetensorModels": "SafeTensors",
"v2_768": "v2 (768px)",
"v2_base": "v2 (512px)"
"v2_base": "v2 (512px)",
"modelDeleted": "Модель удалена",
"importModels": "Импорт Моделей",
"variant": "Вариант",
"baseModel": "Базовая модель",
"modelsSynced": "Модели синхронизированы",
"modelSyncFailed": "Не удалось синхронизировать модели",
"vae": "VAE",
"modelDeleteFailed": "Не удалось удалить модель",
"noCustomLocationProvided": "Пользовательское местоположение не указано",
"convertingModelBegin": "Конвертация модели. Пожалуйста, подождите.",
"settings": "Настройки",
"selectModel": "Выберите модель",
"syncModels": "Синхронизация моделей",
"syncModelsDesc": "Если ваши модели не синхронизированы с серверной частью, вы можете обновить их, используя эту опцию. Обычно это удобно в тех случаях, когда вы вручную обновляете свой файл \"models.yaml\" или добавляете модели в корневую папку InvokeAI после загрузки приложения.",
"modelUpdateFailed": "Не удалось обновить модель",
"modelConversionFailed": "Не удалось сконвертировать модель",
"modelsMergeFailed": "Не удалось выполнить слияние моделей",
"loraModels": "LoRAs",
"onnxModels": "Onnx",
"oliveModels": "Olives"
},
"parameters": {
"images": "Изображения",
@@ -417,10 +455,9 @@
"cfgScale": "Уровень CFG",
"width": "Ширина",
"height": "Высота",
"sampler": "Семплер",
"seed": "Сид",
"randomizeSeed": "Случайный сид",
"shuffle": "Обновить",
"shuffle": "Обновить сид",
"noiseThreshold": "Порог шума",
"perlinNoise": "Шум Перлина",
"variations": "Вариации",
@@ -439,10 +476,6 @@
"hiresOptim": "Оптимизация High Res",
"imageFit": "Уместить изображение",
"codeformerFidelity": "Точность",
"seamSize": "Размер шва",
"seamBlur": "Размытие шва",
"seamStrength": "Сила шва",
"seamSteps": "Шаги шва",
"scaleBeforeProcessing": "Масштабировать",
"scaledWidth": "Масштаб Ш",
"scaledHeight": "Масштаб В",
@@ -453,8 +486,6 @@
"infillScalingHeader": "Заполнение и масштабирование",
"img2imgStrength": "Сила обработки img2img",
"toggleLoopback": "Зациклить обработку",
"invoke": "Invoke",
"promptPlaceholder": "Введите запрос здесь (на английском). [исключенные токены], (более значимые)++, (менее значимые)--, swap и blend тоже доступны (смотрите Github)",
"sendTo": "Отправить",
"sendToImg2Img": "Отправить в img2img",
"sendToUnifiedCanvas": "Отправить на Единый холст",
@@ -467,7 +498,6 @@
"useAll": "Использовать все",
"useInitImg": "Использовать как исходное",
"info": "Метаданные",
"deleteImage": "Удалить изображение",
"initialImage": "Исходное изображение",
"showOptionsPanel": "Показать панель настроек",
"vSymmetryStep": "Шаг верт. симметрии",
@@ -485,8 +515,27 @@
"imageToImage": "Изображение в изображение",
"denoisingStrength": "Сила шумоподавления",
"copyImage": "Скопировать изображение",
"negativePrompts": "Исключающий запрос",
"showPreview": "Показать предпросмотр"
"showPreview": "Показать предпросмотр",
"noiseSettings": "Шум",
"seamlessXAxis": "Ось X",
"seamlessYAxis": "Ось Y",
"scheduler": "Планировщик",
"boundingBoxWidth": "Ширина ограничивающей рамки",
"boundingBoxHeight": "Высота ограничивающей рамки",
"positivePromptPlaceholder": "Запрос",
"negativePromptPlaceholder": "Исключающий запрос",
"controlNetControlMode": "Режим управления",
"clipSkip": "CLIP Пропуск",
"aspectRatio": "Соотношение",
"maskAdjustmentsHeader": "Настройка маски",
"maskBlur": "Размытие",
"maskBlurMethod": "Метод размытия",
"seamLowThreshold": "Низкий",
"seamHighThreshold": "Высокий",
"coherenceSteps": "Шагов",
"coherencePassHeader": "Порог Coherence",
"coherenceStrength": "Сила",
"compositingSettingsHeader": "Настройки компоновки"
},
"settings": {
"models": "Модели",
@@ -494,24 +543,38 @@
"saveSteps": "Сохранять каждые n щагов",
"confirmOnDelete": "Подтверждать удаление",
"displayHelpIcons": "Показывать значки подсказок",
"useCanvasBeta": "Показывать инструменты слева (Beta UI)",
"enableImageDebugging": "Включить отладку",
"resetWebUI": "Сброс настроек Web UI",
"resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.",
"resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.",
"resetComplete": "Интерфейс сброшен. Обновите эту страницу.",
"useSlidersForAll": "Использовать ползунки для всех параметров"
"resetComplete": "Настройки веб-интерфейса были сброшены.",
"useSlidersForAll": "Использовать ползунки для всех параметров",
"consoleLogLevel": "Уровень логирования",
"shouldLogToConsole": "Логи в консоль",
"developer": "Разработчик",
"general": "Основное",
"showProgressInViewer": "Показывать процесс генерации в Просмотрщике",
"antialiasProgressImages": "Сглаживать предпоказ процесса генерации",
"generation": "Поколение",
"ui": "Пользовательский интерфейс",
"favoriteSchedulers": "Избранные планировщики",
"favoriteSchedulersPlaceholder": "Нет избранных планировщиков",
"enableNodesEditor": "Включить редактор узлов",
"experimental": "Экспериментальные",
"beta": "Бета",
"alternateCanvasLayout": "Альтернативный слой холста",
"showAdvancedOptions": "Показать доп. параметры",
"autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении"
},
"toast": {
"tempFoldersEmptied": "Временная папка очищена",
"uploadFailed": "Загрузка не удалась",
"uploadFailedMultipleImagesDesc": "Можно вставить только одно изображение (вы попробовали вставить несколько)",
"uploadFailedUnableToLoadDesc": "Невозможно загрузить файл",
"downloadImageStarted": "Скачивание изображения началось",
"imageCopied": "Изображение скопировано",
"imageLinkCopied": "Ссылка на изображение скопирована",
"imageNotLoaded": "Изображение не загружено",
"imageNotLoadedDesc": "Не найдены изображения для отправки в img2img",
"imageNotLoadedDesc": "Не удалось найти изображение",
"imageSavedToGallery": "Изображение сохранено в галерею",
"canvasMerged": "Холст объединен",
"sentToImageToImage": "Отправить в img2img",
@@ -536,7 +599,21 @@
"serverError": "Ошибка сервера",
"disconnected": "Отключено от сервера",
"connected": "Подключено к серверу",
"canceled": "Обработка отменена"
"canceled": "Обработка отменена",
"problemCopyingImageLink": "Не удалось скопировать ссылку на изображение",
"uploadFailedInvalidUploadDesc": "Должно быть одно изображение в формате PNG или JPEG",
"parameterNotSet": "Параметр не задан",
"parameterSet": "Параметр задан",
"nodesLoaded": "Узлы загружены",
"problemCopyingImage": "Не удается скопировать изображение",
"nodesLoadedFailed": "Не удалось загрузить Узлы",
"nodesCleared": "Узлы очищены",
"nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.",
"nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы",
"nodesNotValidJSON": "Недопустимый JSON",
"nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.",
"nodesSaved": "Узлы сохранены",
"nodesNotValidGraph": "Недопустимый граф узлов InvokeAI"
},
"tooltip": {
"feature": {
@@ -610,7 +687,8 @@
"betaClear": "Очистить",
"betaDarkenOutside": "Затемнить снаружи",
"betaLimitToBox": "Ограничить выделением",
"betaPreserveMasked": "Сохранять маскируемую область"
"betaPreserveMasked": "Сохранять маскируемую область",
"antialiasing": "Не удалось скопировать ссылку на изображение"
},
"accessibility": {
"modelSelect": "Выбор модели",
@@ -625,8 +703,7 @@
"flipHorizontally": "Отразить горизонтально",
"toggleAutoscroll": "Включить автопрокрутку",
"toggleLogViewer": "Показать или скрыть просмотрщик логов",
"showOptionsPanel": "Показать опции",
"showGallery": "Показать галерею",
"showOptionsPanel": "Показать боковую панель",
"invokeProgressBar": "Индикатор выполнения",
"reset": "Сброс",
"modifyConfig": "Изменить конфиг",
@@ -634,5 +711,69 @@
"copyMetadataJson": "Скопировать метаданные JSON",
"exitViewer": "Закрыть просмотрщик",
"menu": "Меню"
},
"ui": {
"showProgressImages": "Показывать промежуточный итог",
"hideProgressImages": "Не показывать промежуточный итог",
"swapSizes": "Поменять местами размеры",
"lockRatio": "Зафиксировать пропорции"
},
"nodes": {
"zoomInNodes": "Увеличьте масштаб",
"zoomOutNodes": "Уменьшите масштаб",
"fitViewportNodes": "Уместить вид",
"hideGraphNodes": "Скрыть оверлей графа",
"showGraphNodes": "Показать оверлей графа",
"showLegendNodes": "Показать тип поля",
"hideMinimapnodes": "Скрыть миникарту",
"hideLegendNodes": "Скрыть тип поля",
"showMinimapnodes": "Показать миникарту",
"loadWorkflow": "Загрузить рабочий процесс",
"resetWorkflowDesc2": "Сброс рабочего процесса очистит все узлы, ребра и детали рабочего процесса.",
"resetWorkflow": "Сбросить рабочий процесс",
"resetWorkflowDesc": "Вы уверены, что хотите сбросить этот рабочий процесс?",
"reloadNodeTemplates": "Перезагрузить шаблоны узлов",
"downloadWorkflow": "Скачать JSON рабочего процесса"
},
"controlnet": {
"amult": "a_mult",
"contentShuffleDescription": "Перетасовывает содержимое изображения",
"bgth": "bg_th",
"contentShuffle": "Перетасовка содержимого",
"beginEndStepPercent": "Процент начала/конца шага",
"duplicate": "Дублировать",
"balanced": "Сбалансированный",
"f": "F",
"depthMidasDescription": "Генерация карты глубины с использованием Midas",
"control": "Контроль",
"coarse": "Грубость обработки",
"crop": "Обрезка",
"depthMidas": "Глубина (Midas)",
"enableControlnet": "Включить ControlNet",
"detectResolution": "Определить разрешение",
"controlMode": "Режим контроля",
"cannyDescription": "Детектор границ Canny",
"depthZoe": "Глубина (Zoe)",
"autoConfigure": "Автонастройка процессора",
"delete": "Удалить",
"canny": "Canny",
"depthZoeDescription": "Генерация карты глубины с использованием Zoe"
},
"boards": {
"autoAddBoard": "Авто добавление Доски",
"topMessage": "Эта доска содержит изображения, используемые в следующих функциях:",
"move": "Перемещение",
"menuItemAutoAdd": "Авто добавление на эту доску",
"myBoard": "Моя Доска",
"searchBoard": "Поиск Доски...",
"noMatching": "Нет подходящих Досок",
"selectBoard": "Выбрать Доску",
"cancel": "Отменить",
"addBoard": "Добавить Доску",
"bottomMessage": "Удаление этой доски и ее изображений приведет к сбросу всех функций, использующихся их в данный момент.",
"uncategorized": "Без категории",
"changeBoard": "Изменить Доску",
"loading": "Загрузка...",
"clearSearch": "Очистить поиск"
}
}

View File

@@ -15,7 +15,6 @@
"reset": "Starta om",
"previousImage": "Föregående bild",
"useThisParameter": "Använd denna parametern",
"showGallery": "Visa galleri",
"rotateCounterClockwise": "Rotera moturs",
"rotateClockwise": "Rotera medurs",
"modifyConfig": "Ändra konfiguration",
@@ -27,10 +26,6 @@
"githubLabel": "Github",
"discordLabel": "Discord",
"settingsLabel": "Inställningar",
"darkTheme": "Mörk",
"lightTheme": "Ljus",
"greenTheme": "Grön",
"oceanTheme": "Hav",
"langEnglish": "Engelska",
"langDutch": "Nederländska",
"langFrench": "Franska",
@@ -63,12 +58,10 @@
"statusGenerationComplete": "Generering klar",
"statusModelConverted": "Modell konverterad",
"statusMergingModels": "Sammanfogar modeller",
"pinOptionsPanel": "Nåla fast inställningspanelen",
"loading": "Laddar",
"loadingInvokeAI": "Laddar Invoke AI",
"statusRestoringFaces": "Återskapar ansikten",
"languagePickerLabel": "Språkväljare",
"themeLabel": "Tema",
"txt2img": "Text till bild",
"nodes": "Noder",
"img2img": "Bild till bild",
@@ -108,7 +101,6 @@
"galleryImageResetSize": "Återställ storlek",
"gallerySettings": "Galleriinställningar",
"maintainAspectRatio": "Behåll bildförhållande",
"pinGallery": "Nåla fast galleri",
"noImagesInGallery": "Inga bilder i galleriet",
"autoSwitchNewImages": "Ändra automatiskt till nya bilder",
"singleColumnLayout": "Enkolumnslayout"

View File

@@ -19,21 +19,15 @@
"reset": "Sıfırla",
"uploadImage": "Resim Yükle",
"previousImage": "Önceki Resim",
"menu": "Menü",
"showGallery": "Galeriyi Göster"
"menu": "Menü"
},
"common": {
"hotkeysLabel": "Kısayol Tuşları",
"themeLabel": "Tema",
"languagePickerLabel": "Dil Seçimi",
"reportBugLabel": "Hata Bildir",
"githubLabel": "Github",
"discordLabel": "Discord",
"settingsLabel": "Ayarlar",
"darkTheme": "Karanlık Tema",
"lightTheme": "Aydınlık Tema",
"greenTheme": "Yeşil Tema",
"oceanTheme": "Okyanus Tema",
"langArabic": "Arapça",
"langEnglish": "İngilizce",
"langDutch": "Hollandaca",

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": арячi клавіші",
"themeLabel": "Тема",
"languagePickerLabel": "Мова",
"reportBugLabel": "Повідомити про помилку",
"settingsLabel": "Налаштування",
"darkTheme": "Темна",
"lightTheme": "Світла",
"greenTheme": "Зелена",
"img2img": "Зображення із зображення (img2img)",
"unifiedCanvas": "Універсальне полотно",
"nodes": "Вузли",
@@ -55,8 +51,6 @@
"langHebrew": "Іврит",
"langKorean": "Корейська",
"langPortuguese": "Португальська",
"pinOptionsPanel": "Закріпити панель налаштувань",
"oceanTheme": "Океан",
"langArabic": "Арабська",
"langSimplifiedChinese": "Китайська (спрощена)",
"langSpanish": "Іспанська",
@@ -87,7 +81,6 @@
"maintainAspectRatio": "Зберігати пропорції",
"autoSwitchNewImages": "Автоматично вибирати нові",
"singleColumnLayout": "Одна колонка",
"pinGallery": "Закріпити галерею",
"allImagesLoaded": "Всі зображення завантажені",
"loadMore": "Завантажити більше",
"noImagesInGallery": "Зображень немає"
@@ -417,7 +410,6 @@
"cfgScale": "Рівень CFG",
"width": "Ширина",
"height": "Висота",
"sampler": "Семплер",
"seed": "Сід",
"randomizeSeed": "Випадковий сид",
"shuffle": "Оновити",
@@ -439,10 +431,6 @@
"hiresOptim": "Оптимізація High Res",
"imageFit": "Вмістити зображення",
"codeformerFidelity": "Точність",
"seamSize": "Размір шву",
"seamBlur": "Розмиття шву",
"seamStrength": "Сила шву",
"seamSteps": "Кроки шву",
"scaleBeforeProcessing": "Масштабувати",
"scaledWidth": "Масштаб Ш",
"scaledHeight": "Масштаб В",
@@ -453,8 +441,6 @@
"infillScalingHeader": "Заповнення і масштабування",
"img2imgStrength": "Сила обробки img2img",
"toggleLoopback": "Зациклити обробку",
"invoke": "Викликати",
"promptPlaceholder": "Введіть запит тут (англійською). [видалені токени], (більш вагомі)++, (менш вагомі)--, swap и blend також доступні (дивіться Github)",
"sendTo": "Надіслати",
"sendToImg2Img": "Надіслати у img2img",
"sendToUnifiedCanvas": "Надіслати на полотно",
@@ -467,7 +453,6 @@
"useAll": "Використати все",
"useInitImg": "Використати як початкове",
"info": "Метадані",
"deleteImage": "Видалити зображення",
"initialImage": "Початкове зображення",
"showOptionsPanel": "Показати панель налаштувань",
"general": "Основне",
@@ -485,8 +470,7 @@
"denoisingStrength": "Сила шумоподавлення",
"copyImage": "Копіювати зображення",
"symmetry": "Симетрія",
"hSymmetryStep": "Крок гор. симетрії",
"negativePrompts": "Виключний запит"
"hSymmetryStep": "Крок гор. симетрії"
},
"settings": {
"models": "Моделі",
@@ -494,7 +478,6 @@
"saveSteps": "Зберігати кожні n кроків",
"confirmOnDelete": "Підтверджувати видалення",
"displayHelpIcons": "Показувати значки підказок",
"useCanvasBeta": "Показувати інструменты зліва (Beta UI)",
"enableImageDebugging": "Увімкнути налагодження",
"resetWebUI": "Повернути початкові",
"resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.",
@@ -505,7 +488,6 @@
"toast": {
"tempFoldersEmptied": "Тимчасова папка очищена",
"uploadFailed": "Не вдалося завантажити",
"uploadFailedMultipleImagesDesc": "Можна вставити лише одне зображення (ви спробували вставити декілька)",
"uploadFailedUnableToLoadDesc": "Неможливо завантажити файл",
"downloadImageStarted": "Завантаження зображення почалося",
"imageCopied": "Зображення скопійоване",
@@ -626,7 +608,6 @@
"rotateClockwise": "Обертати за годинниковою стрілкою",
"toggleAutoscroll": "Увімкнути автопрокручування",
"toggleLogViewer": "Показати або приховати переглядач журналів",
"showGallery": "Показати галерею",
"previousImage": "Попереднє зображення",
"copyMetadataJson": "Скопіювати метадані JSON",
"flipVertically": "Перевернути по вертикалі",

File diff suppressed because it is too large Load Diff

View File

@@ -13,9 +13,6 @@
"settingsLabel": "設定",
"upload": "上傳",
"langArabic": "阿拉伯語",
"greenTheme": "綠色",
"lightTheme": "淺色",
"darkTheme": "深色",
"discordLabel": "Discord",
"nodesDesc": "使用Node生成圖像的系統正在開發中。敬請期待有關於這項功能的更新。",
"reportBugLabel": "回報錯誤",
@@ -33,6 +30,24 @@
"langBrPortuguese": "巴西葡萄牙語",
"langRussian": "俄語",
"langSpanish": "西班牙語",
"unifiedCanvas": "統一畫布"
"unifiedCanvas": "統一畫布",
"cancel": "取消",
"langHebrew": "希伯來語",
"txt2img": "文字轉圖片"
},
"accessibility": {
"modelSelect": "選擇模型",
"invokeProgressBar": "Invoke 進度條",
"uploadImage": "上傳圖片",
"reset": "重設",
"nextImage": "下一張圖片",
"previousImage": "上一張圖片",
"flipHorizontally": "水平翻轉",
"useThisParameter": "使用此參數",
"zoomIn": "放大",
"zoomOut": "縮小",
"flipVertically": "垂直翻轉",
"modifyConfig": "修改配置",
"menu": "選單"
}
}

View File

@@ -54,42 +54,42 @@
]
},
"dependencies": {
"@chakra-ui/anatomy": "^2.2.0",
"@chakra-ui/icons": "^2.1.0",
"@chakra-ui/react": "^2.8.0",
"@chakra-ui/anatomy": "^2.2.1",
"@chakra-ui/icons": "^2.1.1",
"@chakra-ui/react": "^2.8.1",
"@chakra-ui/styled-system": "^2.9.1",
"@chakra-ui/theme-tools": "^2.1.0",
"@chakra-ui/theme-tools": "^2.1.1",
"@dagrejs/graphlib": "^2.1.13",
"@dnd-kit/core": "^6.0.8",
"@dnd-kit/modifiers": "^6.0.1",
"@dnd-kit/utilities": "^3.2.1",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@floating-ui/react-dom": "^2.0.1",
"@fontsource-variable/inter": "^5.0.8",
"@fontsource/inter": "^5.0.8",
"@floating-ui/react-dom": "^2.0.2",
"@fontsource-variable/inter": "^5.0.13",
"@fontsource/inter": "^5.0.13",
"@mantine/core": "^6.0.19",
"@mantine/form": "^6.0.19",
"@mantine/hooks": "^6.0.19",
"@nanostores/react": "^0.7.1",
"@reduxjs/toolkit": "^1.9.5",
"@roarr/browser-log-writer": "^1.1.5",
"@reduxjs/toolkit": "^1.9.7",
"@roarr/browser-log-writer": "^1.3.0",
"@stevebel/png": "^1.5.1",
"compare-versions": "^6.1.0",
"dateformat": "^5.0.3",
"formik": "^2.4.3",
"framer-motion": "^10.16.1",
"formik": "^2.4.5",
"framer-motion": "^10.16.4",
"fuse.js": "^6.6.2",
"i18next": "^23.4.4",
"i18next": "^23.5.1",
"i18next-browser-languagedetector": "^7.0.2",
"i18next-http-backend": "^2.2.1",
"konva": "^9.2.0",
"i18next-http-backend": "^2.2.2",
"konva": "^9.2.2",
"lodash-es": "^4.17.21",
"nanostores": "^0.9.2",
"new-github-issue-url": "^1.0.0",
"openapi-fetch": "^0.7.4",
"overlayscrollbars": "^2.2.0",
"overlayscrollbars-react": "^0.5.0",
"openapi-fetch": "^0.7.10",
"overlayscrollbars": "^2.3.2",
"overlayscrollbars-react": "^0.5.2",
"patch-package": "^8.0.0",
"query-string": "^8.1.0",
"react": "^18.2.0",
@@ -98,25 +98,25 @@
"react-dropzone": "^14.2.3",
"react-error-boundary": "^4.0.11",
"react-hotkeys-hook": "4.4.1",
"react-i18next": "^13.1.2",
"react-icons": "^4.10.1",
"react-i18next": "^13.3.0",
"react-icons": "^4.11.0",
"react-konva": "^18.2.10",
"react-redux": "^8.1.2",
"react-redux": "^8.1.3",
"react-resizable-panels": "^0.0.55",
"react-use": "^17.4.0",
"react-virtuoso": "^4.5.0",
"react-zoom-pan-pinch": "^3.0.8",
"reactflow": "^11.8.3",
"react-virtuoso": "^4.6.1",
"react-zoom-pan-pinch": "^3.2.0",
"reactflow": "^11.9.3",
"redux-dynamic-middlewares": "^2.2.0",
"redux-remember": "^4.0.1",
"redux-remember": "^4.0.4",
"roarr": "^7.15.1",
"serialize-error": "^11.0.1",
"serialize-error": "^11.0.2",
"socket.io-client": "^4.7.2",
"type-fest": "^4.2.0",
"type-fest": "^4.4.0",
"use-debounce": "^9.0.4",
"use-image": "^1.1.1",
"uuid": "^9.0.0",
"zod": "^3.22.2",
"uuid": "^9.0.1",
"zod": "^3.22.4",
"zod-validation-error": "^1.5.0"
},
"peerDependencies": {
@@ -129,40 +129,40 @@
"devDependencies": {
"@chakra-ui/cli": "^2.4.1",
"@types/dateformat": "^5.0.0",
"@types/lodash-es": "^4.14.194",
"@types/node": "^20.5.1",
"@types/react": "^18.2.20",
"@types/react-dom": "^18.2.6",
"@types/react-redux": "^7.1.25",
"@types/react-transition-group": "^4.4.6",
"@types/uuid": "^9.0.2",
"@typescript-eslint/eslint-plugin": "^6.4.1",
"@typescript-eslint/parser": "^6.4.1",
"@vitejs/plugin-react-swc": "^3.3.2",
"axios": "^1.4.0",
"@types/lodash-es": "^4.17.9",
"@types/node": "^20.8.6",
"@types/react": "^18.2.28",
"@types/react-dom": "^18.2.13",
"@types/react-redux": "^7.1.27",
"@types/react-transition-group": "^4.4.7",
"@types/uuid": "^9.0.5",
"@typescript-eslint/eslint-plugin": "^6.7.5",
"@typescript-eslint/parser": "^6.7.5",
"@vitejs/plugin-react-swc": "^3.4.0",
"axios": "^1.5.1",
"babel-plugin-transform-imports": "^2.0.0",
"concurrently": "^8.2.0",
"eslint": "^8.47.0",
"concurrently": "^8.2.1",
"eslint": "^8.51.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-prettier": "^5.0.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"form-data": "^4.0.0",
"husky": "^8.0.3",
"lint-staged": "^14.0.1",
"lint-staged": "^15.0.1",
"madge": "^6.1.0",
"openapi-types": "^12.1.3",
"openapi-typescript": "^6.5.2",
"openapi-typescript": "^6.7.0",
"postinstall-postinstall": "^2.1.0",
"prettier": "^3.0.2",
"prettier": "^3.0.3",
"rollup-plugin-visualizer": "^5.9.2",
"ts-toolbelt": "^9.6.0",
"typescript": "^5.2.2",
"vite": "^4.4.9",
"vite": "^4.4.11",
"vite-plugin-css-injected-by-js": "^3.3.0",
"vite-plugin-dts": "^3.5.2",
"vite-plugin-dts": "^3.6.0",
"vite-plugin-eslint": "^1.8.1",
"vite-tsconfig-paths": "^4.2.0",
"vite-tsconfig-paths": "^4.2.1",
"yarn": "^1.22.19"
}
}

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "مفاتيح الأختصار",
"themeLabel": "الموضوع",
"languagePickerLabel": "منتقي اللغة",
"reportBugLabel": "بلغ عن خطأ",
"settingsLabel": "إعدادات",
"darkTheme": "داكن",
"lightTheme": "فاتح",
"greenTheme": "أخضر",
"img2img": "صورة إلى صورة",
"unifiedCanvas": "لوحة موحدة",
"nodes": "عقد",
@@ -57,7 +53,6 @@
"maintainAspectRatio": "الحفاظ على نسبة الأبعاد",
"autoSwitchNewImages": "التبديل التلقائي إلى الصور الجديدة",
"singleColumnLayout": "تخطيط عمود واحد",
"pinGallery": "تثبيت المعرض",
"allImagesLoaded": "تم تحميل جميع الصور",
"loadMore": "تحميل المزيد",
"noImagesInGallery": "لا توجد صور في المعرض"
@@ -342,7 +337,6 @@
"cfgScale": "مقياس الإعداد الذاتي للجملة",
"width": "عرض",
"height": "ارتفاع",
"sampler": "مزج",
"seed": "بذرة",
"randomizeSeed": "تبديل بذرة",
"shuffle": "تشغيل",
@@ -364,10 +358,6 @@
"hiresOptim": "تحسين الدقة العالية",
"imageFit": "ملائمة الصورة الأولية لحجم الخرج",
"codeformerFidelity": "الوثوقية",
"seamSize": "حجم التشقق",
"seamBlur": "ضباب التشقق",
"seamStrength": "قوة التشقق",
"seamSteps": "خطوات التشقق",
"scaleBeforeProcessing": "تحجيم قبل المعالجة",
"scaledWidth": "العرض المحجوب",
"scaledHeight": "الارتفاع المحجوب",
@@ -378,8 +368,6 @@
"infillScalingHeader": "التعبئة والتحجيم",
"img2imgStrength": "قوة صورة إلى صورة",
"toggleLoopback": "تبديل الإعادة",
"invoke": "إطلاق",
"promptPlaceholder": "اكتب المحث هنا. [العلامات السلبية], (زيادة الوزن) ++, (نقص الوزن)--, التبديل و الخلط متاحة (انظر الوثائق)",
"sendTo": "أرسل إلى",
"sendToImg2Img": "أرسل إلى صورة إلى صورة",
"sendToUnifiedCanvas": "أرسل إلى الخطوط الموحدة",
@@ -393,7 +381,6 @@
"useAll": "استخدام الكل",
"useInitImg": "استخدام الصورة الأولية",
"info": "معلومات",
"deleteImage": "حذف الصورة",
"initialImage": "الصورة الأولية",
"showOptionsPanel": "إظهار لوحة الخيارات"
},
@@ -403,7 +390,6 @@
"saveSteps": "حفظ الصور كل n خطوات",
"confirmOnDelete": "تأكيد عند الحذف",
"displayHelpIcons": "عرض أيقونات المساعدة",
"useCanvasBeta": "استخدام مخطط الأزرار بيتا",
"enableImageDebugging": "تمكين التصحيح عند التصوير",
"resetWebUI": "إعادة تعيين واجهة الويب",
"resetWebUIDesc1": "إعادة تعيين واجهة الويب يعيد فقط ذاكرة التخزين المؤقت للمتصفح لصورك وإعداداتك المذكورة. لا يحذف أي صور من القرص.",
@@ -413,7 +399,6 @@
"toast": {
"tempFoldersEmptied": "تم تفريغ مجلد المؤقت",
"uploadFailed": "فشل التحميل",
"uploadFailedMultipleImagesDesc": "تم الصق صور متعددة، قد يتم تحميل صورة واحدة فقط في الوقت الحالي",
"uploadFailedUnableToLoadDesc": "تعذر تحميل الملف",
"downloadImageStarted": "بدأ تنزيل الصورة",
"imageCopied": "تم نسخ الصورة",

View File

@@ -1,12 +1,8 @@
{
"common": {
"themeLabel": "Thema",
"languagePickerLabel": "Sprachauswahl",
"reportBugLabel": "Fehler melden",
"settingsLabel": "Einstellungen",
"darkTheme": "Dunkel",
"lightTheme": "Hell",
"greenTheme": "Grün",
"img2img": "Bild zu Bild",
"nodes": "Knoten",
"langGerman": "Deutsch",
@@ -48,7 +44,6 @@
"langEnglish": "Englisch",
"langDutch": "Niederländisch",
"langFrench": "Französisch",
"oceanTheme": "Ozean",
"langItalian": "Italienisch",
"langPortuguese": "Portogisisch",
"langRussian": "Russisch",
@@ -76,7 +71,6 @@
"maintainAspectRatio": "Seitenverhältnis beibehalten",
"autoSwitchNewImages": "Automatisch zu neuen Bildern wechseln",
"singleColumnLayout": "Einspaltiges Layout",
"pinGallery": "Galerie anpinnen",
"allImagesLoaded": "Alle Bilder geladen",
"loadMore": "Mehr laden",
"noImagesInGallery": "Keine Bilder in der Galerie"
@@ -346,7 +340,6 @@
"cfgScale": "CFG-Skala",
"width": "Breite",
"height": "Höhe",
"sampler": "Sampler",
"randomizeSeed": "Zufälliger Seed",
"shuffle": "Mischen",
"noiseThreshold": "Rausch-Schwellenwert",
@@ -367,10 +360,6 @@
"hiresOptim": "High-Res-Optimierung",
"imageFit": "Ausgangsbild an Ausgabegröße anpassen",
"codeformerFidelity": "Glaubwürdigkeit",
"seamSize": "Nahtgröße",
"seamBlur": "Nahtunschärfe",
"seamStrength": "Stärke der Naht",
"seamSteps": "Nahtstufen",
"scaleBeforeProcessing": "Skalieren vor der Verarbeitung",
"scaledWidth": "Skaliert W",
"scaledHeight": "Skaliert H",
@@ -381,8 +370,6 @@
"infillScalingHeader": "Infill und Skalierung",
"img2imgStrength": "Bild-zu-Bild-Stärke",
"toggleLoopback": "Toggle Loopback",
"invoke": "Invoke",
"promptPlaceholder": "Prompt hier eingeben. [negative Token], (mehr Gewicht)++, (geringeres Gewicht)--, Tausch und Überblendung sind verfügbar (siehe Dokumente)",
"sendTo": "Senden an",
"sendToImg2Img": "Senden an Bild zu Bild",
"sendToUnifiedCanvas": "Senden an Unified Canvas",
@@ -394,7 +381,6 @@
"useSeed": "Seed verwenden",
"useAll": "Alle verwenden",
"useInitImg": "Ausgangsbild verwenden",
"deleteImage": "Bild löschen",
"initialImage": "Ursprüngliches Bild",
"showOptionsPanel": "Optionsleiste zeigen",
"cancel": {
@@ -406,7 +392,6 @@
"saveSteps": "Speichern der Bilder alle n Schritte",
"confirmOnDelete": "Bestätigen beim Löschen",
"displayHelpIcons": "Hilfesymbole anzeigen",
"useCanvasBeta": "Canvas Beta Layout verwenden",
"enableImageDebugging": "Bild-Debugging aktivieren",
"resetWebUI": "Web-Oberfläche zurücksetzen",
"resetWebUIDesc1": "Das Zurücksetzen der Web-Oberfläche setzt nur den lokalen Cache des Browsers mit Ihren Bildern und gespeicherten Einstellungen zurück. Es werden keine Bilder von der Festplatte gelöscht.",
@@ -416,7 +401,6 @@
"toast": {
"tempFoldersEmptied": "Temp-Ordner geleert",
"uploadFailed": "Hochladen fehlgeschlagen",
"uploadFailedMultipleImagesDesc": "Mehrere Bilder eingefügt, es kann nur ein Bild auf einmal hochgeladen werden",
"uploadFailedUnableToLoadDesc": "Datei kann nicht geladen werden",
"downloadImageStarted": "Bild wird heruntergeladen",
"imageCopied": "Bild kopiert",
@@ -532,7 +516,6 @@
"modifyConfig": "Optionen einstellen",
"toggleAutoscroll": "Auroscroll ein/ausschalten",
"toggleLogViewer": "Log Betrachter ein/ausschalten",
"showGallery": "Zeige Galerie",
"showOptionsPanel": "Zeige Optionen",
"reset": "Zurücksetzen",
"nextImage": "Nächstes Bild",

View File

@@ -38,16 +38,19 @@
"searchBoard": "Search Boards...",
"selectBoard": "Select a Board",
"topMessage": "This board contains images used in the following features:",
"uncategorized": "Uncategorized"
"uncategorized": "Uncategorized",
"downloadBoard": "Download Board"
},
"common": {
"accept": "Accept",
"advanced": "Advanced",
"areYouSure": "Are you sure?",
"auto": "Auto",
"back": "Back",
"batch": "Batch Manager",
"cancel": "Cancel",
"close": "Close",
"on": "On",
"communityLabel": "Community",
"controlNet": "ControlNet",
"controlAdapter": "Control Adapter",
@@ -132,10 +135,11 @@
"upload": "Upload"
},
"controlnet": {
"controlAdapter": "Control Adapter",
"controlnet": "$t(controlnet.controlAdapter) #{{number}} ($t(common.controlNet))",
"ip_adapter": "$t(controlnet.controlAdapter) #{{number}} ($t(common.ipAdapter))",
"t2i_adapter": "$t(controlnet.controlAdapter) #{{number}} ($t(common.t2iAdapter))",
"controlAdapter_one": "Control Adapter",
"controlAdapter_other": "Control Adapters",
"controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))",
"ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))",
"t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))",
"addControlNet": "Add $t(common.controlNet)",
"addIPAdapter": "Add $t(common.ipAdapter)",
"addT2IAdapter": "Add $t(common.t2iAdapter)",
@@ -274,7 +278,8 @@
"batchValues": "Batch Values",
"notReady": "Unable to Queue",
"batchQueued": "Batch Queued",
"batchQueuedDesc": "Added {{item_count}} sessions to {{direction}} of queue",
"batchQueuedDesc_one": "Added {{count}} sessions to {{direction}} of queue",
"batchQueuedDesc_other": "Added {{count}} sessions to {{direction}} of queue",
"front": "front",
"back": "back",
"batchFailedToQueue": "Failed to Queue Batch",
@@ -323,7 +328,10 @@
"showUploads": "Show Uploads",
"singleColumnLayout": "Single Column Layout",
"unableToLoad": "Unable to load Gallery",
"uploads": "Uploads"
"uploads": "Uploads",
"downloadSelection": "Download Selection",
"preparingDownload": "Preparing Download",
"preparingDownloadFailed": "Problem Preparing Download"
},
"hotkeys": {
"acceptStagingImage": {
@@ -551,8 +559,10 @@
"negativePrompt": "Negative Prompt",
"noImageDetails": "No image details found",
"noMetaData": "No metadata found",
"noRecallParameters": "No parameters to recall found",
"perlin": "Perlin Noise",
"positivePrompt": "Positive Prompt",
"recallParameters": "Recall Parameters",
"scheduler": "Scheduler",
"seamless": "Seamless",
"seed": "Seed",
@@ -697,6 +707,7 @@
"vae": "VAE",
"vaeLocation": "VAE Location",
"vaeLocationValidationMsg": "Path to where your VAE is located.",
"vaePrecision": "VAE Precision",
"vaeRepoID": "VAE Repo ID",
"vaeRepoIDValidationMsg": "Online repository of your VAE",
"variant": "Variant",
@@ -917,6 +928,7 @@
},
"parameters": {
"aspectRatio": "Aspect Ratio",
"aspectRatioFree": "Free",
"boundingBoxHeader": "Bounding Box",
"boundingBoxHeight": "Bounding Box Height",
"boundingBoxWidth": "Bounding Box Width",
@@ -964,10 +976,10 @@
"missingFieldTemplate": "Missing field template",
"missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} missing input",
"missingNodeTemplate": "Missing node template",
"noControlImageForControlAdapter": "Control Adapter {{number}} has no control image",
"noControlImageForControlAdapter": "Control Adapter #{{number}} has no control image",
"noInitialImageSelected": "No initial image selected",
"noModelForControlAdapter": "Control Adapter {{number}} has no model selected.",
"incompatibleBaseModelForControlAdapter": "Control Adapter {{number}} model is invalid with main model.",
"noModelForControlAdapter": "Control Adapter #{{number}} has no model selected.",
"incompatibleBaseModelForControlAdapter": "Control Adapter #{{number}} model is invalid with main model.",
"noModelSelected": "No model selected",
"noPrompts": "No prompts generated",
"noNodesInGraph": "No nodes in graph",
@@ -1102,12 +1114,23 @@
"showAdvancedOptions": "Show Advanced Options",
"showProgressInViewer": "Show Progress Images in Viewer",
"ui": "User Interface",
"useSlidersForAll": "Use Sliders For All Options"
"useSlidersForAll": "Use Sliders For All Options",
"clearIntermediatesDisabled": "Queue must be empty to clear intermediates",
"clearIntermediatesDesc1": "Clearing intermediates will reset your Canvas and ControlNet state.",
"clearIntermediatesDesc2": "Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space.",
"clearIntermediatesDesc3": "Your gallery images will not be deleted.",
"clearIntermediates": "Clear Intermediates",
"clearIntermediatesWithCount_one": "Clear {{count}} Intermediate",
"clearIntermediatesWithCount_other": "Clear {{count}} Intermediates",
"clearIntermediatesWithCount_zero": "No Intermediates to Clear",
"intermediatesCleared_one": "Cleared {{count}} Intermediate",
"intermediatesCleared_other": "Cleared {{count}} Intermediates",
"intermediatesClearedFailed": "Problem Clearing Intermediates"
},
"toast": {
"addedToBoard": "Added to board",
"baseModelChangedCleared_one": "Base model changed, cleared or disabled {{number}} incompatible submodel",
"baseModelChangedCleared_many": "$t(toast.baseModelChangedCleared_one)s",
"baseModelChangedCleared_one": "Base model changed, cleared or disabled {{count}} incompatible submodel",
"baseModelChangedCleared_other": "Base model changed, cleared or disabled {{count}} incompatible submodels",
"canceled": "Processing Canceled",
"canvasCopiedClipboard": "Canvas Copied to Clipboard",
"canvasDownloaded": "Canvas Downloaded",

View File

@@ -1,16 +1,12 @@
{
"common": {
"hotkeysLabel": "Atajos de teclado",
"themeLabel": "Tema",
"languagePickerLabel": "Selector de idioma",
"reportBugLabel": "Reportar errores",
"settingsLabel": "Ajustes",
"darkTheme": "Oscuro",
"lightTheme": "Claro",
"greenTheme": "Verde",
"img2img": "Imagen a Imagen",
"unifiedCanvas": "Lienzo Unificado",
"nodes": "Nodos",
"nodes": "Editor del flujo de trabajo",
"langSpanish": "Español",
"nodesDesc": "Un sistema de generación de imágenes basado en nodos, actualmente se encuentra en desarrollo. Mantente pendiente a nuestras actualizaciones acerca de esta fabulosa funcionalidad.",
"postProcessing": "Post-procesamiento",
@@ -19,7 +15,7 @@
"postProcessDesc3": "La Interfaz de Línea de Comandos de Invoke AI ofrece muchas otras características, incluyendo -Embiggen-.",
"training": "Entrenamiento",
"trainingDesc1": "Un flujo de trabajo dedicado para el entrenamiento de sus propios -embeddings- y puntos de control utilizando Inversión Textual y Dreambooth desde la interfaz web.",
"trainingDesc2": "InvokeAI ya soporta el entrenamiento de -embeddings- personalizados utilizando la Inversión Textual mediante el script principal.",
"trainingDesc2": "InvokeAI ya admite el entrenamiento de incrustaciones personalizadas mediante la inversión textual mediante el script principal.",
"upload": "Subir imagen",
"close": "Cerrar",
"load": "Cargar",
@@ -63,18 +59,27 @@
"statusConvertingModel": "Convertir el modelo",
"statusModelConverted": "Modelo adaptado",
"statusMergingModels": "Fusionar modelos",
"oceanTheme": "Océano",
"langPortuguese": "Portugués",
"langKorean": "Coreano",
"langHebrew": "Hebreo",
"pinOptionsPanel": "Pin del panel de opciones",
"loading": "Cargando",
"loadingInvokeAI": "Cargando invocar a la IA",
"postprocessing": "Tratamiento posterior",
"txt2img": "De texto a imagen",
"accept": "Aceptar",
"cancel": "Cancelar",
"linear": "Lineal"
"linear": "Lineal",
"random": "Aleatorio",
"generate": "Generar",
"openInNewTab": "Abrir en una nueva pestaña",
"dontAskMeAgain": "No me preguntes de nuevo",
"areYouSure": "¿Estas seguro?",
"imagePrompt": "Indicación de imagen",
"batch": "Administrador de lotes",
"darkMode": "Modo oscuro",
"lightMode": "Modo claro",
"modelManager": "Administrador de modelos",
"communityLabel": "Comunidad"
},
"gallery": {
"generations": "Generaciones",
@@ -87,10 +92,15 @@
"maintainAspectRatio": "Mantener relación de aspecto",
"autoSwitchNewImages": "Auto seleccionar Imágenes nuevas",
"singleColumnLayout": "Diseño de una columna",
"pinGallery": "Fijar galería",
"allImagesLoaded": "Todas las imágenes cargadas",
"loadMore": "Cargar más",
"noImagesInGallery": "Sin imágenes en la galería"
"noImagesInGallery": "No hay imágenes para mostrar",
"deleteImage": "Eliminar Imagen",
"deleteImageBin": "Las imágenes eliminadas se enviarán a la papelera de tu sistema operativo.",
"deleteImagePermanent": "Las imágenes eliminadas no se pueden restaurar.",
"images": "Imágenes",
"assets": "Activos",
"autoAssignBoardOnClick": "Asignación automática de tableros al hacer clic"
},
"hotkeys": {
"keyboardShortcuts": "Atajos de teclado",
@@ -297,7 +307,12 @@
"acceptStagingImage": {
"title": "Aceptar imagen",
"desc": "Aceptar la imagen actual en el área de preparación"
}
},
"addNodes": {
"title": "Añadir Nodos",
"desc": "Abre el menú para añadir nodos"
},
"nodesHotkeys": "Teclas de acceso rápido a los nodos"
},
"modelManager": {
"modelManager": "Gestor de Modelos",
@@ -349,8 +364,8 @@
"delete": "Eliminar",
"deleteModel": "Eliminar Modelo",
"deleteConfig": "Eliminar Configuración",
"deleteMsg1": "¿Estás seguro de querer eliminar esta entrada de modelo de InvokeAI?",
"deleteMsg2": "El checkpoint del modelo no se eliminará de tu disco. Puedes volver a añadirlo si lo deseas.",
"deleteMsg1": "¿Estás seguro de que deseas eliminar este modelo de InvokeAI?",
"deleteMsg2": "Esto eliminará el modelo del disco si está en la carpeta raíz de InvokeAI. Si está utilizando una ubicación personalizada, el modelo NO se eliminará del disco.",
"safetensorModels": "SafeTensors",
"addDiffuserModel": "Añadir difusores",
"inpainting": "v1 Repintado",
@@ -369,8 +384,8 @@
"convertToDiffusers": "Convertir en difusores",
"convertToDiffusersHelpText1": "Este modelo se convertirá al formato 🧨 Difusores.",
"convertToDiffusersHelpText2": "Este proceso sustituirá su entrada del Gestor de Modelos por la versión de Difusores del mismo modelo.",
"convertToDiffusersHelpText3": "Su archivo de puntos de control en el disco NO será borrado ni modificado de ninguna manera. Puede volver a añadir su punto de control al Gestor de Modelos si lo desea.",
"convertToDiffusersHelpText5": "Asegúrese de que dispone de suficiente espacio en disco. Los modelos suelen variar entre 4 GB y 7 GB de tamaño.",
"convertToDiffusersHelpText3": "Tu archivo del punto de control en el disco se eliminará si está en la carpeta raíz de InvokeAI. Si está en una ubicación personalizada, NO se eliminará.",
"convertToDiffusersHelpText5": "Por favor, asegúrate de tener suficiente espacio en el disco. Los modelos generalmente varían entre 2 GB y 7 GB de tamaño.",
"convertToDiffusersHelpText6": "¿Desea transformar este modelo?",
"convertToDiffusersSaveLocation": "Guardar ubicación",
"v1": "v1",
@@ -409,7 +424,27 @@
"pickModelType": "Elige el tipo de modelo",
"v2_768": "v2 (768px)",
"addDifference": "Añadir una diferencia",
"scanForModels": "Buscar modelos"
"scanForModels": "Buscar modelos",
"vae": "VAE",
"variant": "Variante",
"baseModel": "Modelo básico",
"modelConversionFailed": "Conversión al modelo fallida",
"selectModel": "Seleccionar un modelo",
"modelUpdateFailed": "Error al actualizar el modelo",
"modelsMergeFailed": "Fusión del modelo fallida",
"convertingModelBegin": "Convirtiendo el modelo. Por favor, espere.",
"modelDeleted": "Modelo eliminado",
"modelDeleteFailed": "Error al borrar el modelo",
"noCustomLocationProvided": "No se proporcionó una ubicación personalizada",
"importModels": "Importar los modelos",
"settings": "Ajustes",
"syncModels": "Sincronizar las plantillas",
"syncModelsDesc": "Si tus plantillas no están sincronizados con el backend, puedes actualizarlas usando esta opción. Esto suele ser útil en los casos en los que actualizas manualmente tu archivo models.yaml o añades plantillas a la carpeta raíz de InvokeAI después de que la aplicación haya arrancado.",
"modelsSynced": "Plantillas sincronizadas",
"modelSyncFailed": "La sincronización de la plantilla falló",
"loraModels": "LoRA",
"onnxModels": "Onnx",
"oliveModels": "Olives"
},
"parameters": {
"images": "Imágenes",
@@ -417,10 +452,9 @@
"cfgScale": "Escala CFG",
"width": "Ancho",
"height": "Alto",
"sampler": "Muestreo",
"seed": "Semilla",
"randomizeSeed": "Semilla aleatoria",
"shuffle": "Aleatorizar",
"shuffle": "Semilla aleatoria",
"noiseThreshold": "Umbral de Ruido",
"perlinNoise": "Ruido Perlin",
"variations": "Variaciones",
@@ -439,10 +473,6 @@
"hiresOptim": "Optimización de Alta Resolución",
"imageFit": "Ajuste tamaño de imagen inicial al tamaño objetivo",
"codeformerFidelity": "Fidelidad",
"seamSize": "Tamaño del parche",
"seamBlur": "Desenfoque del parche",
"seamStrength": "Fuerza del parche",
"seamSteps": "Pasos del parche",
"scaleBeforeProcessing": "Redimensionar antes de procesar",
"scaledWidth": "Ancho escalado",
"scaledHeight": "Alto escalado",
@@ -453,8 +483,6 @@
"infillScalingHeader": "Remplazo y escalado",
"img2imgStrength": "Peso de Imagen a Imagen",
"toggleLoopback": "Alternar Retroalimentación",
"invoke": "Invocar",
"promptPlaceholder": "Ingrese la entrada aquí. [símbolos negativos], (subir peso)++, (bajar peso)--, también disponible alternado y mezclado (ver documentación)",
"sendTo": "Enviar a",
"sendToImg2Img": "Enviar a Imagen a Imagen",
"sendToUnifiedCanvas": "Enviar a Lienzo Unificado",
@@ -467,7 +495,6 @@
"useAll": "Usar Todo",
"useInitImg": "Usar Imagen Inicial",
"info": "Información",
"deleteImage": "Eliminar Imagen",
"initialImage": "Imagen Inicial",
"showOptionsPanel": "Mostrar panel de opciones",
"symmetry": "Simetría",
@@ -481,37 +508,72 @@
},
"copyImage": "Copiar la imagen",
"general": "General",
"negativePrompts": "Preguntas negativas",
"imageToImage": "Imagen a imagen",
"denoisingStrength": "Intensidad de la eliminación del ruido",
"hiresStrength": "Alta resistencia",
"showPreview": "Mostrar la vista previa",
"hidePreview": "Ocultar la vista previa"
"hidePreview": "Ocultar la vista previa",
"noiseSettings": "Ruido",
"seamlessXAxis": "Eje x",
"seamlessYAxis": "Eje y",
"scheduler": "Programador",
"boundingBoxWidth": "Anchura del recuadro",
"boundingBoxHeight": "Altura del recuadro",
"positivePromptPlaceholder": "Prompt Positivo",
"negativePromptPlaceholder": "Prompt Negativo",
"controlNetControlMode": "Modo de control",
"clipSkip": "Omitir el CLIP",
"aspectRatio": "Relación",
"maskAdjustmentsHeader": "Ajustes de la máscara",
"maskBlur": "Difuminar",
"maskBlurMethod": "Método del desenfoque",
"seamHighThreshold": "Alto",
"seamLowThreshold": "Bajo",
"coherencePassHeader": "Parámetros de la coherencia",
"compositingSettingsHeader": "Ajustes de la composición",
"coherenceSteps": "Pasos",
"coherenceStrength": "Fuerza",
"patchmatchDownScaleSize": "Reducir a escala",
"coherenceMode": "Modo"
},
"settings": {
"models": "Modelos",
"displayInProgress": "Mostrar imágenes en progreso",
"displayInProgress": "Mostrar las imágenes del progreso",
"saveSteps": "Guardar imágenes cada n pasos",
"confirmOnDelete": "Confirmar antes de eliminar",
"displayHelpIcons": "Mostrar iconos de ayuda",
"useCanvasBeta": "Usar versión beta del Lienzo",
"enableImageDebugging": "Habilitar depuración de imágenes",
"resetWebUI": "Restablecer interfaz web",
"resetWebUIDesc1": "Al restablecer la interfaz web, solo se restablece la caché local del navegador de sus imágenes y la configuración guardada. No se elimina ninguna imagen de su disco duro.",
"resetWebUIDesc2": "Si las imágenes no se muestran en la galería o algo más no funciona, intente restablecer antes de reportar un incidente en GitHub.",
"resetComplete": "La interfaz web se ha restablecido. Actualice la página para recargarla.",
"useSlidersForAll": "Utilice controles deslizantes para todas las opciones"
"resetComplete": "Se ha restablecido la interfaz web.",
"useSlidersForAll": "Utilice controles deslizantes para todas las opciones",
"general": "General",
"consoleLogLevel": "Nivel del registro",
"shouldLogToConsole": "Registro de la consola",
"developer": "Desarrollador",
"antialiasProgressImages": "Imágenes del progreso de Antialias",
"showProgressInViewer": "Mostrar las imágenes del progreso en el visor",
"ui": "Interfaz del usuario",
"generation": "Generación",
"favoriteSchedulers": "Programadores favoritos",
"favoriteSchedulersPlaceholder": "No hay programadores favoritos",
"showAdvancedOptions": "Mostrar las opciones avanzadas",
"alternateCanvasLayout": "Diseño alternativo del lienzo",
"beta": "Beta",
"enableNodesEditor": "Activar el editor de nodos",
"experimental": "Experimental",
"autoChangeDimensions": "Actualiza W/H a los valores predeterminados del modelo cuando se modifica"
},
"toast": {
"tempFoldersEmptied": "Directorio temporal vaciado",
"uploadFailed": "Error al subir archivo",
"uploadFailedMultipleImagesDesc": "Únicamente se puede subir una imágen a la vez",
"uploadFailedUnableToLoadDesc": "No se pudo cargar la imágen",
"downloadImageStarted": "Descargando imágen",
"imageCopied": "Imágen copiada",
"imageLinkCopied": "Enlace de imágen copiado",
"imageNotLoaded": "No se cargó la imágen",
"imageNotLoadedDesc": "No se encontró imagen para enviar al módulo Imagen a Imagen",
"imageNotLoadedDesc": "No se pudo encontrar la imagen",
"imageSavedToGallery": "Imágen guardada en la galería",
"canvasMerged": "Lienzo consolidado",
"sentToImageToImage": "Enviar hacia Imagen a Imagen",
@@ -536,7 +598,21 @@
"serverError": "Error en el servidor",
"disconnected": "Desconectado del servidor",
"canceled": "Procesando la cancelación",
"connected": "Conectado al servidor"
"connected": "Conectado al servidor",
"problemCopyingImageLink": "No se puede copiar el enlace de la imagen",
"uploadFailedInvalidUploadDesc": "Debe ser una sola imagen PNG o JPEG",
"parameterSet": "Conjunto de parámetros",
"parameterNotSet": "Parámetro no configurado",
"nodesSaved": "Nodos guardados",
"nodesLoadedFailed": "Error al cargar los nodos",
"nodesLoaded": "Nodos cargados",
"nodesCleared": "Nodos borrados",
"problemCopyingImage": "No se puede copiar la imagen",
"nodesNotValidJSON": "JSON no válido",
"nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.",
"nodesUnrecognizedTypes": "No se puede cargar. El gráfico tiene tipos no reconocidos",
"nodesNotValidGraph": "Gráfico del nodo InvokeAI no válido",
"nodesBrokenConnections": "No se puede cargar. Algunas conexiones están rotas."
},
"tooltip": {
"feature": {
@@ -610,7 +686,8 @@
"betaClear": "Limpiar",
"betaDarkenOutside": "Oscurecer fuera",
"betaLimitToBox": "Limitar a caja",
"betaPreserveMasked": "Preservar área enmascarada"
"betaPreserveMasked": "Preservar área enmascarada",
"antialiasing": "Suavizado"
},
"accessibility": {
"invokeProgressBar": "Activar la barra de progreso",
@@ -631,8 +708,30 @@
"modifyConfig": "Modificar la configuración",
"toggleAutoscroll": "Activar el autodesplazamiento",
"toggleLogViewer": "Alternar el visor de registros",
"showGallery": "Mostrar galería",
"showOptionsPanel": "Mostrar el panel de opciones",
"showOptionsPanel": "Mostrar el panel lateral",
"menu": "Menú"
},
"ui": {
"hideProgressImages": "Ocultar el progreso de la imagen",
"showProgressImages": "Mostrar el progreso de la imagen",
"swapSizes": "Cambiar los tamaños",
"lockRatio": "Proporción del bloqueo"
},
"nodes": {
"showGraphNodes": "Mostrar la superposición de los gráficos",
"zoomInNodes": "Acercar",
"hideMinimapnodes": "Ocultar el minimapa",
"fitViewportNodes": "Ajustar la vista",
"zoomOutNodes": "Alejar",
"hideGraphNodes": "Ocultar la superposición de los gráficos",
"hideLegendNodes": "Ocultar la leyenda del tipo de campo",
"showLegendNodes": "Mostrar la leyenda del tipo de campo",
"showMinimapnodes": "Mostrar el minimapa",
"reloadNodeTemplates": "Recargar las plantillas de nodos",
"loadWorkflow": "Cargar el flujo de trabajo",
"resetWorkflow": "Reiniciar e flujo de trabajo",
"resetWorkflowDesc": "¿Está seguro de que deseas restablecer este flujo de trabajo?",
"resetWorkflowDesc2": "Al reiniciar el flujo de trabajo se borrarán todos los nodos, aristas y detalles del flujo de trabajo.",
"downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON"
}
}

View File

@@ -15,7 +15,6 @@
"rotateCounterClockwise": "Kierrä vastapäivään",
"rotateClockwise": "Kierrä myötäpäivään",
"flipVertically": "Käännä pystysuoraan",
"showGallery": "Näytä galleria",
"modifyConfig": "Muokkaa konfiguraatiota",
"toggleAutoscroll": "Kytke automaattinen vieritys",
"toggleLogViewer": "Kytke lokin katselutila",
@@ -34,18 +33,13 @@
"hotkeysLabel": "Pikanäppäimet",
"reportBugLabel": "Raportoi Bugista",
"langPolish": "Puola",
"themeLabel": "Teema",
"langDutch": "Hollanti",
"settingsLabel": "Asetukset",
"githubLabel": "Github",
"darkTheme": "Tumma",
"lightTheme": "Vaalea",
"greenTheme": "Vihreä",
"langGerman": "Saksa",
"langPortuguese": "Portugali",
"discordLabel": "Discord",
"langEnglish": "Englanti",
"oceanTheme": "Meren sininen",
"langRussian": "Venäjä",
"langUkranian": "Ukraina",
"langSpanish": "Espanja",
@@ -79,7 +73,6 @@
"statusGeneratingInpainting": "Generoidaan sisällemaalausta",
"statusGeneratingOutpainting": "Generoidaan ulosmaalausta",
"statusRestoringFaces": "Korjataan kasvoja",
"pinOptionsPanel": "Kiinnitä asetukset -paneeli",
"loadingInvokeAI": "Ladataan Invoke AI:ta",
"loading": "Ladataan",
"statusGenerating": "Generoidaan",
@@ -95,7 +88,6 @@
"galleryImageResetSize": "Resetoi koko",
"maintainAspectRatio": "Säilytä kuvasuhde",
"galleryImageSize": "Kuvan koko",
"pinGallery": "Kiinnitä galleria",
"showGenerations": "Näytä generaatiot",
"singleColumnLayout": "Yhden sarakkeen asettelu",
"generations": "Generoinnit",

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "Raccourcis clavier",
"themeLabel": "Thème",
"languagePickerLabel": "Sélecteur de langue",
"reportBugLabel": "Signaler un bug",
"settingsLabel": "Paramètres",
"darkTheme": "Sombre",
"lightTheme": "Clair",
"greenTheme": "Vert",
"img2img": "Image en image",
"unifiedCanvas": "Canvas unifié",
"nodes": "Nœuds",
@@ -55,7 +51,6 @@
"statusConvertingModel": "Conversion du modèle",
"statusModelConverted": "Modèle converti",
"loading": "Chargement",
"pinOptionsPanel": "Épingler la page d'options",
"statusMergedModels": "Modèles mélangés",
"txt2img": "Texte vers image",
"postprocessing": "Post-Traitement"
@@ -71,7 +66,6 @@
"maintainAspectRatio": "Maintenir le rapport d'aspect",
"autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images",
"singleColumnLayout": "Mise en page en colonne unique",
"pinGallery": "Épingler la galerie",
"allImagesLoaded": "Toutes les images chargées",
"loadMore": "Charger plus",
"noImagesInGallery": "Aucune image dans la galerie"
@@ -356,7 +350,6 @@
"cfgScale": "CFG Echelle",
"width": "Largeur",
"height": "Hauteur",
"sampler": "Echantillonneur",
"seed": "Graine",
"randomizeSeed": "Graine Aléatoire",
"shuffle": "Mélanger",
@@ -378,10 +371,6 @@
"hiresOptim": "Optimisation Haute Résolution",
"imageFit": "Ajuster Image Initiale à la Taille de Sortie",
"codeformerFidelity": "Fidélité",
"seamSize": "Taille des Joints",
"seamBlur": "Flou des Joints",
"seamStrength": "Force des Joints",
"seamSteps": "Etapes des Joints",
"scaleBeforeProcessing": "Echelle Avant Traitement",
"scaledWidth": "Larg. Échelle",
"scaledHeight": "Haut. Échelle",
@@ -392,8 +381,6 @@
"infillScalingHeader": "Remplissage et Mise à l'Échelle",
"img2imgStrength": "Force de l'Image à l'Image",
"toggleLoopback": "Activer/Désactiver la Boucle",
"invoke": "Invoker",
"promptPlaceholder": "Tapez le prompt ici. [tokens négatifs], (poids positif)++, (poids négatif)--, swap et blend sont disponibles (voir les docs)",
"sendTo": "Envoyer à",
"sendToImg2Img": "Envoyer à Image à Image",
"sendToUnifiedCanvas": "Envoyer au Canvas Unifié",
@@ -407,7 +394,6 @@
"useAll": "Tout utiliser",
"useInitImg": "Utiliser l'image initiale",
"info": "Info",
"deleteImage": "Supprimer l'image",
"initialImage": "Image initiale",
"showOptionsPanel": "Afficher le panneau d'options"
},
@@ -417,7 +403,6 @@
"saveSteps": "Enregistrer les images tous les n étapes",
"confirmOnDelete": "Confirmer la suppression",
"displayHelpIcons": "Afficher les icônes d'aide",
"useCanvasBeta": "Utiliser la mise en page bêta de Canvas",
"enableImageDebugging": "Activer le débogage d'image",
"resetWebUI": "Réinitialiser l'interface Web",
"resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.",
@@ -427,7 +412,6 @@
"toast": {
"tempFoldersEmptied": "Dossiers temporaires vidés",
"uploadFailed": "Téléchargement échoué",
"uploadFailedMultipleImagesDesc": "Plusieurs images collées, peut uniquement télécharger une image à la fois",
"uploadFailedUnableToLoadDesc": "Impossible de charger le fichier",
"downloadImageStarted": "Téléchargement de l'image démarré",
"imageCopied": "Image copiée",
@@ -538,6 +522,10 @@
"useThisParameter": "Utiliser ce paramètre",
"zoomIn": "Zoom avant",
"zoomOut": "Zoom arrière",
"showOptionsPanel": "Montrer la page d'options"
"showOptionsPanel": "Montrer la page d'options",
"modelSelect": "Choix du modèle",
"invokeProgressBar": "Barre de Progression Invoke",
"copyMetadataJson": "Copie des métadonnées JSON",
"menu": "Menu"
}
}

View File

@@ -107,13 +107,10 @@
},
"common": {
"nodesDesc": "מערכת מבוססת צמתים עבור יצירת תמונות עדיין תחת פיתוח. השארו קשובים לעדכונים עבור הפיצ׳ר המדהים הזה.",
"themeLabel": "ערכת נושא",
"languagePickerLabel": "בחירת שפה",
"githubLabel": "גיטהאב",
"discordLabel": "דיסקורד",
"settingsLabel": "הגדרות",
"darkTheme": "חשוך",
"lightTheme": "מואר",
"langEnglish": "אנגלית",
"langDutch": "הולנדית",
"langArabic": "ערבית",
@@ -155,7 +152,6 @@
"statusMergedModels": "מודלים מוזגו",
"hotkeysLabel": "מקשים חמים",
"reportBugLabel": "דווח באג",
"greenTheme": "ירוק",
"langItalian": "איטלקית",
"upload": "העלאה",
"langPolish": "פולנית",
@@ -384,7 +380,6 @@
"maintainAspectRatio": "שמור על יחס רוחב-גובה",
"autoSwitchNewImages": "החלף אוטומטית לתמונות חדשות",
"singleColumnLayout": "תצוגת עמודה אחת",
"pinGallery": "הצמד גלריה",
"allImagesLoaded": "כל התמונות נטענו",
"loadMore": "טען עוד",
"noImagesInGallery": "אין תמונות בגלריה",
@@ -399,7 +394,6 @@
"cfgScale": "סולם CFG",
"width": "רוחב",
"height": "גובה",
"sampler": "דוגם",
"seed": "זרע",
"imageToImage": "תמונה לתמונה",
"randomizeSeed": "זרע אקראי",
@@ -416,10 +410,6 @@
"hiresOptim": "אופטימיזצית רזולוציה גבוהה",
"hiresStrength": "חוזק רזולוציה גבוהה",
"codeformerFidelity": "דבקות",
"seamSize": "גודל תפר",
"seamBlur": "טשטוש תפר",
"seamStrength": "חוזק תפר",
"seamSteps": "שלבי תפר",
"scaleBeforeProcessing": "שנה קנה מידה לפני עיבוד",
"scaledWidth": "קנה מידה לאחר שינוי W",
"scaledHeight": "קנה מידה לאחר שינוי H",
@@ -432,14 +422,12 @@
"symmetry": "סימטריה",
"vSymmetryStep": "צעד סימטריה V",
"hSymmetryStep": "צעד סימטריה H",
"invoke": "הפעלה",
"cancel": {
"schedule": "ביטול לאחר האיטרציה הנוכחית",
"isScheduled": "מבטל",
"immediate": "ביטול מיידי",
"setType": "הגדר סוג ביטול"
},
"negativePrompts": "בקשות שליליות",
"sendTo": "שליחה אל",
"copyImage": "העתקת תמונה",
"downloadImage": "הורדת תמונה",
@@ -464,15 +452,12 @@
"seamlessTiling": "ריצוף חלק",
"img2imgStrength": "חוזק תמונה לתמונה",
"initialImage": "תמונה ראשונית",
"copyImageToLink": "העתקת תמונה לקישור",
"deleteImage": "מחיקת תמונה",
"promptPlaceholder": "הקלד בקשה כאן. [אסימונים שליליים], (העלאת משקל)++ , (הורדת משקל)--, החלפה ומיזוג זמינים (ראה מסמכים)"
"copyImageToLink": "העתקת תמונה לקישור"
},
"settings": {
"models": "מודלים",
"displayInProgress": "הצגת תמונות בתהליך",
"confirmOnDelete": "אישור בעת המחיקה",
"useCanvasBeta": "שימוש בגרסת ביתא של תצוגת הקנבס",
"useSlidersForAll": "שימוש במחוונים לכל האפשרויות",
"resetWebUI": "איפוס ממשק משתמש",
"resetWebUIDesc1": "איפוס ממשק המשתמש האינטרנטי מאפס רק את המטמון המקומי של הדפדפן של התמונות וההגדרות שנשמרו. זה לא מוחק תמונות מהדיסק.",
@@ -484,7 +469,6 @@
},
"toast": {
"uploadFailed": "העלאה נכשלה",
"uploadFailedMultipleImagesDesc": "תמונות מרובות הודבקו, ניתן להעלות תמונה אחת בלבד בכל פעם",
"imageCopied": "התמונה הועתקה",
"imageLinkCopied": "קישור תמונה הועתק",
"imageNotLoadedDesc": "לא נמצאה תמונה לשליחה למודול תמונה לתמונה",

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,8 @@
{
"common": {
"themeLabel": "テーマ",
"languagePickerLabel": "言語選択",
"reportBugLabel": "バグ報告",
"settingsLabel": "設定",
"darkTheme": "ダーク",
"lightTheme": "ライト",
"greenTheme": "緑",
"langJapanese": "日本語",
"nodesDesc": "現在、画像生成のためのノードベースシステムを開発中です。機能についてのアップデートにご期待ください。",
"postProcessing": "後処理",
@@ -56,14 +52,12 @@
"loadingInvokeAI": "Invoke AIをロード中",
"statusConvertingModel": "モデルの変換",
"statusMergedModels": "マージ済モデル",
"pinOptionsPanel": "オプションパネルを固定",
"githubLabel": "Github",
"hotkeysLabel": "ホットキー",
"langHebrew": "עברית",
"discordLabel": "Discord",
"langItalian": "Italiano",
"langEnglish": "English",
"oceanTheme": "オーシャン",
"langArabic": "アラビア語",
"langDutch": "Nederlands",
"langFrench": "Français",
@@ -83,7 +77,6 @@
"gallerySettings": "ギャラリーの設定",
"maintainAspectRatio": "アスペクト比を維持",
"singleColumnLayout": "1カラムレイアウト",
"pinGallery": "ギャラリーにピン留め",
"allImagesLoaded": "すべての画像を読み込む",
"loadMore": "さらに読み込む",
"noImagesInGallery": "ギャラリーに画像がありません",
@@ -355,7 +348,6 @@
"useSeed": "シード値を使用",
"useAll": "すべてを使用",
"info": "情報",
"deleteImage": "画像を削除",
"showOptionsPanel": "オプションパネルを表示"
},
"settings": {
@@ -364,7 +356,6 @@
"saveSteps": "nステップごとに画像を保存",
"confirmOnDelete": "削除時に確認",
"displayHelpIcons": "ヘルプアイコンを表示",
"useCanvasBeta": "キャンバスレイアウト(Beta)を使用する",
"enableImageDebugging": "画像のデバッグを有効化",
"resetWebUI": "WebUIをリセット",
"resetWebUIDesc1": "WebUIのリセットは、画像と保存された設定のキャッシュをリセットするだけです。画像を削除するわけではありません。",
@@ -373,7 +364,6 @@
},
"toast": {
"uploadFailed": "アップロード失敗",
"uploadFailedMultipleImagesDesc": "一度にアップロードできる画像は1枚のみです。",
"uploadFailedUnableToLoadDesc": "ファイルを読み込むことができません。",
"downloadImageStarted": "画像ダウンロード開始",
"imageCopied": "画像をコピー",
@@ -471,7 +461,6 @@
"toggleAutoscroll": "自動スクロールの切替",
"modifyConfig": "Modify Config",
"toggleLogViewer": "Log Viewerの切替",
"showGallery": "ギャラリーを表示",
"showOptionsPanel": "オプションパネルを表示"
}
}

View File

@@ -1,13 +1,9 @@
{
"common": {
"themeLabel": "테마 설정",
"languagePickerLabel": "언어 설정",
"reportBugLabel": "버그 리포트",
"githubLabel": "Github",
"settingsLabel": "설정",
"darkTheme": "다크 모드",
"lightTheme": "라이트 모드",
"greenTheme": "그린 모드",
"langArabic": "العربية",
"langEnglish": "English",
"langDutch": "Nederlands",

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "Skróty klawiszowe",
"themeLabel": "Motyw",
"languagePickerLabel": "Wybór języka",
"reportBugLabel": "Zgłoś błąd",
"settingsLabel": "Ustawienia",
"darkTheme": "Ciemny",
"lightTheme": "Jasny",
"greenTheme": "Zielony",
"img2img": "Obraz na obraz",
"unifiedCanvas": "Tryb uniwersalny",
"nodes": "Węzły",
@@ -43,7 +39,11 @@
"statusUpscaling": "Powiększanie obrazu",
"statusUpscalingESRGAN": "Powiększanie (ESRGAN)",
"statusLoadingModel": "Wczytywanie modelu",
"statusModelChanged": "Zmieniono model"
"statusModelChanged": "Zmieniono model",
"githubLabel": "GitHub",
"discordLabel": "Discord",
"darkMode": "Tryb ciemny",
"lightMode": "Tryb jasny"
},
"gallery": {
"generations": "Wygenerowane",
@@ -56,7 +56,6 @@
"maintainAspectRatio": "Zachowaj proporcje",
"autoSwitchNewImages": "Przełączaj na nowe obrazy",
"singleColumnLayout": "Układ jednokolumnowy",
"pinGallery": "Przypnij galerię",
"allImagesLoaded": "Koniec listy",
"loadMore": "Wczytaj więcej",
"noImagesInGallery": "Brak obrazów w galerii"
@@ -274,7 +273,6 @@
"cfgScale": "Skala CFG",
"width": "Szerokość",
"height": "Wysokość",
"sampler": "Próbkowanie",
"seed": "Inicjator",
"randomizeSeed": "Losowy inicjator",
"shuffle": "Losuj",
@@ -296,10 +294,6 @@
"hiresOptim": "Optymalizacja wys. rozdzielczości",
"imageFit": "Przeskaluj oryginalny obraz",
"codeformerFidelity": "Dokładność",
"seamSize": "Rozmiar",
"seamBlur": "Rozmycie",
"seamStrength": "Siła",
"seamSteps": "Kroki",
"scaleBeforeProcessing": "Tryb skalowania",
"scaledWidth": "Sk. do szer.",
"scaledHeight": "Sk. do wys.",
@@ -310,8 +304,6 @@
"infillScalingHeader": "Wypełnienie i skalowanie",
"img2imgStrength": "Wpływ sugestii na obraz",
"toggleLoopback": "Wł/wył sprzężenie zwrotne",
"invoke": "Wywołaj",
"promptPlaceholder": "W tym miejscu wprowadź swoje sugestie. [negatywne sugestie], (wzmocnienie), (osłabienie)--, po więcej opcji (np. swap lub blend) zajrzyj do dokumentacji",
"sendTo": "Wyślij do",
"sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"",
"sendToUnifiedCanvas": "Użyj w trybie uniwersalnym",
@@ -324,7 +316,6 @@
"useAll": "Skopiuj wszystko",
"useInitImg": "Użyj oryginalnego obrazu",
"info": "Informacje",
"deleteImage": "Usuń obraz",
"initialImage": "Oryginalny obraz",
"showOptionsPanel": "Pokaż panel ustawień"
},
@@ -334,7 +325,6 @@
"saveSteps": "Zapisuj obrazy co X kroków",
"confirmOnDelete": "Potwierdzaj usuwanie",
"displayHelpIcons": "Wyświetlaj ikony pomocy",
"useCanvasBeta": "Nowy układ trybu uniwersalnego",
"enableImageDebugging": "Włącz debugowanie obrazu",
"resetWebUI": "Zresetuj interfejs",
"resetWebUIDesc1": "Resetowanie interfejsu wyczyści jedynie dane i ustawienia zapisane w pamięci przeglądarki. Nie usunie żadnych obrazów z dysku.",
@@ -344,7 +334,6 @@
"toast": {
"tempFoldersEmptied": "Wyczyszczono folder tymczasowy",
"uploadFailed": "Błąd przesyłania obrazu",
"uploadFailedMultipleImagesDesc": "Możliwe jest przesłanie tylko jednego obrazu na raz",
"uploadFailedUnableToLoadDesc": "Błąd wczytywania obrazu",
"downloadImageStarted": "Rozpoczęto pobieranie",
"imageCopied": "Skopiowano obraz",
@@ -446,5 +435,27 @@
"betaDarkenOutside": "Przyciemnienie",
"betaLimitToBox": "Ogranicz do zaznaczenia",
"betaPreserveMasked": "Zachowaj obszar"
},
"accessibility": {
"zoomIn": "Przybliż",
"exitViewer": "Wyjdź z podglądu",
"modelSelect": "Wybór modelu",
"invokeProgressBar": "Pasek postępu",
"reset": "Zerowanie",
"useThisParameter": "Użyj tego parametru",
"copyMetadataJson": "Kopiuj metadane JSON",
"uploadImage": "Wgrywanie obrazu",
"previousImage": "Poprzedni obraz",
"nextImage": "Następny obraz",
"zoomOut": "Oddal",
"rotateClockwise": "Obróć zgodnie ze wskazówkami zegara",
"rotateCounterClockwise": "Obróć przeciwnie do wskazówek zegara",
"flipHorizontally": "Odwróć horyzontalnie",
"flipVertically": "Odwróć wertykalnie",
"modifyConfig": "Modyfikuj ustawienia",
"toggleAutoscroll": "Przełącz autoprzewijanie",
"toggleLogViewer": "Przełącz podgląd logów",
"showOptionsPanel": "Pokaż panel opcji",
"menu": "Menu"
}
}

View File

@@ -1,11 +1,8 @@
{
"common": {
"greenTheme": "Verde",
"langArabic": "العربية",
"themeLabel": "Tema",
"reportBugLabel": "Reportar Bug",
"settingsLabel": "Configurações",
"lightTheme": "Claro",
"langBrPortuguese": "Português do Brasil",
"languagePickerLabel": "Seletor de Idioma",
"langDutch": "Nederlands",
@@ -57,14 +54,11 @@
"statusModelChanged": "Modelo Alterado",
"githubLabel": "Github",
"discordLabel": "Discord",
"darkTheme": "Escuro",
"training": "Treinando",
"statusGeneratingOutpainting": "Geração de Ampliação",
"statusGenerationComplete": "Geração Completa",
"statusMergingModels": "Mesclando Modelos",
"statusMergedModels": "Modelos Mesclados",
"oceanTheme": "Oceano",
"pinOptionsPanel": "Fixar painel de opções",
"loading": "A carregar",
"loadingInvokeAI": "A carregar Invoke AI",
"langPortuguese": "Português"
@@ -74,7 +68,6 @@
"gallerySettings": "Configurações de Galeria",
"maintainAspectRatio": "Mater Proporções",
"autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente",
"pinGallery": "Fixar Galeria",
"singleColumnLayout": "Disposição em Coluna Única",
"allImagesLoaded": "Todas as Imagens Carregadas",
"loadMore": "Carregar Mais",
@@ -407,7 +400,6 @@
"width": "Largura",
"seed": "Seed",
"hiresStrength": "Força da Alta Resolução",
"negativePrompts": "Indicações negativas",
"general": "Geral",
"randomizeSeed": "Seed Aleatório",
"shuffle": "Embaralhar",
@@ -425,10 +417,6 @@
"hiresOptim": "Otimização de Alta Res",
"imageFit": "Caber Imagem Inicial No Tamanho de Saída",
"codeformerFidelity": "Fidelidade",
"seamSize": "Tamanho da Fronteira",
"seamBlur": "Desfoque da Fronteira",
"seamStrength": "Força da Fronteira",
"seamSteps": "Passos da Fronteira",
"tileSize": "Tamanho do Ladrilho",
"boundingBoxHeader": "Caixa Delimitadora",
"seamCorrectionHeader": "Correção de Fronteira",
@@ -436,12 +424,10 @@
"img2imgStrength": "Força de Imagem Para Imagem",
"toggleLoopback": "Ativar Loopback",
"symmetry": "Simetria",
"promptPlaceholder": "Digite o prompt aqui. [tokens negativos], (upweight)++, (downweight)--, trocar e misturar estão disponíveis (veja docs)",
"sendTo": "Mandar para",
"openInViewer": "Abrir No Visualizador",
"closeViewer": "Fechar Visualizador",
"usePrompt": "Usar Prompt",
"deleteImage": "Apagar Imagem",
"initialImage": "Imagem inicial",
"showOptionsPanel": "Mostrar Painel de Opções",
"strength": "Força",
@@ -449,12 +435,10 @@
"upscale": "Redimensionar",
"upscaleImage": "Redimensionar Imagem",
"scaleBeforeProcessing": "Escala Antes do Processamento",
"invoke": "Invocar",
"images": "Imagems",
"steps": "Passos",
"cfgScale": "Escala CFG",
"height": "Altura",
"sampler": "Amostrador",
"imageToImage": "Imagem para Imagem",
"variationAmount": "Quntidade de Variatções",
"scaledWidth": "L Escalada",
@@ -481,7 +465,6 @@
"settings": {
"confirmOnDelete": "Confirmar Antes de Apagar",
"displayHelpIcons": "Mostrar Ícones de Ajuda",
"useCanvasBeta": "Usar Layout de Telas Beta",
"enableImageDebugging": "Ativar Depuração de Imagem",
"useSlidersForAll": "Usar deslizadores para todas as opções",
"resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.",
@@ -494,7 +477,6 @@
},
"toast": {
"uploadFailed": "Envio Falhou",
"uploadFailedMultipleImagesDesc": "Várias imagens copiadas, só é permitido uma imagem de cada vez",
"uploadFailedUnableToLoadDesc": "Não foj possível carregar o ficheiro",
"downloadImageStarted": "Download de Imagem Começou",
"imageNotLoadedDesc": "Nenhuma imagem encontrada a enviar para o módulo de imagem para imagem",
@@ -611,7 +593,6 @@
"flipVertically": "Espelhar verticalmente",
"modifyConfig": "Modificar config",
"toggleAutoscroll": "Alternar rolagem automática",
"showGallery": "Mostrar galeria",
"showOptionsPanel": "Mostrar painel de opções",
"uploadImage": "Enviar imagem",
"previousImage": "Imagem anterior",

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": "Teclas de atalho",
"themeLabel": "Tema",
"languagePickerLabel": "Seletor de Idioma",
"reportBugLabel": "Relatar Bug",
"settingsLabel": "Configurações",
"darkTheme": "Noite",
"lightTheme": "Dia",
"greenTheme": "Verde",
"img2img": "Imagem Para Imagem",
"unifiedCanvas": "Tela Unificada",
"nodes": "Nódulos",
@@ -63,7 +59,6 @@
"statusMergedModels": "Modelos Mesclados",
"langRussian": "Russo",
"langSpanish": "Espanhol",
"pinOptionsPanel": "Fixar painel de opções",
"loadingInvokeAI": "Carregando Invoke AI",
"loading": "Carregando"
},
@@ -78,7 +73,6 @@
"maintainAspectRatio": "Mater Proporções",
"autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente",
"singleColumnLayout": "Disposição em Coluna Única",
"pinGallery": "Fixar Galeria",
"allImagesLoaded": "Todas as Imagens Carregadas",
"loadMore": "Carregar Mais",
"noImagesInGallery": "Sem Imagens na Galeria"
@@ -402,7 +396,6 @@
"cfgScale": "Escala CFG",
"width": "Largura",
"height": "Altura",
"sampler": "Amostrador",
"seed": "Seed",
"randomizeSeed": "Seed Aleatório",
"shuffle": "Embaralhar",
@@ -424,10 +417,6 @@
"hiresOptim": "Otimização de Alta Res",
"imageFit": "Caber Imagem Inicial No Tamanho de Saída",
"codeformerFidelity": "Fidelidade",
"seamSize": "Tamanho da Fronteira",
"seamBlur": "Desfoque da Fronteira",
"seamStrength": "Força da Fronteira",
"seamSteps": "Passos da Fronteira",
"scaleBeforeProcessing": "Escala Antes do Processamento",
"scaledWidth": "L Escalada",
"scaledHeight": "A Escalada",
@@ -438,8 +427,6 @@
"infillScalingHeader": "Preencimento e Escala",
"img2imgStrength": "Força de Imagem Para Imagem",
"toggleLoopback": "Ativar Loopback",
"invoke": "Invoke",
"promptPlaceholder": "Digite o prompt aqui. [tokens negativos], (upweight)++, (downweight)--, trocar e misturar estão disponíveis (veja docs)",
"sendTo": "Mandar para",
"sendToImg2Img": "Mandar para Imagem Para Imagem",
"sendToUnifiedCanvas": "Mandar para Tela Unificada",
@@ -452,14 +439,12 @@
"useAll": "Usar Todos",
"useInitImg": "Usar Imagem Inicial",
"info": "Informações",
"deleteImage": "Apagar Imagem",
"initialImage": "Imagem inicial",
"showOptionsPanel": "Mostrar Painel de Opções",
"vSymmetryStep": "V Passo de Simetria",
"hSymmetryStep": "H Passo de Simetria",
"symmetry": "Simetria",
"copyImage": "Copiar imagem",
"negativePrompts": "Indicações negativas",
"hiresStrength": "Força da Alta Resolução",
"denoisingStrength": "A força de remoção de ruído",
"imageToImage": "Imagem para Imagem",
@@ -477,7 +462,6 @@
"saveSteps": "Salvar imagens a cada n passos",
"confirmOnDelete": "Confirmar Antes de Apagar",
"displayHelpIcons": "Mostrar Ícones de Ajuda",
"useCanvasBeta": "Usar Layout de Telas Beta",
"enableImageDebugging": "Ativar Depuração de Imagem",
"resetWebUI": "Reiniciar Interface",
"resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.",
@@ -488,7 +472,6 @@
"toast": {
"tempFoldersEmptied": "Pasta de Arquivos Temporários Esvaziada",
"uploadFailed": "Envio Falhou",
"uploadFailedMultipleImagesDesc": "Várias imagens copiadas, só é permitido uma imagem de cada vez",
"uploadFailedUnableToLoadDesc": "Não foj possível carregar o arquivo",
"downloadImageStarted": "Download de Imagem Começou",
"imageCopied": "Imagem Copiada",

View File

@@ -1,16 +1,12 @@
{
"common": {
"hotkeysLabel": "Горячие клавиши",
"themeLabel": "Тема",
"languagePickerLabel": "Язык",
"reportBugLabel": "Сообщить об ошибке",
"settingsLabel": "Настройки",
"darkTheme": "Темная",
"lightTheme": "Светлая",
"greenTheme": "Зеленая",
"img2img": "Изображение в изображение (img2img)",
"unifiedCanvas": "Единый холст",
"nodes": "Ноды",
"nodes": "Редактор рабочего процесса",
"langRussian": "Русский",
"nodesDesc": "Cистема генерации изображений на основе нодов (узлов) уже разрабатывается. Следите за новостями об этой замечательной функции.",
"postProcessing": "Постобработка",
@@ -49,14 +45,12 @@
"statusMergingModels": "Слияние моделей",
"statusModelConverted": "Модель сконвертирована",
"statusMergedModels": "Модели объединены",
"pinOptionsPanel": "Закрепить панель настроек",
"loading": "Загрузка",
"loadingInvokeAI": "Загрузка Invoke AI",
"back": "Назад",
"statusConvertingModel": "Конвертация модели",
"cancel": "Отменить",
"accept": "Принять",
"oceanTheme": "Океан",
"langUkranian": "Украинский",
"langEnglish": "Английский",
"postprocessing": "Постобработка",
@@ -74,7 +68,21 @@
"langPortuguese": "Португальский",
"txt2img": "Текст в изображение (txt2img)",
"langBrPortuguese": "Португальский (Бразилия)",
"linear": "Линейная обработка"
"linear": "Линейная обработка",
"dontAskMeAgain": "Больше не спрашивать",
"areYouSure": "Вы уверены?",
"random": "Случайное",
"generate": "Сгенерировать",
"openInNewTab": "Открыть в новой вкладке",
"imagePrompt": "Запрос",
"communityLabel": "Сообщество",
"lightMode": "Светлая тема",
"batch": "Пакетный менеджер",
"modelManager": "Менеджер моделей",
"darkMode": "Темная тема",
"nodeEditor": "Редактор Нодов (Узлов)",
"controlNet": "Controlnet",
"advanced": "Расширенные"
},
"gallery": {
"generations": "Генерации",
@@ -87,10 +95,15 @@
"maintainAspectRatio": "Сохранять пропорции",
"autoSwitchNewImages": "Автоматически выбирать новые",
"singleColumnLayout": "Одна колонка",
"pinGallery": "Закрепить галерею",
"allImagesLoaded": "Все изображения загружены",
"loadMore": "Показать больше",
"noImagesInGallery": "Изображений нет"
"noImagesInGallery": "Изображений нет",
"deleteImagePermanent": "Удаленные изображения невозможно восстановить.",
"deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.",
"deleteImage": "Удалить изображение",
"images": "Изображения",
"assets": "Ресурсы",
"autoAssignBoardOnClick": "Авто-назначение доски по клику"
},
"hotkeys": {
"keyboardShortcuts": "Горячие клавиши",
@@ -297,7 +310,12 @@
"acceptStagingImage": {
"title": "Принять изображение",
"desc": "Принять текущее изображение"
}
},
"addNodes": {
"desc": "Открывает меню добавления узла",
"title": "Добавление узлов"
},
"nodesHotkeys": "Горячие клавиши узлов"
},
"modelManager": {
"modelManager": "Менеджер моделей",
@@ -350,14 +368,14 @@
"deleteModel": "Удалить модель",
"deleteConfig": "Удалить конфигурацию",
"deleteMsg1": "Вы точно хотите удалить модель из InvokeAI?",
"deleteMsg2": "Это не удалит файл модели с диска. Позже вы можете добавить его снова.",
"deleteMsg2": "Это приведет К УДАЛЕНИЮ модели С ДИСКА, если она находится в корневой папке Invoke. Если вы используете пользовательское расположение, то модель НЕ будет удалена с диска.",
"repoIDValidationMsg": "Онлайн-репозиторий модели",
"convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 4 7 Гб.",
"convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 27 Гб.",
"invokeAIFolder": "Каталог InvokeAI",
"ignoreMismatch": "Игнорировать несоответствия между выбранными моделями",
"addCheckpointModel": "Добавить модель Checkpoint/Safetensor",
"formMessageDiffusersModelLocationDesc": "Укажите хотя бы одно.",
"convertToDiffusersHelpText3": "Файл модели на диске НЕ будет удалён или изменён. Вы сможете заново добавить его в Model Manager при необходимости.",
"convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.",
"vaeRepoID": "ID репозитория VAE",
"mergedModelName": "Название объединенной модели",
"checkpointModels": "Checkpoints",
@@ -409,7 +427,27 @@
"weightedSum": "Взвешенная сумма",
"safetensorModels": "SafeTensors",
"v2_768": "v2 (768px)",
"v2_base": "v2 (512px)"
"v2_base": "v2 (512px)",
"modelDeleted": "Модель удалена",
"importModels": "Импорт Моделей",
"variant": "Вариант",
"baseModel": "Базовая модель",
"modelsSynced": "Модели синхронизированы",
"modelSyncFailed": "Не удалось синхронизировать модели",
"vae": "VAE",
"modelDeleteFailed": "Не удалось удалить модель",
"noCustomLocationProvided": "Пользовательское местоположение не указано",
"convertingModelBegin": "Конвертация модели. Пожалуйста, подождите.",
"settings": "Настройки",
"selectModel": "Выберите модель",
"syncModels": "Синхронизация моделей",
"syncModelsDesc": "Если ваши модели не синхронизированы с серверной частью, вы можете обновить их, используя эту опцию. Обычно это удобно в тех случаях, когда вы вручную обновляете свой файл \"models.yaml\" или добавляете модели в корневую папку InvokeAI после загрузки приложения.",
"modelUpdateFailed": "Не удалось обновить модель",
"modelConversionFailed": "Не удалось сконвертировать модель",
"modelsMergeFailed": "Не удалось выполнить слияние моделей",
"loraModels": "LoRAs",
"onnxModels": "Onnx",
"oliveModels": "Olives"
},
"parameters": {
"images": "Изображения",
@@ -417,10 +455,9 @@
"cfgScale": "Уровень CFG",
"width": "Ширина",
"height": "Высота",
"sampler": "Семплер",
"seed": "Сид",
"randomizeSeed": "Случайный сид",
"shuffle": "Обновить",
"shuffle": "Обновить сид",
"noiseThreshold": "Порог шума",
"perlinNoise": "Шум Перлина",
"variations": "Вариации",
@@ -439,10 +476,6 @@
"hiresOptim": "Оптимизация High Res",
"imageFit": "Уместить изображение",
"codeformerFidelity": "Точность",
"seamSize": "Размер шва",
"seamBlur": "Размытие шва",
"seamStrength": "Сила шва",
"seamSteps": "Шаги шва",
"scaleBeforeProcessing": "Масштабировать",
"scaledWidth": "Масштаб Ш",
"scaledHeight": "Масштаб В",
@@ -453,8 +486,6 @@
"infillScalingHeader": "Заполнение и масштабирование",
"img2imgStrength": "Сила обработки img2img",
"toggleLoopback": "Зациклить обработку",
"invoke": "Invoke",
"promptPlaceholder": "Введите запрос здесь (на английском). [исключенные токены], (более значимые)++, (менее значимые)--, swap и blend тоже доступны (смотрите Github)",
"sendTo": "Отправить",
"sendToImg2Img": "Отправить в img2img",
"sendToUnifiedCanvas": "Отправить на Единый холст",
@@ -467,7 +498,6 @@
"useAll": "Использовать все",
"useInitImg": "Использовать как исходное",
"info": "Метаданные",
"deleteImage": "Удалить изображение",
"initialImage": "Исходное изображение",
"showOptionsPanel": "Показать панель настроек",
"vSymmetryStep": "Шаг верт. симметрии",
@@ -485,8 +515,27 @@
"imageToImage": "Изображение в изображение",
"denoisingStrength": "Сила шумоподавления",
"copyImage": "Скопировать изображение",
"negativePrompts": "Исключающий запрос",
"showPreview": "Показать предпросмотр"
"showPreview": "Показать предпросмотр",
"noiseSettings": "Шум",
"seamlessXAxis": "Ось X",
"seamlessYAxis": "Ось Y",
"scheduler": "Планировщик",
"boundingBoxWidth": "Ширина ограничивающей рамки",
"boundingBoxHeight": "Высота ограничивающей рамки",
"positivePromptPlaceholder": "Запрос",
"negativePromptPlaceholder": "Исключающий запрос",
"controlNetControlMode": "Режим управления",
"clipSkip": "CLIP Пропуск",
"aspectRatio": "Соотношение",
"maskAdjustmentsHeader": "Настройка маски",
"maskBlur": "Размытие",
"maskBlurMethod": "Метод размытия",
"seamLowThreshold": "Низкий",
"seamHighThreshold": "Высокий",
"coherenceSteps": "Шагов",
"coherencePassHeader": "Порог Coherence",
"coherenceStrength": "Сила",
"compositingSettingsHeader": "Настройки компоновки"
},
"settings": {
"models": "Модели",
@@ -494,24 +543,38 @@
"saveSteps": "Сохранять каждые n щагов",
"confirmOnDelete": "Подтверждать удаление",
"displayHelpIcons": "Показывать значки подсказок",
"useCanvasBeta": "Показывать инструменты слева (Beta UI)",
"enableImageDebugging": "Включить отладку",
"resetWebUI": "Сброс настроек Web UI",
"resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.",
"resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.",
"resetComplete": "Интерфейс сброшен. Обновите эту страницу.",
"useSlidersForAll": "Использовать ползунки для всех параметров"
"resetComplete": "Настройки веб-интерфейса были сброшены.",
"useSlidersForAll": "Использовать ползунки для всех параметров",
"consoleLogLevel": "Уровень логирования",
"shouldLogToConsole": "Логи в консоль",
"developer": "Разработчик",
"general": "Основное",
"showProgressInViewer": "Показывать процесс генерации в Просмотрщике",
"antialiasProgressImages": "Сглаживать предпоказ процесса генерации",
"generation": "Поколение",
"ui": "Пользовательский интерфейс",
"favoriteSchedulers": "Избранные планировщики",
"favoriteSchedulersPlaceholder": "Нет избранных планировщиков",
"enableNodesEditor": "Включить редактор узлов",
"experimental": "Экспериментальные",
"beta": "Бета",
"alternateCanvasLayout": "Альтернативный слой холста",
"showAdvancedOptions": "Показать доп. параметры",
"autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении"
},
"toast": {
"tempFoldersEmptied": "Временная папка очищена",
"uploadFailed": "Загрузка не удалась",
"uploadFailedMultipleImagesDesc": "Можно вставить только одно изображение (вы попробовали вставить несколько)",
"uploadFailedUnableToLoadDesc": "Невозможно загрузить файл",
"downloadImageStarted": "Скачивание изображения началось",
"imageCopied": "Изображение скопировано",
"imageLinkCopied": "Ссылка на изображение скопирована",
"imageNotLoaded": "Изображение не загружено",
"imageNotLoadedDesc": "Не найдены изображения для отправки в img2img",
"imageNotLoadedDesc": "Не удалось найти изображение",
"imageSavedToGallery": "Изображение сохранено в галерею",
"canvasMerged": "Холст объединен",
"sentToImageToImage": "Отправить в img2img",
@@ -536,7 +599,21 @@
"serverError": "Ошибка сервера",
"disconnected": "Отключено от сервера",
"connected": "Подключено к серверу",
"canceled": "Обработка отменена"
"canceled": "Обработка отменена",
"problemCopyingImageLink": "Не удалось скопировать ссылку на изображение",
"uploadFailedInvalidUploadDesc": "Должно быть одно изображение в формате PNG или JPEG",
"parameterNotSet": "Параметр не задан",
"parameterSet": "Параметр задан",
"nodesLoaded": "Узлы загружены",
"problemCopyingImage": "Не удается скопировать изображение",
"nodesLoadedFailed": "Не удалось загрузить Узлы",
"nodesCleared": "Узлы очищены",
"nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.",
"nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы",
"nodesNotValidJSON": "Недопустимый JSON",
"nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.",
"nodesSaved": "Узлы сохранены",
"nodesNotValidGraph": "Недопустимый граф узлов InvokeAI"
},
"tooltip": {
"feature": {
@@ -610,7 +687,8 @@
"betaClear": "Очистить",
"betaDarkenOutside": "Затемнить снаружи",
"betaLimitToBox": "Ограничить выделением",
"betaPreserveMasked": "Сохранять маскируемую область"
"betaPreserveMasked": "Сохранять маскируемую область",
"antialiasing": "Не удалось скопировать ссылку на изображение"
},
"accessibility": {
"modelSelect": "Выбор модели",
@@ -625,8 +703,7 @@
"flipHorizontally": "Отразить горизонтально",
"toggleAutoscroll": "Включить автопрокрутку",
"toggleLogViewer": "Показать или скрыть просмотрщик логов",
"showOptionsPanel": "Показать опции",
"showGallery": "Показать галерею",
"showOptionsPanel": "Показать боковую панель",
"invokeProgressBar": "Индикатор выполнения",
"reset": "Сброс",
"modifyConfig": "Изменить конфиг",
@@ -634,5 +711,69 @@
"copyMetadataJson": "Скопировать метаданные JSON",
"exitViewer": "Закрыть просмотрщик",
"menu": "Меню"
},
"ui": {
"showProgressImages": "Показывать промежуточный итог",
"hideProgressImages": "Не показывать промежуточный итог",
"swapSizes": "Поменять местами размеры",
"lockRatio": "Зафиксировать пропорции"
},
"nodes": {
"zoomInNodes": "Увеличьте масштаб",
"zoomOutNodes": "Уменьшите масштаб",
"fitViewportNodes": "Уместить вид",
"hideGraphNodes": "Скрыть оверлей графа",
"showGraphNodes": "Показать оверлей графа",
"showLegendNodes": "Показать тип поля",
"hideMinimapnodes": "Скрыть миникарту",
"hideLegendNodes": "Скрыть тип поля",
"showMinimapnodes": "Показать миникарту",
"loadWorkflow": "Загрузить рабочий процесс",
"resetWorkflowDesc2": "Сброс рабочего процесса очистит все узлы, ребра и детали рабочего процесса.",
"resetWorkflow": "Сбросить рабочий процесс",
"resetWorkflowDesc": "Вы уверены, что хотите сбросить этот рабочий процесс?",
"reloadNodeTemplates": "Перезагрузить шаблоны узлов",
"downloadWorkflow": "Скачать JSON рабочего процесса"
},
"controlnet": {
"amult": "a_mult",
"contentShuffleDescription": "Перетасовывает содержимое изображения",
"bgth": "bg_th",
"contentShuffle": "Перетасовка содержимого",
"beginEndStepPercent": "Процент начала/конца шага",
"duplicate": "Дублировать",
"balanced": "Сбалансированный",
"f": "F",
"depthMidasDescription": "Генерация карты глубины с использованием Midas",
"control": "Контроль",
"coarse": "Грубость обработки",
"crop": "Обрезка",
"depthMidas": "Глубина (Midas)",
"enableControlnet": "Включить ControlNet",
"detectResolution": "Определить разрешение",
"controlMode": "Режим контроля",
"cannyDescription": "Детектор границ Canny",
"depthZoe": "Глубина (Zoe)",
"autoConfigure": "Автонастройка процессора",
"delete": "Удалить",
"canny": "Canny",
"depthZoeDescription": "Генерация карты глубины с использованием Zoe"
},
"boards": {
"autoAddBoard": "Авто добавление Доски",
"topMessage": "Эта доска содержит изображения, используемые в следующих функциях:",
"move": "Перемещение",
"menuItemAutoAdd": "Авто добавление на эту доску",
"myBoard": "Моя Доска",
"searchBoard": "Поиск Доски...",
"noMatching": "Нет подходящих Досок",
"selectBoard": "Выбрать Доску",
"cancel": "Отменить",
"addBoard": "Добавить Доску",
"bottomMessage": "Удаление этой доски и ее изображений приведет к сбросу всех функций, использующихся их в данный момент.",
"uncategorized": "Без категории",
"changeBoard": "Изменить Доску",
"loading": "Загрузка...",
"clearSearch": "Очистить поиск"
}
}

View File

@@ -15,7 +15,6 @@
"reset": "Starta om",
"previousImage": "Föregående bild",
"useThisParameter": "Använd denna parametern",
"showGallery": "Visa galleri",
"rotateCounterClockwise": "Rotera moturs",
"rotateClockwise": "Rotera medurs",
"modifyConfig": "Ändra konfiguration",
@@ -27,10 +26,6 @@
"githubLabel": "Github",
"discordLabel": "Discord",
"settingsLabel": "Inställningar",
"darkTheme": "Mörk",
"lightTheme": "Ljus",
"greenTheme": "Grön",
"oceanTheme": "Hav",
"langEnglish": "Engelska",
"langDutch": "Nederländska",
"langFrench": "Franska",
@@ -63,12 +58,10 @@
"statusGenerationComplete": "Generering klar",
"statusModelConverted": "Modell konverterad",
"statusMergingModels": "Sammanfogar modeller",
"pinOptionsPanel": "Nåla fast inställningspanelen",
"loading": "Laddar",
"loadingInvokeAI": "Laddar Invoke AI",
"statusRestoringFaces": "Återskapar ansikten",
"languagePickerLabel": "Språkväljare",
"themeLabel": "Tema",
"txt2img": "Text till bild",
"nodes": "Noder",
"img2img": "Bild till bild",
@@ -108,7 +101,6 @@
"galleryImageResetSize": "Återställ storlek",
"gallerySettings": "Galleriinställningar",
"maintainAspectRatio": "Behåll bildförhållande",
"pinGallery": "Nåla fast galleri",
"noImagesInGallery": "Inga bilder i galleriet",
"autoSwitchNewImages": "Ändra automatiskt till nya bilder",
"singleColumnLayout": "Enkolumnslayout"

View File

@@ -19,21 +19,15 @@
"reset": "Sıfırla",
"uploadImage": "Resim Yükle",
"previousImage": "Önceki Resim",
"menu": "Menü",
"showGallery": "Galeriyi Göster"
"menu": "Menü"
},
"common": {
"hotkeysLabel": "Kısayol Tuşları",
"themeLabel": "Tema",
"languagePickerLabel": "Dil Seçimi",
"reportBugLabel": "Hata Bildir",
"githubLabel": "Github",
"discordLabel": "Discord",
"settingsLabel": "Ayarlar",
"darkTheme": "Karanlık Tema",
"lightTheme": "Aydınlık Tema",
"greenTheme": "Yeşil Tema",
"oceanTheme": "Okyanus Tema",
"langArabic": "Arapça",
"langEnglish": "İngilizce",
"langDutch": "Hollandaca",

View File

@@ -1,13 +1,9 @@
{
"common": {
"hotkeysLabel": арячi клавіші",
"themeLabel": "Тема",
"languagePickerLabel": "Мова",
"reportBugLabel": "Повідомити про помилку",
"settingsLabel": "Налаштування",
"darkTheme": "Темна",
"lightTheme": "Світла",
"greenTheme": "Зелена",
"img2img": "Зображення із зображення (img2img)",
"unifiedCanvas": "Універсальне полотно",
"nodes": "Вузли",
@@ -55,8 +51,6 @@
"langHebrew": "Іврит",
"langKorean": "Корейська",
"langPortuguese": "Португальська",
"pinOptionsPanel": "Закріпити панель налаштувань",
"oceanTheme": "Океан",
"langArabic": "Арабська",
"langSimplifiedChinese": "Китайська (спрощена)",
"langSpanish": "Іспанська",
@@ -87,7 +81,6 @@
"maintainAspectRatio": "Зберігати пропорції",
"autoSwitchNewImages": "Автоматично вибирати нові",
"singleColumnLayout": "Одна колонка",
"pinGallery": "Закріпити галерею",
"allImagesLoaded": "Всі зображення завантажені",
"loadMore": "Завантажити більше",
"noImagesInGallery": "Зображень немає"
@@ -417,7 +410,6 @@
"cfgScale": "Рівень CFG",
"width": "Ширина",
"height": "Висота",
"sampler": "Семплер",
"seed": "Сід",
"randomizeSeed": "Випадковий сид",
"shuffle": "Оновити",
@@ -439,10 +431,6 @@
"hiresOptim": "Оптимізація High Res",
"imageFit": "Вмістити зображення",
"codeformerFidelity": "Точність",
"seamSize": "Размір шву",
"seamBlur": "Розмиття шву",
"seamStrength": "Сила шву",
"seamSteps": "Кроки шву",
"scaleBeforeProcessing": "Масштабувати",
"scaledWidth": "Масштаб Ш",
"scaledHeight": "Масштаб В",
@@ -453,8 +441,6 @@
"infillScalingHeader": "Заповнення і масштабування",
"img2imgStrength": "Сила обробки img2img",
"toggleLoopback": "Зациклити обробку",
"invoke": "Викликати",
"promptPlaceholder": "Введіть запит тут (англійською). [видалені токени], (більш вагомі)++, (менш вагомі)--, swap и blend також доступні (дивіться Github)",
"sendTo": "Надіслати",
"sendToImg2Img": "Надіслати у img2img",
"sendToUnifiedCanvas": "Надіслати на полотно",
@@ -467,7 +453,6 @@
"useAll": "Використати все",
"useInitImg": "Використати як початкове",
"info": "Метадані",
"deleteImage": "Видалити зображення",
"initialImage": "Початкове зображення",
"showOptionsPanel": "Показати панель налаштувань",
"general": "Основне",
@@ -485,8 +470,7 @@
"denoisingStrength": "Сила шумоподавлення",
"copyImage": "Копіювати зображення",
"symmetry": "Симетрія",
"hSymmetryStep": "Крок гор. симетрії",
"negativePrompts": "Виключний запит"
"hSymmetryStep": "Крок гор. симетрії"
},
"settings": {
"models": "Моделі",
@@ -494,7 +478,6 @@
"saveSteps": "Зберігати кожні n кроків",
"confirmOnDelete": "Підтверджувати видалення",
"displayHelpIcons": "Показувати значки підказок",
"useCanvasBeta": "Показувати інструменты зліва (Beta UI)",
"enableImageDebugging": "Увімкнути налагодження",
"resetWebUI": "Повернути початкові",
"resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.",
@@ -505,7 +488,6 @@
"toast": {
"tempFoldersEmptied": "Тимчасова папка очищена",
"uploadFailed": "Не вдалося завантажити",
"uploadFailedMultipleImagesDesc": "Можна вставити лише одне зображення (ви спробували вставити декілька)",
"uploadFailedUnableToLoadDesc": "Неможливо завантажити файл",
"downloadImageStarted": "Завантаження зображення почалося",
"imageCopied": "Зображення скопійоване",
@@ -626,7 +608,6 @@
"rotateClockwise": "Обертати за годинниковою стрілкою",
"toggleAutoscroll": "Увімкнути автопрокручування",
"toggleLogViewer": "Показати або приховати переглядач журналів",
"showGallery": "Показати галерею",
"previousImage": "Попереднє зображення",
"copyMetadataJson": "Скопіювати метадані JSON",
"flipVertically": "Перевернути по вертикалі",

File diff suppressed because it is too large Load Diff

View File

@@ -13,9 +13,6 @@
"settingsLabel": "設定",
"upload": "上傳",
"langArabic": "阿拉伯語",
"greenTheme": "綠色",
"lightTheme": "淺色",
"darkTheme": "深色",
"discordLabel": "Discord",
"nodesDesc": "使用Node生成圖像的系統正在開發中。敬請期待有關於這項功能的更新。",
"reportBugLabel": "回報錯誤",
@@ -33,6 +30,24 @@
"langBrPortuguese": "巴西葡萄牙語",
"langRussian": "俄語",
"langSpanish": "西班牙語",
"unifiedCanvas": "統一畫布"
"unifiedCanvas": "統一畫布",
"cancel": "取消",
"langHebrew": "希伯來語",
"txt2img": "文字轉圖片"
},
"accessibility": {
"modelSelect": "選擇模型",
"invokeProgressBar": "Invoke 進度條",
"uploadImage": "上傳圖片",
"reset": "重設",
"nextImage": "下一張圖片",
"previousImage": "上一張圖片",
"flipHorizontally": "水平翻轉",
"useThisParameter": "使用此參數",
"zoomIn": "放大",
"zoomOut": "縮小",
"flipVertically": "垂直翻轉",
"modifyConfig": "修改配置",
"menu": "選單"
}
}

View File

@@ -30,7 +30,7 @@ export const addBatchEnqueuedListener = () => {
id: 'batch-queued',
title: t('queue.batchQueued'),
description: t('queue.batchQueuedDesc', {
item_count: response.enqueued,
count: response.enqueued,
direction: arg.prepend ? t('queue.front') : t('queue.back'),
}),
duration: 1000,

View File

@@ -44,7 +44,7 @@ export const addCanvasMergedListener = () => {
}
const baseLayerRect = canvasBaseLayer.getClientRect({
relativeTo: canvasBaseLayer.getParent(),
relativeTo: canvasBaseLayer.getParent() ?? undefined,
});
const imageDTO = await dispatch(

View File

@@ -73,14 +73,9 @@ export const addModelSelectedListener = () => {
dispatch(
addToast(
makeToast({
title: t(
modelsCleared === 1
? 'toast.baseModelChangedCleared_one'
: 'toast.baseModelChangedCleared_many',
{
number: modelsCleared,
}
),
title: t('toast.baseModelChangedCleared', {
count: modelsCleared,
}),
status: 'warning',
})
)

View File

@@ -22,7 +22,8 @@ export type AppFeature =
| 'pauseQueue'
| 'resumeQueue'
| 'prependQueue'
| 'invocationCache';
| 'invocationCache'
| 'bulkDownload';
/**
* A disable-able Stable Diffusion feature
@@ -38,7 +39,8 @@ export type SDFeature =
| 'hires'
| 'lora'
| 'embedding'
| 'vae';
| 'vae'
| 'hrf';
/**
* Configuration options for the InvokeAI UI.
@@ -109,6 +111,14 @@ export type AppConfig = {
fineStep: number;
coarseStep: number;
};
hrfStrength: {
initial: number;
min: number;
sliderMax: number;
inputMax: number;
fineStep: number;
coarseStep: number;
};
dynamicPrompts: {
maxPrompts: {
initial: number;

View File

@@ -2,6 +2,7 @@ import { PopoverProps } from '@chakra-ui/react';
export type Feature =
| 'clipSkip'
| 'hrf'
| 'paramNegativeConditioning'
| 'paramPositiveConditioning'
| 'paramScheduler'

View File

@@ -45,7 +45,7 @@ const selector = createSelector(
return {
activeLayerColor,
activeLayerString: layer.charAt(0).toUpperCase() + layer.slice(1),
layer,
boundingBoxColor,
boundingBoxCoordinatesString: `(${roundToHundreth(
boxX
@@ -73,7 +73,7 @@ const selector = createSelector(
const IAICanvasStatusText = () => {
const {
activeLayerColor,
activeLayerString,
layer,
boundingBoxColor,
boundingBoxCoordinatesString,
boundingBoxDimensionsString,
@@ -116,7 +116,9 @@ const IAICanvasStatusText = () => {
style={{
color: activeLayerColor,
}}
>{`${t('unifiedCanvas.activeLayer')}: ${activeLayerString}`}</Box>
>{`${t('unifiedCanvas.activeLayer')}: ${t(
`unifiedCanvas.${layer}`
)}`}</Box>
<Box>{`${t('unifiedCanvas.canvasScale')}: ${canvasScaleString}%`}</Box>
{shouldPreserveMaskedArea && (
<Box
@@ -124,7 +126,7 @@ const IAICanvasStatusText = () => {
color: warningColor,
}}
>
Preserve Masked Area: On
{t('unifiedCanvas.preserveMaskedArea')}: {t('common.on')}
</Box>
)}
{shouldShowBoundingBox && (

View File

@@ -30,6 +30,7 @@ import {
isCanvasMaskLine,
} from './canvasTypes';
import { appSocketQueueItemStatusChanged } from 'services/events/actions';
import { queueApi } from 'services/api/endpoints/queue';
export const initialLayerState: CanvasLayerState = {
objects: [],
@@ -812,6 +813,20 @@ export const canvasSlice = createSlice({
);
}
});
builder.addMatcher(
queueApi.endpoints.clearQueue.matchFulfilled,
(state) => {
state.batchIds = [];
}
);
builder.addMatcher(
queueApi.endpoints.cancelByBatchIds.matchFulfilled,
(state, action) => {
state.batchIds = state.batchIds.filter(
(id) => !action.meta.arg.originalArgs.batch_ids.includes(id)
);
}
);
},
});

View File

@@ -11,31 +11,53 @@ import {
selectAllIPAdapters,
selectAllT2IAdapters,
selectControlAdapterIds,
selectValidControlNets,
selectValidIPAdapters,
selectValidT2IAdapters,
} from 'features/controlAdapters/store/controlAdaptersSlice';
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { Fragment, memo } from 'react';
import { useTranslation } from 'react-i18next';
import { FaPlus } from 'react-icons/fa';
import { useAddControlAdapter } from '../hooks/useAddControlAdapter';
import { useTranslation } from 'react-i18next';
const selector = createSelector(
[stateSelector],
({ controlAdapters }) => {
const activeLabel: string[] = [];
let isError = false;
const ipAdapterCount = selectAllIPAdapters(controlAdapters).length;
if (ipAdapterCount > 0) {
activeLabel.push(`${ipAdapterCount} IP`);
const enabledIPAdapterCount = selectAllIPAdapters(controlAdapters).filter(
(ca) => ca.isEnabled
).length;
const validIPAdapterCount = selectValidIPAdapters(controlAdapters).length;
if (enabledIPAdapterCount > 0) {
activeLabel.push(`${enabledIPAdapterCount} IP`);
}
if (enabledIPAdapterCount > validIPAdapterCount) {
isError = true;
}
const controlNetCount = selectAllControlNets(controlAdapters).length;
if (controlNetCount > 0) {
activeLabel.push(`${controlNetCount} ControlNet`);
const enabledControlNetCount = selectAllControlNets(controlAdapters).filter(
(ca) => ca.isEnabled
).length;
const validControlNetCount = selectValidControlNets(controlAdapters).length;
if (enabledControlNetCount > 0) {
activeLabel.push(`${enabledControlNetCount} ControlNet`);
}
if (enabledControlNetCount > validControlNetCount) {
isError = true;
}
const t2iAdapterCount = selectAllT2IAdapters(controlAdapters).length;
if (t2iAdapterCount > 0) {
activeLabel.push(`${t2iAdapterCount} T2I`);
const enabledT2IAdapterCount = selectAllT2IAdapters(controlAdapters).filter(
(ca) => ca.isEnabled
).length;
const validT2IAdapterCount = selectValidT2IAdapters(controlAdapters).length;
if (enabledT2IAdapterCount > 0) {
activeLabel.push(`${enabledT2IAdapterCount} T2I`);
}
if (enabledT2IAdapterCount > validT2IAdapterCount) {
isError = true;
}
const controlAdapterIds =
@@ -44,6 +66,7 @@ const selector = createSelector(
return {
controlAdapterIds,
activeLabel: activeLabel.join(', '),
isError, // TODO: Add some visual indicator that the control adapters are in an error state
};
},
defaultSelectorOptions
@@ -66,7 +89,10 @@ const ControlAdaptersCollapse = () => {
}
return (
<IAICollapse label="Control Adapters" activeLabel={activeLabel}>
<IAICollapse
label={t('controlnet.controlAdapter_other')}
activeLabel={activeLabel}
>
<Flex sx={{ flexDir: 'column', gap: 2 }}>
<ButtonGroup size="sm" w="full" justifyContent="space-between">
<IAIButton

View File

@@ -3,6 +3,7 @@ import {
Update,
createEntityAdapter,
createSlice,
isAnyOf,
} from '@reduxjs/toolkit';
import {
ControlNetModelParam,
@@ -544,3 +545,9 @@ export const {
} = controlAdaptersSlice.actions;
export default controlAdaptersSlice.reducer;
export const isAnyControlAdapterAdded = isAnyOf(
controlAdapterAdded,
controlAdapterAddedFromImage,
controlAdapterRecalled
);

View File

@@ -1,7 +1,9 @@
import { Badge, Flex } from '@chakra-ui/react';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
const AutoAddIcon = () => {
const { t } = useTranslation();
return (
<Flex
sx={{
@@ -15,7 +17,7 @@ const AutoAddIcon = () => {
variant="solid"
sx={{ bg: 'accent.400', _dark: { bg: 'accent.500' } }}
>
auto
{t('common.auto')}
</Badge>
</Flex>
);

View File

@@ -11,12 +11,15 @@ import { autoAddBoardIdChanged } from 'features/gallery/store/gallerySlice';
import { BoardId } from 'features/gallery/store/types';
import { MouseEvent, memo, useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { FaPlus } from 'react-icons/fa';
import { FaDownload, FaPlus } from 'react-icons/fa';
import { useBoardName } from 'services/api/hooks/useBoardName';
import { BoardDTO } from 'services/api/types';
import { menuListMotionProps } from 'theme/components/menu';
import GalleryBoardContextMenuItems from './GalleryBoardContextMenuItems';
import NoBoardContextMenuItems from './NoBoardContextMenuItems';
import { useFeatureStatus } from '../../../system/hooks/useFeatureStatus';
import { useBulkDownloadImagesMutation } from '../../../../services/api/endpoints/images';
import { addToast } from '../../../system/store/systemSlice';
type Props = {
board?: BoardDTO;
@@ -31,6 +34,7 @@ const BoardContextMenu = ({
setBoardToDelete,
children,
}: Props) => {
const { t } = useTranslation();
const dispatch = useAppDispatch();
const selector = useMemo(
@@ -49,17 +53,43 @@ const BoardContextMenu = ({
const { isAutoAdd, autoAssignBoardOnClick } = useAppSelector(selector);
const boardName = useBoardName(board_id);
const isBulkDownloadEnabled =
useFeatureStatus('bulkDownload').isFeatureEnabled;
const [bulkDownload] = useBulkDownloadImagesMutation();
const handleSetAutoAdd = useCallback(() => {
dispatch(autoAddBoardIdChanged(board_id));
}, [board_id, dispatch]);
const handleBulkDownload = useCallback(async () => {
try {
const response = await bulkDownload({
image_names: [],
board_id: board_id,
}).unwrap();
dispatch(
addToast({
title: t('gallery.preparingDownload'),
status: 'success',
...(response.response ? { description: response.response } : {}),
})
);
} catch {
dispatch(
addToast({
title: t('gallery.preparingDownloadFailed'),
status: 'error',
})
);
}
}, [t, board_id, bulkDownload, dispatch]);
const skipEvent = useCallback((e: MouseEvent<HTMLDivElement>) => {
e.preventDefault();
}, []);
const { t } = useTranslation();
return (
<IAIContextMenu<HTMLDivElement>
menuProps={{ size: 'sm', isLazy: true }}
@@ -81,6 +111,14 @@ const BoardContextMenu = ({
>
{t('boards.menuItemAutoAdd')}
</MenuItem>
{isBulkDownloadEnabled && (
<MenuItem
icon={<FaDownload />}
onClickCapture={handleBulkDownload}
>
{t('boards.downloadBoard')}
</MenuItem>
)}
{!board && <NoBoardContextMenuItems />}
{board && (
<GalleryBoardContextMenuItems

View File

@@ -8,20 +8,29 @@ import {
} from 'features/changeBoardModal/store/slice';
import { imagesToDeleteSelected } from 'features/deleteImageModal/store/slice';
import { memo, useCallback, useMemo } from 'react';
import { FaFolder, FaTrash } from 'react-icons/fa';
import { FaDownload, FaFolder, FaTrash } from 'react-icons/fa';
import { MdStar, MdStarBorder } from 'react-icons/md';
import {
useBulkDownloadImagesMutation,
useStarImagesMutation,
useUnstarImagesMutation,
} from '../../../../services/api/endpoints/images';
import { useFeatureStatus } from '../../../system/hooks/useFeatureStatus';
import { addToast } from '../../../system/store/systemSlice';
import { useTranslation } from 'react-i18next';
const MultipleSelectionMenuItems = () => {
const { t } = useTranslation();
const dispatch = useAppDispatch();
const selection = useAppSelector((state) => state.gallery.selection);
const customStarUi = useStore($customStarUI);
const isBulkDownloadEnabled =
useFeatureStatus('bulkDownload').isFeatureEnabled;
const [starImages] = useStarImagesMutation();
const [unstarImages] = useUnstarImagesMutation();
const [bulkDownload] = useBulkDownloadImagesMutation();
const handleChangeBoard = useCallback(() => {
dispatch(imagesToChangeSelected(selection));
@@ -40,6 +49,29 @@ const MultipleSelectionMenuItems = () => {
unstarImages({ imageDTOs: selection });
}, [unstarImages, selection]);
const handleBulkDownload = useCallback(async () => {
try {
const response = await bulkDownload({
image_names: selection.map((img) => img.image_name),
}).unwrap();
dispatch(
addToast({
title: t('gallery.preparingDownload'),
status: 'success',
...(response.response ? { description: response.response } : {}),
})
);
} catch {
dispatch(
addToast({
title: t('gallery.preparingDownloadFailed'),
status: 'error',
})
);
}
}, [t, selection, bulkDownload, dispatch]);
const areAllStarred = useMemo(() => {
return selection.every((img) => img.starred);
}, [selection]);
@@ -66,6 +98,11 @@ const MultipleSelectionMenuItems = () => {
{customStarUi ? customStarUi.on.text : `Star All`}
</MenuItem>
)}
{isBulkDownloadEnabled && (
<MenuItem icon={<FaDownload />} onClickCapture={handleBulkDownload}>
{t('gallery.downloadSelection')}
</MenuItem>
)}
<MenuItem icon={<FaFolder />} onClickCapture={handleChangeBoard}>
Change Board
</MenuItem>

View File

@@ -20,6 +20,7 @@ import BoardsList from './Boards/BoardsList/BoardsList';
import GalleryBoardName from './GalleryBoardName';
import GallerySettingsPopover from './GallerySettingsPopover';
import GalleryImageGrid from './ImageGrid/GalleryImageGrid';
import { useTranslation } from 'react-i18next';
const selector = createSelector(
[stateSelector],
@@ -34,6 +35,7 @@ const selector = createSelector(
);
const ImageGalleryContent = () => {
const { t } = useTranslation();
const resizeObserverRef = useRef<HTMLDivElement>(null);
const galleryGridRef = useRef<HTMLDivElement>(null);
const { galleryView } = useAppSelector(selector);
@@ -111,7 +113,7 @@ const ImageGalleryContent = () => {
leftIcon={<FaImages />}
data-testid="images-tab"
>
Images
{t('gallery.images')}
</Tab>
<Tab
as={IAIButton}
@@ -124,7 +126,7 @@ const ImageGalleryContent = () => {
leftIcon={<FaServer />}
data-testid="assets-tab"
>
Assets
{t('gallery.assets')}
</Tab>
</ButtonGroup>
</TabList>

View File

@@ -18,6 +18,7 @@ import ImageMetadataActions from './ImageMetadataActions';
import { useAppSelector } from '../../../../app/store/storeHooks';
import { configSelector } from '../../../system/store/configSelectors';
import { useTranslation } from 'react-i18next';
import ScrollableContent from 'features/nodes/components/sidePanel/ScrollableContent';
type ImageMetadataViewerProps = {
image: ImageDTO;
@@ -65,19 +66,32 @@ const ImageMetadataViewer = ({ image }: ImageMetadataViewerProps) => {
</Link>
</Flex>
<ImageMetadataActions metadata={metadata} />
<Tabs
variant="line"
sx={{ display: 'flex', flexDir: 'column', w: 'full', h: 'full' }}
sx={{
display: 'flex',
flexDir: 'column',
w: 'full',
h: 'full',
}}
>
<TabList>
<Tab>{t('metadata.recallParameters')}</Tab>
<Tab>{t('metadata.metadata')}</Tab>
<Tab>{t('metadata.imageDetails')}</Tab>
<Tab>{t('metadata.workflow')}</Tab>
</TabList>
<TabPanels>
<TabPanel>
{metadata ? (
<ScrollableContent>
<ImageMetadataActions metadata={metadata} />
</ScrollableContent>
) : (
<IAINoContentFallback label={t('metadata.noRecallParameters')} />
)}
</TabPanel>
<TabPanel>
{metadata ? (
<DataViewer data={metadata} label={t('metadata.metadata')} />

View File

@@ -9,6 +9,7 @@ import { memo } from 'react';
import { useFeatureStatus } from '../../system/hooks/useFeatureStatus';
import ParamLoraList from './ParamLoraList';
import ParamLoRASelect from './ParamLoraSelect';
import { useTranslation } from 'react-i18next';
const selector = createSelector(
stateSelector,
@@ -22,6 +23,7 @@ const selector = createSelector(
);
const ParamLoraCollapse = () => {
const { t } = useTranslation();
const { activeLabel } = useAppSelector(selector);
const isLoraEnabled = useFeatureStatus('lora').isFeatureEnabled;
@@ -31,7 +33,7 @@ const ParamLoraCollapse = () => {
}
return (
<IAICollapse label="LoRA" activeLabel={activeLabel}>
<IAICollapse label={t('modelManager.loraModels')} activeLabel={activeLabel}>
<Flex sx={{ flexDir: 'column', gap: 2 }}>
<ParamLoRASelect />
<ParamLoraList />

View File

@@ -0,0 +1,247 @@
import { RootState } from 'app/store/store';
import { NonNullableGraph } from 'features/nodes/types/types';
import {
DenoiseLatentsInvocation,
ResizeLatentsInvocation,
NoiseInvocation,
LatentsToImageInvocation,
Edge,
} from 'services/api/types';
import {
LATENTS_TO_IMAGE,
DENOISE_LATENTS,
NOISE,
MAIN_MODEL_LOADER,
METADATA_ACCUMULATOR,
LATENTS_TO_IMAGE_HRF,
DENOISE_LATENTS_HRF,
RESCALE_LATENTS,
NOISE_HRF,
VAE_LOADER,
} from './constants';
import { logger } from 'app/logging/logger';
// Copy certain connections from previous DENOISE_LATENTS to new DENOISE_LATENTS_HRF.
function copyConnectionsToDenoiseLatentsHrf(graph: NonNullableGraph): void {
const destinationFields = [
'vae',
'control',
'ip_adapter',
'metadata',
'unet',
'positive_conditioning',
'negative_conditioning',
];
const newEdges: Edge[] = [];
// Loop through the existing edges connected to DENOISE_LATENTS
graph.edges.forEach((edge: Edge) => {
if (
edge.destination.node_id === DENOISE_LATENTS &&
destinationFields.includes(edge.destination.field)
) {
// Add a similar connection to DENOISE_LATENTS_HRF
newEdges.push({
source: {
node_id: edge.source.node_id,
field: edge.source.field,
},
destination: {
node_id: DENOISE_LATENTS_HRF,
field: edge.destination.field,
},
});
}
});
graph.edges = graph.edges.concat(newEdges);
}
// Adds the high-res fix feature to the given graph.
export const addHrfToGraph = (
state: RootState,
graph: NonNullableGraph
): void => {
// Double check hrf is enabled.
if (
!state.generation.hrfEnabled ||
state.config.disabledSDFeatures.includes('hrf') ||
state.generation.model?.model_type === 'onnx' // TODO: ONNX support
) {
return;
}
const log = logger('txt2img');
const { vae } = state.generation;
const isAutoVae = !vae;
const hrfWidth = state.generation.hrfWidth;
const hrfHeight = state.generation.hrfHeight;
// Pre-existing (original) graph nodes.
const originalDenoiseLatentsNode = graph.nodes[DENOISE_LATENTS] as
| DenoiseLatentsInvocation
| undefined;
const originalNoiseNode = graph.nodes[NOISE] as NoiseInvocation | undefined;
// Original latents to image should pick this up.
const originalLatentsToImageNode = graph.nodes[LATENTS_TO_IMAGE] as
| LatentsToImageInvocation
| undefined;
// Check if originalDenoiseLatentsNode is undefined and log an error
if (!originalDenoiseLatentsNode) {
log.error('originalDenoiseLatentsNode is undefined');
return;
}
// Check if originalNoiseNode is undefined and log an error
if (!originalNoiseNode) {
log.error('originalNoiseNode is undefined');
return;
}
// Check if originalLatentsToImageNode is undefined and log an error
if (!originalLatentsToImageNode) {
log.error('originalLatentsToImageNode is undefined');
return;
}
// Change height and width of original noise node to initial resolution.
if (originalNoiseNode) {
originalNoiseNode.width = hrfWidth;
originalNoiseNode.height = hrfHeight;
}
// Define new nodes.
// Denoise latents node to be run on upscaled latents.
const denoiseLatentsHrfNode: DenoiseLatentsInvocation = {
type: 'denoise_latents',
id: DENOISE_LATENTS_HRF,
is_intermediate: originalDenoiseLatentsNode?.is_intermediate,
cfg_scale: originalDenoiseLatentsNode?.cfg_scale,
scheduler: originalDenoiseLatentsNode?.scheduler,
steps: originalDenoiseLatentsNode?.steps,
denoising_start: 1 - state.generation.hrfStrength,
denoising_end: 1,
};
// New base resolution noise node.
const hrfNoiseNode: NoiseInvocation = {
type: 'noise',
id: NOISE_HRF,
seed: originalNoiseNode?.seed,
use_cpu: originalNoiseNode?.use_cpu,
is_intermediate: originalNoiseNode?.is_intermediate,
};
const rescaleLatentsNode: ResizeLatentsInvocation = {
id: RESCALE_LATENTS,
type: 'lresize',
width: state.generation.width,
height: state.generation.height,
};
// New node to convert latents to image.
const latentsToImageHrfNode: LatentsToImageInvocation | undefined =
originalLatentsToImageNode
? {
type: 'l2i',
id: LATENTS_TO_IMAGE_HRF,
fp32: originalLatentsToImageNode?.fp32,
is_intermediate: originalLatentsToImageNode?.is_intermediate,
}
: undefined;
// Add new nodes to graph.
graph.nodes[LATENTS_TO_IMAGE_HRF] =
latentsToImageHrfNode as LatentsToImageInvocation;
graph.nodes[DENOISE_LATENTS_HRF] =
denoiseLatentsHrfNode as DenoiseLatentsInvocation;
graph.nodes[NOISE_HRF] = hrfNoiseNode as NoiseInvocation;
graph.nodes[RESCALE_LATENTS] = rescaleLatentsNode as ResizeLatentsInvocation;
// Connect nodes.
graph.edges.push(
{
// Set up rescale latents.
source: {
node_id: DENOISE_LATENTS,
field: 'latents',
},
destination: {
node_id: RESCALE_LATENTS,
field: 'latents',
},
},
// Set up new noise node
{
source: {
node_id: RESCALE_LATENTS,
field: 'height',
},
destination: {
node_id: NOISE_HRF,
field: 'height',
},
},
{
source: {
node_id: RESCALE_LATENTS,
field: 'width',
},
destination: {
node_id: NOISE_HRF,
field: 'width',
},
},
// Set up new denoise node.
{
source: {
node_id: RESCALE_LATENTS,
field: 'latents',
},
destination: {
node_id: DENOISE_LATENTS_HRF,
field: 'latents',
},
},
{
source: {
node_id: NOISE_HRF,
field: 'noise',
},
destination: {
node_id: DENOISE_LATENTS_HRF,
field: 'noise',
},
},
// Set up new latents to image node.
{
source: {
node_id: DENOISE_LATENTS_HRF,
field: 'latents',
},
destination: {
node_id: LATENTS_TO_IMAGE_HRF,
field: 'latents',
},
},
{
source: {
node_id: METADATA_ACCUMULATOR,
field: 'metadata',
},
destination: {
node_id: LATENTS_TO_IMAGE_HRF,
field: 'metadata',
},
},
{
source: {
node_id: isAutoVae ? MAIN_MODEL_LOADER : VAE_LOADER,
field: 'vae',
},
destination: {
node_id: LATENTS_TO_IMAGE_HRF,
field: 'vae',
},
}
);
copyConnectionsToDenoiseLatentsHrf(graph);
};

View File

@@ -2,6 +2,7 @@ import { NonNullableGraph } from 'features/nodes/types/types';
import {
CANVAS_OUTPUT,
LATENTS_TO_IMAGE,
LATENTS_TO_IMAGE_HRF,
METADATA_ACCUMULATOR,
NSFW_CHECKER,
SAVE_IMAGE,
@@ -82,6 +83,14 @@ export const addSaveImageNode = (
},
destination,
});
} else if (LATENTS_TO_IMAGE_HRF in graph.nodes) {
graph.edges.push({
source: {
node_id: LATENTS_TO_IMAGE_HRF,
field: 'image',
},
destination,
});
} else if (LATENTS_TO_IMAGE in graph.nodes) {
graph.edges.push({
source: {

View File

@@ -86,7 +86,7 @@ export const addT2IAdaptersToLinearGraph = (
graph.nodes[t2iAdapterNode.id] = t2iAdapterNode as T2IAdapterInvocation;
if (metadataAccumulator?.ipAdapters) {
if (metadataAccumulator?.t2iAdapters) {
// metadata accumulator only needs a control field - not the whole node
// extract what we need and add to the accumulator
const t2iAdapterField = omit(t2iAdapterNode, [

View File

@@ -6,6 +6,7 @@ import {
ONNXTextToLatentsInvocation,
} from 'services/api/types';
import { addControlNetToLinearGraph } from './addControlNetToLinearGraph';
import { addHrfToGraph } from './addHrfToGraph';
import { addIPAdapterToLinearGraph } from './addIPAdapterToLinearGraph';
import { addLoRAsToGraph } from './addLoRAsToGraph';
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
@@ -47,6 +48,10 @@ export const buildLinearTextToImageGraph = (
seamlessXAxis,
seamlessYAxis,
seed,
hrfWidth,
hrfHeight,
hrfStrength,
hrfEnabled: hrfEnabled,
} = state.generation;
const use_cpu = shouldUseCpuNoise;
@@ -254,6 +259,9 @@ export const buildLinearTextToImageGraph = (
ipAdapters: [], // populated in addIPAdapterToLinearGraph
t2iAdapters: [], // populated in addT2IAdapterToLinearGraph
clip_skip: clipSkip,
hrf_width: hrfEnabled ? hrfWidth : undefined,
hrf_height: hrfEnabled ? hrfHeight : undefined,
hrf_strength: hrfEnabled ? hrfStrength : undefined,
};
graph.edges.push({
@@ -287,6 +295,12 @@ export const buildLinearTextToImageGraph = (
addT2IAdaptersToLinearGraph(state, graph, DENOISE_LATENTS);
// High resolution fix.
// NOTE: Not supported for onnx models.
if (state.generation.hrfEnabled && !isUsingOnnxModel) {
addHrfToGraph(state, graph);
}
// NSFW & watermark - must be last thing added to graph
if (state.system.shouldUseNSFWChecker) {
// must add before watermarker!

View File

@@ -2,11 +2,14 @@
export const POSITIVE_CONDITIONING = 'positive_conditioning';
export const NEGATIVE_CONDITIONING = 'negative_conditioning';
export const DENOISE_LATENTS = 'denoise_latents';
export const DENOISE_LATENTS_HRF = 'denoise_latents_hrf';
export const LATENTS_TO_IMAGE = 'latents_to_image';
export const LATENTS_TO_IMAGE_HRF = 'latents_to_image_hrf';
export const SAVE_IMAGE = 'save_image';
export const NSFW_CHECKER = 'nsfw_checker';
export const WATERMARKER = 'invisible_watermark';
export const NOISE = 'noise';
export const NOISE_HRF = 'noise_hrf';
export const RANDOM_INT = 'rand_int';
export const RANGE_OF_SIZE = 'range_of_size';
export const ITERATE = 'iterate';
@@ -18,6 +21,7 @@ export const CLIP_SKIP = 'clip_skip';
export const IMAGE_TO_LATENTS = 'image_to_latents';
export const LATENTS_TO_LATENTS = 'latents_to_latents';
export const RESIZE = 'resize_image';
export const RESCALE_LATENTS = 'rescale_latents';
export const IMG2IMG_RESIZE = 'img2img_resize';
export const CANVAS_OUTPUT = 'canvas_output';
export const INPAINT_IMAGE = 'inpaint_image';

View File

@@ -6,10 +6,11 @@ import {
setAspectRatio,
setShouldLockAspectRatio,
} from 'features/parameters/store/generationSlice';
import i18next from 'i18next';
import { activeTabNameSelector } from '../../../../ui/store/uiSelectors';
const aspectRatios = [
{ name: 'Free', value: null },
{ name: i18next.t('parameters.aspectRatioFree'), value: null },
{ name: '2:3', value: 2 / 3 },
{ name: '16:9', value: 16 / 9 },
{ name: '1:1', value: 1 / 1 },

View File

@@ -0,0 +1,65 @@
import { Flex } from '@chakra-ui/react';
import { createSelector } from '@reduxjs/toolkit';
import { RootState, stateSelector } from 'app/store/store';
import { useAppSelector } from 'app/store/storeHooks';
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
import IAICollapse from 'common/components/IAICollapse';
import { useMemo } from 'react';
import ParamHrfStrength from './ParamHrfStrength';
import ParamHrfToggle from './ParamHrfToggle';
import ParamHrfWidth from './ParamHrfWidth';
import ParamHrfHeight from './ParamHrfHeight';
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
const selector = createSelector(
stateSelector,
(state: RootState) => {
const { hrfEnabled } = state.generation;
return { hrfEnabled };
},
defaultSelectorOptions
);
export default function ParamHrfCollapse() {
const isHRFFeatureEnabled = useFeatureStatus('hrf').isFeatureEnabled;
const { hrfEnabled } = useAppSelector(selector);
const activeLabel = useMemo(() => {
if (hrfEnabled) {
return 'On';
} else {
return 'Off';
}
}, [hrfEnabled]);
if (!isHRFFeatureEnabled) {
return null;
}
return (
<IAICollapse label="High Resolution Fix" activeLabel={activeLabel}>
<Flex sx={{ flexDir: 'column', gap: 2 }}>
<ParamHrfToggle />
{hrfEnabled && (
<Flex
sx={{
gap: 2,
p: 4,
borderRadius: 4,
flexDirection: 'column',
w: 'full',
bg: 'base.100',
_dark: {
bg: 'base.750',
},
}}
>
<ParamHrfWidth />
<ParamHrfHeight />
</Flex>
)}
{hrfEnabled && <ParamHrfStrength />}
</Flex>
</IAICollapse>
);
}

View File

@@ -0,0 +1,87 @@
import { createSelector } from '@reduxjs/toolkit';
import { stateSelector } from 'app/store/store';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
import IAISlider, { IAIFullSliderProps } from 'common/components/IAISlider';
import { roundToMultiple } from 'common/util/roundDownToMultiple';
import {
setHrfHeight,
setHrfWidth,
} from 'features/parameters/store/generationSlice';
import { memo, useCallback } from 'react';
function findPrevMultipleOfEight(n: number): number {
return Math.floor((n - 1) / 8) * 8;
}
const selector = createSelector(
[stateSelector],
({ generation, hotkeys, config }) => {
const { min, fineStep, coarseStep } = config.sd.height;
const { model, height, hrfHeight, aspectRatio, hrfEnabled } = generation;
const step = hotkeys.shift ? fineStep : coarseStep;
return {
model,
height,
hrfHeight,
min,
step,
aspectRatio,
hrfEnabled,
};
},
defaultSelectorOptions
);
type ParamHeightProps = Omit<
IAIFullSliderProps,
'label' | 'value' | 'onChange'
>;
const ParamHrfHeight = (props: ParamHeightProps) => {
const { height, hrfHeight, min, step, aspectRatio, hrfEnabled } =
useAppSelector(selector);
const dispatch = useAppDispatch();
const maxHrfHeight = Math.max(findPrevMultipleOfEight(height), min);
const handleChange = useCallback(
(v: number) => {
dispatch(setHrfHeight(v));
if (aspectRatio) {
const newWidth = roundToMultiple(v * aspectRatio, 8);
dispatch(setHrfWidth(newWidth));
}
},
[dispatch, aspectRatio]
);
const handleReset = useCallback(() => {
dispatch(setHrfHeight(maxHrfHeight));
if (aspectRatio) {
const newWidth = roundToMultiple(maxHrfHeight * aspectRatio, 8);
dispatch(setHrfWidth(newWidth));
}
}, [dispatch, maxHrfHeight, aspectRatio]);
return (
<IAISlider
label="Initial Height"
value={hrfHeight}
min={min}
step={step}
max={maxHrfHeight}
onChange={handleChange}
handleReset={handleReset}
withInput
withReset
withSliderMarks
sliderNumberInputProps={{ max: maxHrfHeight }}
isDisabled={!hrfEnabled}
{...props}
/>
);
};
export default memo(ParamHrfHeight);

View File

@@ -0,0 +1,64 @@
import { createSelector } from '@reduxjs/toolkit';
import { useAppSelector, useAppDispatch } from 'app/store/storeHooks';
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
import { memo, useCallback } from 'react';
import { stateSelector } from 'app/store/store';
import { setHrfStrength } from 'features/parameters/store/generationSlice';
import IAISlider from 'common/components/IAISlider';
const selector = createSelector(
[stateSelector],
({ generation, hotkeys, config }) => {
const { initial, min, sliderMax, inputMax, fineStep, coarseStep } =
config.sd.hrfStrength;
const { hrfStrength, hrfEnabled } = generation;
const step = hotkeys.shift ? fineStep : coarseStep;
return {
hrfStrength,
initial,
min,
sliderMax,
inputMax,
step,
hrfEnabled,
};
},
defaultSelectorOptions
);
const ParamHrfStrength = () => {
const { hrfStrength, initial, min, sliderMax, step, hrfEnabled } =
useAppSelector(selector);
const dispatch = useAppDispatch();
const handleHrfStrengthReset = useCallback(() => {
dispatch(setHrfStrength(initial));
}, [dispatch, initial]);
const handleHrfStrengthChange = useCallback(
(v: number) => {
dispatch(setHrfStrength(v));
},
[dispatch]
);
return (
<IAISlider
label="Denoising Strength"
aria-label="High Resolution Denoising Strength"
min={min}
max={sliderMax}
step={step}
value={hrfStrength}
onChange={handleHrfStrengthChange}
withSliderMarks
withInput
withReset
handleReset={handleHrfStrengthReset}
isDisabled={!hrfEnabled}
/>
);
};
export default memo(ParamHrfStrength);

View File

@@ -0,0 +1,27 @@
import { RootState } from 'app/store/store';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import IAISwitch from 'common/components/IAISwitch';
import { setHrfEnabled } from 'features/parameters/store/generationSlice';
import { ChangeEvent, useCallback } from 'react';
export default function ParamHrfToggle() {
const dispatch = useAppDispatch();
const hrfEnabled = useAppSelector(
(state: RootState) => state.generation.hrfEnabled
);
const handleHrfEnabled = useCallback(
(e: ChangeEvent<HTMLInputElement>) =>
dispatch(setHrfEnabled(e.target.checked)),
[dispatch]
);
return (
<IAISwitch
label="Enable High Resolution Fix"
isChecked={hrfEnabled}
onChange={handleHrfEnabled}
/>
);
}

View File

@@ -0,0 +1,84 @@
import { createSelector } from '@reduxjs/toolkit';
import { stateSelector } from 'app/store/store';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
import IAISlider, { IAIFullSliderProps } from 'common/components/IAISlider';
import { roundToMultiple } from 'common/util/roundDownToMultiple';
import {
setHrfHeight,
setHrfWidth,
} from 'features/parameters/store/generationSlice';
import { memo, useCallback } from 'react';
function findPrevMultipleOfEight(n: number): number {
return Math.floor((n - 1) / 8) * 8;
}
const selector = createSelector(
[stateSelector],
({ generation, hotkeys, config }) => {
const { min, fineStep, coarseStep } = config.sd.width;
const { model, width, hrfWidth, aspectRatio, hrfEnabled } = generation;
const step = hotkeys.shift ? fineStep : coarseStep;
return {
model,
width,
hrfWidth,
min,
step,
aspectRatio,
hrfEnabled,
};
},
defaultSelectorOptions
);
type ParamWidthProps = Omit<IAIFullSliderProps, 'label' | 'value' | 'onChange'>;
const ParamHrfWidth = (props: ParamWidthProps) => {
const { width, hrfWidth, min, step, aspectRatio, hrfEnabled } =
useAppSelector(selector);
const dispatch = useAppDispatch();
const maxHrfWidth = Math.max(findPrevMultipleOfEight(width), min);
const handleChange = useCallback(
(v: number) => {
dispatch(setHrfWidth(v));
if (aspectRatio) {
const newHeight = roundToMultiple(v / aspectRatio, 8);
dispatch(setHrfHeight(newHeight));
}
},
[dispatch, aspectRatio]
);
const handleReset = useCallback(() => {
dispatch(setHrfWidth(maxHrfWidth));
if (aspectRatio) {
const newHeight = roundToMultiple(maxHrfWidth / aspectRatio, 8);
dispatch(setHrfHeight(newHeight));
}
}, [dispatch, maxHrfWidth, aspectRatio]);
return (
<IAISlider
label="Initial Width"
value={hrfWidth}
min={min}
step={step}
max={maxHrfWidth}
onChange={handleChange}
handleReset={handleReset}
withInput
withReset
withSliderMarks
sliderNumberInputProps={{ max: maxHrfWidth }}
isDisabled={!hrfEnabled}
{...props}
/>
);
};
export default memo(ParamHrfWidth);

View File

@@ -7,6 +7,7 @@ import IAIMantineSelect from 'common/components/IAIMantineSelect';
import { vaePrecisionChanged } from 'features/parameters/store/generationSlice';
import { PrecisionParam } from 'features/parameters/types/parameterSchemas';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
const selector = createSelector(
stateSelector,
@@ -20,6 +21,7 @@ const selector = createSelector(
const DATA = ['fp16', 'fp32'];
const ParamVAEModelSelect = () => {
const { t } = useTranslation();
const dispatch = useAppDispatch();
const { vaePrecision } = useAppSelector(selector);
@@ -37,7 +39,7 @@ const ParamVAEModelSelect = () => {
return (
<IAIInformationalPopover feature="paramVAEPrecision">
<IAIMantineSelect
label="VAE Precision"
label={t('modelManager.vaePrecision')}
value={vaePrecision}
data={DATA}
onChange={handleChange}

View File

@@ -5,6 +5,7 @@ import { configChanged } from 'features/system/store/configSlice';
import { clamp } from 'lodash-es';
import { ImageDTO } from 'services/api/types';
import { isAnyControlAdapterAdded } from 'features/controlAdapters/store/controlAdaptersSlice';
import { clipSkipMap } from '../types/constants';
import {
CanvasCoherenceModeParam,
@@ -26,6 +27,10 @@ import {
} from '../types/parameterSchemas';
export interface GenerationState {
hrfHeight: HeightParam;
hrfWidth: WidthParam;
hrfEnabled: boolean;
hrfStrength: StrengthParam;
cfgScale: CfgScaleParam;
height: HeightParam;
img2imgStrength: StrengthParam;
@@ -68,6 +73,10 @@ export interface GenerationState {
}
export const initialGenerationState: GenerationState = {
hrfHeight: 64,
hrfWidth: 64,
hrfStrength: 0.75,
hrfEnabled: false,
cfgScale: 7.5,
height: 512,
img2imgStrength: 0.75,
@@ -270,6 +279,18 @@ export const generationSlice = createSlice({
setClipSkip: (state, action: PayloadAction<number>) => {
state.clipSkip = action.payload;
},
setHrfHeight: (state, action: PayloadAction<number>) => {
state.hrfHeight = action.payload;
},
setHrfWidth: (state, action: PayloadAction<number>) => {
state.hrfWidth = action.payload;
},
setHrfStrength: (state, action: PayloadAction<number>) => {
state.hrfStrength = action.payload;
},
setHrfEnabled: (state, action: PayloadAction<boolean>) => {
state.hrfEnabled = action.payload;
},
shouldUseCpuNoiseChanged: (state, action: PayloadAction<boolean>) => {
state.shouldUseCpuNoise = action.payload;
},
@@ -302,6 +323,15 @@ export const generationSlice = createSlice({
}
}
});
// TODO: This is a temp fix to reduce issues with T2I adapter having a different downscaling
// factor than the UNet. Hopefully we get an upstream fix in diffusers.
builder.addMatcher(isAnyControlAdapterAdded, (state, action) => {
if (action.payload.type === 't2i_adapter') {
state.width = roundToMultiple(state.width, 64);
state.height = roundToMultiple(state.height, 64);
}
});
},
});
@@ -345,6 +375,10 @@ export const {
setSeamlessXAxis,
setSeamlessYAxis,
setClipSkip,
setHrfHeight,
setHrfWidth,
setHrfStrength,
setHrfEnabled,
shouldUseCpuNoiseChanged,
setAspectRatio,
setShouldLockAspectRatio,

View File

@@ -210,6 +210,15 @@ export type HeightParam = z.infer<typeof zHeight>;
export const isValidHeight = (val: unknown): val is HeightParam =>
zHeight.safeParse(val).success;
/**
* Zod schema for resolution parameter
*/
export const zResolution = z.tuple([zWidth, zHeight]);
/**
* Type alias for resolution parameter, inferred from its zod schema
*/
export type ResolutionParam = z.infer<typeof zResolution>;
export const zBaseModel = z.enum([
'any',
'sd-1',

View File

@@ -60,9 +60,9 @@ const QueueButtonTooltipContent = ({ prepend = false }: Props) => {
)}
<StyledDivider />
<Text fontWeight={400} fontStyle="oblique 10deg">
Adding images to{' '}
{t('parameters.invoke.addingImagesTo')}{' '}
<Text as="span" fontWeight={600}>
{autoAddBoardName || 'Uncategorized'}
{autoAddBoardName || t('boards.uncategorized')}
</Text>
</Text>
</Flex>

View File

@@ -14,6 +14,7 @@ import { generationSelector } from 'features/parameters/store/generationSelector
import { uiSelector } from 'features/ui/store/uiSelectors';
import { memo } from 'react';
import ParamSDXLImg2ImgDenoisingStrength from './ParamSDXLImg2ImgDenoisingStrength';
import { useTranslation } from 'react-i18next';
const selector = createSelector(
[uiSelector, generationSelector],
@@ -29,10 +30,15 @@ const selector = createSelector(
);
const SDXLImageToImageTabCoreParameters = () => {
const { t } = useTranslation();
const { shouldUseSliders, activeLabel } = useAppSelector(selector);
return (
<IAICollapse label="General" activeLabel={activeLabel} defaultIsOpen={true}>
<IAICollapse
label={t('parameters.general')}
activeLabel={activeLabel}
defaultIsOpen={true}
>
<Flex
sx={{
flexDirection: 'column',

View File

@@ -12,6 +12,7 @@ import ParamSteps from 'features/parameters/components/Parameters/Core/ParamStep
import ParamSeedFull from 'features/parameters/components/Parameters/Seed/ParamSeedFull';
import { memo } from 'react';
import ParamSDXLImg2ImgDenoisingStrength from './ParamSDXLImg2ImgDenoisingStrength';
import { useTranslation } from 'react-i18next';
const selector = createSelector(
stateSelector,
@@ -27,10 +28,15 @@ const selector = createSelector(
);
const SDXLUnifiedCanvasTabCoreParameters = () => {
const { t } = useTranslation();
const { shouldUseSliders, activeLabel } = useAppSelector(selector);
return (
<IAICollapse label="General" activeLabel={activeLabel} defaultIsOpen={true}>
<IAICollapse
label={t('parameters.general')}
activeLabel={activeLabel}
defaultIsOpen={true}
>
<Flex
sx={{
flexDirection: 'column',

View File

@@ -2,6 +2,8 @@ import { Heading, Text } from '@chakra-ui/react';
import { useAppDispatch } from 'app/store/storeHooks';
import { controlAdaptersReset } from 'features/controlAdapters/store/controlAdaptersSlice';
import { useCallback, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { useGetQueueStatusQuery } from 'services/api/endpoints/queue';
import IAIButton from '../../../../common/components/IAIButton';
import {
useClearIntermediatesMutation,
@@ -12,6 +14,7 @@ import { addToast } from '../../store/systemSlice';
import StyledFlex from './StyledFlex';
export default function SettingsClearIntermediates() {
const { t } = useTranslation();
const dispatch = useAppDispatch();
const { data: intermediatesCount, refetch: updateIntermediatesCount } =
@@ -20,52 +23,62 @@ export default function SettingsClearIntermediates() {
const [clearIntermediates, { isLoading: isLoadingClearIntermediates }] =
useClearIntermediatesMutation();
const { data: queueStatus } = useGetQueueStatusQuery();
const hasPendingItems =
queueStatus &&
(queueStatus.queue.in_progress > 0 || queueStatus.queue.pending > 0);
const handleClickClearIntermediates = useCallback(() => {
if (hasPendingItems) {
return;
}
clearIntermediates()
.unwrap()
.then((response) => {
.then((clearedCount) => {
dispatch(controlAdaptersReset());
dispatch(resetCanvas());
dispatch(
addToast({
title: `Cleared ${response} intermediates`,
title: t('settings.intermediatesCleared', { count: clearedCount }),
status: 'info',
})
);
})
.catch(() => {
dispatch(
addToast({
title: t('settings.intermediatesClearedFailed'),
status: 'error',
})
);
});
}, [clearIntermediates, dispatch]);
}, [t, clearIntermediates, dispatch, hasPendingItems]);
useEffect(() => {
// update the count on mount
updateIntermediatesCount();
}, [updateIntermediatesCount]);
const buttonText = intermediatesCount
? `Clear ${intermediatesCount} Intermediate${
intermediatesCount > 1 ? 's' : ''
}`
: 'No Intermediates to Clear';
return (
<StyledFlex>
<Heading size="sm">Clear Intermediates</Heading>
<Heading size="sm">{t('settings.clearIntermediates')}</Heading>
<IAIButton
tooltip={
hasPendingItems ? t('settings.clearIntermediatesDisabled') : undefined
}
colorScheme="warning"
onClick={handleClickClearIntermediates}
isLoading={isLoadingClearIntermediates}
isDisabled={!intermediatesCount}
isDisabled={!intermediatesCount || hasPendingItems}
>
{buttonText}
{t('settings.clearIntermediatesWithCount', {
count: intermediatesCount ?? 0,
})}
</IAIButton>
<Text fontWeight="bold">
Clearing intermediates will reset your Canvas and ControlNet state.
</Text>
<Text variant="subtext">
Intermediate images are byproducts of generation, different from the
result images in the gallery. Clearing intermediates will free disk
space.
</Text>
<Text variant="subtext">Your gallery images will not be deleted.</Text>
<Text fontWeight="bold">{t('settings.clearIntermediatesDesc1')}</Text>
<Text variant="subtext">{t('settings.clearIntermediatesDesc2')}</Text>
<Text variant="subtext">{t('settings.clearIntermediatesDesc3')}</Text>
</StyledFlex>
);
}

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