psychedelicious
689dc30f87
feat(ui): tweak pagination buttons
...
- Fix off-by-one error when going to last page
- Update component to have minimal/no layout shift
2024-06-27 13:48:40 +10:00
psychedelicious
1f22f6ae02
feat(ui): iterate on dynamic gallery limit
...
- Simplify the gallery layout
- Set an initial gallery limit to load _some_ images immediately.
- Refactor the resize observer to use the actual rendered image component to calculate the number of images per row/col. This prevents inaccuracies caused by image padding that could result in the wrong number of images.
- Debounce the limit update to not thrash teh API
- Use absolute positioning trick to ensure the gallery container is always exactly the right size
- Minimum of `imagesPerRow` images loaded at all times
2024-06-27 13:48:40 +10:00
psychedelicious
9c931d9ca0
fix(ui): gallery content overflow
...
This is one of those unexpected CSS quirks. Flex containers need min-width or min-height for their children to not overflow. Add `minH={0}` to gallery container.
2024-06-27 13:48:40 +10:00
Mary Hipp
e0a241fa4f
wip change limit based on size of gallery
2024-06-27 13:48:40 +10:00
Mary Hipp
6a4b4ee340
trying to invalidate all the tags
2024-06-27 13:48:40 +10:00
Mary Hipp
488bf21925
fix single pagers
2024-06-27 13:48:40 +10:00
Mary Hipp
c9c39c02b6
handle generations coming in, fix pagination to use total from list query so it updates as that changes
2024-06-27 13:48:40 +10:00
Mary Hipp
5101dc4bef
some cleanup, add page buttons
2024-06-27 13:48:40 +10:00
Mary Hipp
98c77a3ed1
pull in spencers work
2024-06-27 13:48:40 +10:00
psychedelicious
4fca62680d
Update invokeai_version.py
2024-06-27 10:41:01 +10:00
Ryan Dick
9a3b8c6fcb
Fix handling of init_timestep in StableDiffusionGeneratorPipeline and improve its documentation.
2024-06-26 12:51:51 -04:00
Ryan Dick
bd74b84cc5
Revert "Remove the redundant init_timestep parameter that was being passed around. It is simply the first element of the timesteps array."
...
This reverts commit fa40061eca
.
2024-06-26 12:51:51 -04:00
Brandon Rising
dc23bebebf
Run ruff
2024-06-26 21:46:59 +10:00
Kent Keirsey
38b6f90c02
Update prevention exception message
2024-06-26 21:46:59 +10:00
Ryan Dick
cd9dfefe3c
Fix inpainting mask shape assertions.
2024-06-25 11:31:52 -07:00
Ryan Dick
b9946e50f9
Use image-space tile dimensions on the TiledMultiDiffusionDenoiseLatents invocation. This is more natural for many users.
2024-06-25 11:31:52 -07:00
Ryan Dick
06f49a30f6
Mark TiledMultiDiffusionDenoiseLatents as a Beta node.
2024-06-25 11:31:52 -07:00
Ryan Dick
e1af78c702
Make the tile_overlap input to MultiDiffusion *strictly* control the amount of overlap rather than being a lower bound.
2024-06-25 11:31:52 -07:00
Ryan Dick
c5588e1ff7
Add TODO comment explaining why some schedulers do not interact well with MultiDiffusion.
2024-06-25 11:31:52 -07:00
Ryan Dick
07ac292680
Consolidate _region_step() function - the separation wasn't really adding any value.
2024-06-25 11:31:52 -07:00
Ryan Dick
7c032ea604
(minor) Fix some documentation typos.
2024-06-25 11:31:52 -07:00
Ryan Dick
c5ee415607
Add progress image callbacks to TiledMultiDiffusionDenoiseLatentsInvocation.
2024-06-25 11:31:52 -07:00
Ryan Dick
fa40061eca
Remove the redundant init_timestep parameter that was being passed around. It is simply the first element of the timesteps array.
2024-06-25 11:31:52 -07:00
Ryan Dick
7cafd78d6e
Revert "Expose vae_decode(...) as a staticmethod on LatentsToImageInvocation."
...
This reverts commit 753239b48d
.
2024-06-25 11:31:52 -07:00
Ryan Dick
8a43656cf9
(minor) Address a few small TODOs.
2024-06-25 11:31:52 -07:00
Ryan Dick
bd3b6ca11b
Remove TiledStableDiffusionRefineInvocation. It was a proof-of-concept that has been superseded by TiledMultiDiffusionDenoiseLatents.
2024-06-25 11:31:52 -07:00
Ryan Dick
ceae5fe1db
(minor) typo
2024-06-25 11:31:52 -07:00
Ryan Dick
25067e4f0d
Delete rough notes.
2024-06-25 11:31:52 -07:00
Ryan Dick
fb0aaa3e6d
Fix advanced scheduler behaviour in MultiDiffusionPipeline.
2024-06-25 11:31:52 -07:00
Ryan Dick
c22526b9d0
Fix handling of stateful schedulers in MultiDiffusionPipeline.
2024-06-25 11:31:52 -07:00
Ryan Dick
c881882f73
Connect TiledMultiDiffusionDenoiseLatents to the MultiDiffusionPipeline backend.
2024-06-25 11:31:52 -07:00
Ryan Dick
36473fc52a
Remove regional conditioning logic from MultiDiffusionPipeline - it is not yet supported.
2024-06-25 11:31:52 -07:00
Ryan Dick
b9964ecc4a
Initial (untested) implementation of MultiDiffusionPipeline.
2024-06-25 11:31:52 -07:00
Ryan Dick
051af802fe
Remove inpainting support from MultiDiffusionPipeline.
2024-06-25 11:31:52 -07:00
Ryan Dick
3ff2e558d9
Remove IP-Adapter and T2I-Adapter support from MultiDiffusionPipeline.
2024-06-25 11:31:52 -07:00
Ryan Dick
fc187c9253
Document plan for the rest of the MultiDiffusion implementation.
2024-06-25 11:31:52 -07:00
Ryan Dick
605f460c7d
Add detailed docstring to latents_from_embeddings().
2024-06-25 11:31:52 -07:00
Ryan Dick
60d1e686d8
Copy StableDiffusionGeneratorPipeline as a starting point for a new MultiDiffusionPipeline.
2024-06-25 11:31:52 -07:00
Ryan Dick
22704dd542
Simplify handling of inpainting models. Improve the in-code documentation around inpainting.
2024-06-25 11:31:52 -07:00
Ryan Dick
875673c9ba
Minor tidying of latents_from_embeddings(...).
2024-06-25 11:31:52 -07:00
Ryan Dick
f604575862
Consolidate latents_from_embeddings(...) and generate_latents_from_embeddings(...) into a single function.
2024-06-25 11:31:52 -07:00
Ryan Dick
80a67572f1
Fix invocation name of tiled_multi_diffusion_denoise_latents.
2024-06-25 11:31:52 -07:00
Ryan Dick
60ac937698
Improve clarity of comments regarded when 'noise' and 'latents' are expected to be set.
2024-06-25 11:31:52 -07:00
Ryan Dick
1e41949a02
Fix static check errors on imports in diffusers_pipeline.py.
2024-06-25 11:31:52 -07:00
Ryan Dick
5f0e330ed2
Remove a condition for handling inpainting models that never resolves to True. The same logic is already applied earlier by AddsMaskLatents.
2024-06-25 11:31:52 -07:00
Ryan Dick
9dd779b414
Add clarifying comment to explain why noise might be None in latents_from_embedding().
2024-06-25 11:31:52 -07:00
Ryan Dick
fa183025ac
Remove unused are_like_tensors() function.
2024-06-25 11:31:52 -07:00
Ryan Dick
d3c85aa91a
Remove unused StableDiffusionGeneratorPipeline.use_ip_adapter member.
2024-06-25 11:31:52 -07:00
Ryan Dick
82619602a5
Remove unused StableDiffusionGeneratorPipeline.control_model.
2024-06-25 11:31:52 -07:00
Ryan Dick
196f3b721d
Stricter typing for the is_gradient_mask: bool.
2024-06-25 11:31:52 -07:00
Ryan Dick
244c28859d
Fix typing of control_data to reflect that it can be None.
2024-06-25 11:31:52 -07:00
Ryan Dick
40ae174c41
Fix typing of timesteps and init_timestep.
2024-06-25 11:31:52 -07:00
Ryan Dick
afaebdf151
Fix typing to reflect that the callback arg to latents_from_embeddings is never None.
2024-06-25 11:31:52 -07:00
Ryan Dick
d661517d94
Move seed above optional params.
2024-06-25 11:31:52 -07:00
Ryan Dick
82a69a54ac
Simplify handling of AddsMaskGuidance, and fix some related type errors.
2024-06-25 11:31:52 -07:00
Ryan Dick
ffc28176fe
Remove unused num_inference_steps.
2024-06-25 11:31:52 -07:00
Ryan Dick
230e205541
WIP TiledMultiDiffusionDenoiseLatents. Updated parameter list and first half of the logic.
2024-06-25 11:31:52 -07:00
Ryan Dick
7e94350351
Tidy DenoiseLatentsInvocation.prep_control_data(...) and fix some type errors.
2024-06-25 11:31:52 -07:00
Ryan Dick
c4e8549c73
Make DenoiseLatentsInvocation.prep_control_data(...) a staticmethod so that it can be called externally.
2024-06-25 11:31:52 -07:00
Ryan Dick
350a210835
Copy TiledStableDiffusionRefineInvocation as a starting point for TiledMultiDiffusionDenoiseLatents.py
2024-06-25 11:31:52 -07:00
Ryan Dick
ed781dbb0c
Change tiling strategy to make TiledStableDiffusionRefineInvocation work with more tile shapes and overlaps.
2024-06-25 11:31:52 -07:00
Ryan Dick
b41ea963e7
Expose a few more params from TiledStableDiffusionRefineInvocation.
2024-06-25 11:31:52 -07:00
Ryan Dick
da5d105049
Add support for LoRA models in TiledStableDiffusionRefineInvocation.
2024-06-25 11:31:52 -07:00
Ryan Dick
5301770525
Add naive ControlNet support to TiledStableDiffusionRefineInvocation
2024-06-25 11:31:52 -07:00
Ryan Dick
d08e405017
Fix ControlNetModel type hint import source.
2024-06-25 11:31:52 -07:00
Ryan Dick
534640ccde
Rough prototype of TiledStableDiffusionRefineInvocation is working.
2024-06-25 11:31:52 -07:00
Ryan Dick
d5ab8cab5c
WIP - TiledStableDiffusionRefine
2024-06-25 11:31:52 -07:00
Ryan Dick
4767301ad3
Minor improvements to LatentsToImageInvocation type hints.
2024-06-25 11:31:52 -07:00
Ryan Dick
21d7ca45e6
Expose vae_decode(...) as a staticmethod on LatentsToImageInvocation.
2024-06-25 11:31:52 -07:00
Ryan Dick
020e8eb413
Fix return type of prepare_noise_and_latents(...).
2024-06-25 11:31:52 -07:00
Ryan Dick
3d49541c09
Make init_scheduler() a staticmethod on DenoiseLatentsInvocation so that it can be called externally.
2024-06-25 11:31:52 -07:00
Ryan Dick
1ef266845a
Only allow a single positive/negative prompt conditioning input for tiled refine.
2024-06-25 11:31:52 -07:00
Ryan Dick
a37589ca5f
WIP on TiledStableDiffusionRefine
2024-06-25 11:31:52 -07:00
Ryan Dick
171a505f5e
Convert several methods in DenoiseLatentsInvocation to staticmethods so that they can be called externally.
2024-06-25 11:31:52 -07:00
Ryan Dick
8004a0d5f5
Simplify the logic in prepare_noise_and_latents(...).
2024-06-25 11:31:52 -07:00
Ryan Dick
610a1fd611
Split out the prepare_noise_and_latents(...) logic in DenoiseLatentsInvocation so that it can be called from other invocations.
2024-06-25 11:31:52 -07:00
Ryan Dick
43108eec13
(minor) Add a TODO note to get_scheduler(...).
2024-06-25 11:31:52 -07:00
Lincoln Stein
b03073d888
[MM] Add support for probing and loading SDXL VAE checkpoint files ( #6524 )
...
* add support for probing and loading SDXL VAE checkpoint files
* broaden regexp probe for SDXL VAEs
---------
Co-authored-by: Lincoln Stein <lstein@gmail.com>
2024-06-20 02:57:27 +00:00
steffylo
a43d602f16
fix(queue): add clear_queue_on_startup config to clear problematic queues
2024-06-19 11:39:25 +10:00
Ryan Dick
79ceac2f82
(minor) Use SilenceWarnings as a decorator rather than a context manager to save an indentation level.
2024-06-18 15:06:22 -04:00
Ryan Dick
8e47e005a7
Tidy SilenceWarnings context manager:
...
- Fix type errors
- Enable SilenceWarnings to be used as both a context manager and a decorator
- Remove duplicate implementation
- Check the initial verbosity on __enter__() rather than __init__()
2024-06-18 15:06:22 -04:00
Ryan Dick
d13aafb514
Tidy denoise_latents.py imports to all use absolute import paths.
2024-06-18 15:06:22 -04:00
Brandon Rising
63a7e19dbf
Run ruff
2024-06-18 10:38:29 -04:00
Brandon Rising
fbc5a8ec65
Ignore validation on improperly formatted hashes (pytest)
2024-06-18 10:38:29 -04:00
Brandon Rising
8ce6e4540e
Run ruff
2024-06-18 10:38:29 -04:00
Brandon Rising
f14f377ede
Update validator list
2024-06-18 10:38:29 -04:00
Brandon Rising
1925f83f5e
Update validator list
2024-06-18 10:38:29 -04:00
Brandon Rising
3a5ad6d112
Update validator list
2024-06-18 10:38:29 -04:00
Brandon Rising
41a6bb45f3
Initial functionality
2024-06-18 10:38:29 -04:00
psychedelicious
cd70937b7f
feat(api): improved model install confirmation page styling & messaging
2024-06-17 10:51:08 +10:00
psychedelicious
f002bca2fa
feat(ui): handle new model_install_download_started
event
...
When a model install is initiated from outside the client, we now trigger the model manager tab's model install list to update.
- Handle new `model_install_download_started` event
- Handle `model_install_download_complete` event (this event is not new but was never handled)
- Update optimistic updates/cache invalidation logic to efficiently update the model install list
2024-06-17 10:07:10 +10:00
psychedelicious
56771de856
feat(ui): add redux actions for model_install_download_started
event
2024-06-17 09:52:46 +10:00
psychedelicious
c11478a94a
chore(ui): typegen
2024-06-17 09:51:18 +10:00
psychedelicious
fb694b3e17
feat(app): add model_install_download_started
event
...
Previously, we used `model_install_download_progress` for both download starting and progressing. When handling this event, we don't know which actual thing it represents.
Add `model_install_download_started` event to explicitly represent a model download started event.
2024-06-17 09:50:25 +10:00
psychedelicious
1bc98abc76
docs(ui): explain model install events
2024-06-17 09:33:46 +10:00
chainchompa
7f03b04b2f
Merge branch 'main' into chainchompa/model-install-deeplink
2024-06-14 17:16:25 -04:00
chainchompa
4029972530
formatting
2024-06-14 17:15:55 -04:00
chainchompa
328f160e88
refetch model installs when a new model install starts
2024-06-14 17:09:07 -04:00
chainchompa
aae318425d
added route for installing huggingface model from model marketplace
2024-06-14 17:08:39 -04:00
Ryan Dick
785bb1d9e4
Fix all comparisons against the DEFAULT_PRECISION constant. DEFAULT_PRECISION is a torch.dtype. Previously, it was compared to a str in a number of places where it would always resolve to False. This is a bugfix that results in a change to the default behavior. In practice, this will not change the behavior for many users, because it only causes a change in behavior if a users has configured float32 as their default precision.
2024-06-14 11:26:10 -07:00
Lincoln Stein
a3cb5da130
Improve RAM<->VRAM memory copy performance in LoRA patching and elsewhere ( #6490 )
...
* allow model patcher to optimize away the unpatching step when feasible
* remove lazy_offloading functionality
* allow model patcher to optimize away the unpatching step when feasible
* remove lazy_offloading functionality
* do not save original weights if there is a CPU copy of state dict
* Update invokeai/backend/model_manager/load/load_base.py
Co-authored-by: Ryan Dick <ryanjdick3@gmail.com>
* documentation fixes requested during penultimate review
* add non-blocking=True parameters to several torch.nn.Module.to() calls, for slight performance increases
* fix ruff errors
* prevent crash on non-cuda-enabled systems
---------
Co-authored-by: Lincoln Stein <lstein@gmail.com>
Co-authored-by: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com>
Co-authored-by: Ryan Dick <ryanjdick3@gmail.com>
2024-06-13 17:10:03 +00:00
blessedcoolant
568a4844f7
fix: other recursive imports
2024-06-10 04:12:20 -07:00
blessedcoolant
b1e56e2485
fix: SchedulerOutput not being imported correctly
2024-06-10 04:12:20 -07:00
Lincoln Stein
7d19af2caa
Merge branch 'main' into lstein/feat/simple-mm2-api
2024-06-08 18:55:06 -04:00
Ryan Dick
52c0c4a32f
Rename latent.py -> denoise_latents.py.
2024-06-07 09:28:42 -04:00
Ryan Dick
8f1afc032a
Move SchedulerInvocation to a new file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
854bca668a
Move CreateDenoiseMaskInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
fea9013cad
Move CreateGradientMaskInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
045caddee1
Move LatentsToImageInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
58697141bf
Move ImageToLatentsInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
5e419dbb56
Move ScaleLatentsInvocation and ResizeLatentsInvocation to their own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
595096bdcf
Move BlendLatentsInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
ed03d281e6
Move CropLatentsCoreInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
Ryan Dick
0b37496c57
Move IdealSizeInvocation to its own file. No functional changes.
2024-06-07 09:28:42 -04:00
psychedelicious
fde58ce0a3
Merge remote-tracking branch 'origin/main' into lstein/feat/simple-mm2-api
2024-06-07 14:23:41 +10:00
Lincoln Stein
dc134935c8
replace load_and_cache_model() with load_remote_model() and load_local_odel()
2024-06-07 14:12:16 +10:00
Lincoln Stein
f81b8bc9f6
add support for generic loading of diffusers directories
2024-06-07 13:54:30 +10:00
psychedelicious
6d067e56f2
fix(ui): on page load, if CA processed image no longer exists, re-process it
2024-06-07 10:32:28 +10:00
Lincoln Stein
2871676f79
LoRA patching optimization ( #6439 )
...
* allow model patcher to optimize away the unpatching step when feasible
* remove lazy_offloading functionality
* allow model patcher to optimize away the unpatching step when feasible
* remove lazy_offloading functionality
* do not save original weights if there is a CPU copy of state dict
* Update invokeai/backend/model_manager/load/load_base.py
Co-authored-by: Ryan Dick <ryanjdick3@gmail.com>
* documentation fixes added during penultimate review
---------
Co-authored-by: Lincoln Stein <lstein@gmail.com>
Co-authored-by: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com>
Co-authored-by: Ryan Dick <ryanjdick3@gmail.com>
2024-06-06 13:53:35 +00:00
psychedelicious
1c5c3cdbd6
tidy(ui): organize control layers konva logic
...
- More comments, docstrings
- Move things into saner, less-coupled locations
2024-06-06 07:45:13 +10:00
psychedelicious
3db69af220
refactor(ui): generalize stage event handlers
...
Create intermediary nanostores for values required by the event handlers. This allows the event handlers to be purely imperative, with no reactivity: instead of recreating/setting the handlers when a dependent piece of state changes, we use nanostores' imperative API to access dependent state.
For example, some handlers depend on brush size. If we used the standard declarative `useSelector` API, we'd need to recreate the event handler callback each time the brush size changed. This can be costly.
An intermediate `$brushSize` nanostore is set in a `useLayoutEffect()`, which responds to changes to the redux store. Then, in the event handler, we use the imperative API to access the brush size: `$brushSize.get()`.
This change allows the event handler logic to be shared with the pending canvas v2, and also more easily tested. It's a noticeable perf improvement, too, especially when changing brush size.
2024-06-06 07:45:13 +10:00
psychedelicious
1823e446ac
fix(ui): conditionally render CL preview
...
This fixes an issue where it sometimes gets out of sync, and fixes some konva errors.
2024-06-06 07:45:13 +10:00
psychedelicious
311e44ad19
tidy(ui): clean up control layers renderers, docstrings
2024-06-06 07:45:13 +10:00
jstnlowe
848ca79da8
Changed translated labels to static suffixes, cleanup.
2024-06-05 14:45:43 +10:00
jstnlowe
9cba0dfac9
Providing fileName string directly to DataViewer as suggested
2024-06-05 14:45:43 +10:00
jstnlowe
37b1f21bcf
... and the workflow
2024-06-05 14:45:43 +10:00
jstnlowe
b2e005f6b5
Just realized we might want the same change made for the Graph JSON
2024-06-05 14:45:43 +10:00
jstnlowe
52aac954c0
Prefixed JSON filenames with the image UUID #6469
2024-06-05 14:45:43 +10:00
psychedelicious
ff01ceae99
Update invokeai_version.py
2024-06-05 05:53:19 +10:00
hugoalh
669d92d8db
translationBot(ui): update translation (Chinese (Traditional))
...
Currently translated at 14.1% (179 of 1261 strings)
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hant/
Translation: InvokeAI/Web UI
2024-06-05 00:08:03 +10:00
Ettore Atalan
2903060154
translationBot(ui): update translation (German)
...
Currently translated at 67.0% (834 of 1243 strings)
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/de/
Translation: InvokeAI/Web UI
2024-06-05 00:08:03 +10:00
gallegonovato
4af8699a00
translationBot(ui): update translation (Spanish)
...
Currently translated at 34.3% (427 of 1243 strings)
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2024-06-05 00:08:03 +10:00
Bruno Castillejo
71fedd1a07
translationBot(ui): update translation (Spanish)
...
Currently translated at 34.3% (427 of 1243 strings)
Co-authored-by: Bruno Castillejo <soybrunocastillejo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/es/
Translation: InvokeAI/Web UI
2024-06-05 00:08:03 +10:00
Riccardo Giovanetti
6bb1189c88
translationBot(ui): update translation (Italian)
...
Currently translated at 98.5% (1243 of 1261 strings)
translationBot(ui): update translation (Italian)
Currently translated at 98.5% (1243 of 1261 strings)
translationBot(ui): update translation (Italian)
Currently translated at 98.5% (1225 of 1243 strings)
translationBot(ui): update translation (Italian)
Currently translated at 98.5% (1225 of 1243 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
2024-06-05 00:08:03 +10:00
Васянатор
c7546bc82e
translationBot(ui): update translation (Russian)
...
Currently translated at 100.0% (1261 of 1261 strings)
translationBot(ui): update translation (Russian)
Currently translated at 100.0% (1243 of 1243 strings)
Co-authored-by: Васянатор <ilabulanov339@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/
Translation: InvokeAI/Web UI
2024-06-05 00:08:03 +10:00
psychedelicious
14372e3818
fix(nodes): blend latents with weight=0 with DPMSolverSDEScheduler
...
- Pass the seed from `latents_a` to the output latents. Fixed an issue where using `BlendLatentsInvocation` could result in different outputs during denoising even when the alpha or slerp weight was 0.
## Explanation
`LatentsField` has an optional `seed` field. During denoising, if this `seed` field is not present, we **fall back to 0 for the seed**. The seed is used during denoising in a few ways:
1. Initializing the scheduler.
The seed is used in two places in `invokeai/app/invocations/latent.py`.
The `get_scheduler()` utility function has special handling for `DPMSolverSDEScheduler`, which appears to need a seed for deterministic outputs.
`DenoiseLatentsInvocation.init_scheduler()` has special handling for schedulers that accept a generator - the generator needs to be seeded in a particular way. At the time of this commit, these are the Invoke-supported schedulers that need this seed:
- DDIMScheduler
- DDPMScheduler
- DPMSolverMultistepScheduler
- EulerAncestralDiscreteScheduler
- EulerDiscreteScheduler
- KDPM2AncestralDiscreteScheduler
- LCMScheduler
- TCDScheduler
2. Adding noise during inpainting.
If a mask is used for denoising, and we are not using an inpainting model, we add noise to the unmasked area. If, for some reason, we have a mask but no noise, the seed is used to add noise.
I wonder if we should instead assert that if a mask is provided, we also have noise.
This is done in `invokeai/backend/stable_diffusion/diffusers_pipeline.py` in `StableDiffusionGeneratorPipeline.latents_from_embeddings()`.
When we create noise to be used in denoising, we are expected to set `LatentsField.seed` to the seed used to create the noise. This introduces some awkwardness when we manipulate any "latents" that will be used for denoising. We have to pass the seed along for every operation.
If the wrong seed or no seed is passed along, we can get unexpected outputs during denoising. One notable case relates to blending latents (slerping tensors).
If we slerp two noise tensors (`LatentsField`s) _without_ passing along the seed from the source latents, when we denoise with a seed-dependent scheduler*, the schedulers use the fallback seed of 0 and we get the wrong output. This is most obvious when slerping with a weight of 0, in which case we expect the exact same output after denoising.
*It looks like only the DPMSolver* schedulers are affected, but I haven't tested all of them.
Passing the seed along in the output fixes this issue.
2024-06-05 00:02:52 +10:00
psychedelicious
64523c4b1b
fix(ui): handle concat when recalling prompts
...
This required some minor reworking of of the logic to recall multiple items. I split this into a utility function that includes some special handling for concat.
Closes #6478
2024-06-04 06:01:01 +10:00
psychedelicious
89a764a359
fix(ui): improve model metadata parsing fallback
...
When the model in metadata's key no longer exists, fall back to fetching by name, base and type. This was the intention all along but the logic was never put in place.
2024-06-04 06:01:01 +10:00
Lincoln Stein
756108f6bd
Update invokeai/app/invocations/latent.py
...
Co-authored-by: Ryan Dick <ryanjdick3@gmail.com>
2024-06-03 11:41:47 -07:00
Lincoln Stein
68d628dc14
use zip to iterate over image prompts and adapters
2024-06-03 11:41:47 -07:00
Lincoln Stein
93c9852142
fix ruff
2024-06-03 11:41:47 -07:00
Lincoln Stein
493f81788c
added a few comments to document design choices
2024-06-03 11:41:47 -07:00
Lincoln Stein
f13427e3f4
refactor redundant code and fix typechecking errors
2024-06-03 11:41:47 -07:00
Lincoln Stein
e28737fc8b
add check for congruence between # of ip_adapters and image_prompts
2024-06-03 11:41:47 -07:00
Lincoln Stein
7391c126d3
handle case of no IP adapters requested
2024-06-03 11:41:47 -07:00
Lincoln Stein
1c59fce6ad
reduce peak VRAM memory usage of IP adapter
2024-06-03 11:41:47 -07:00
psychedelicious
a9962fd104
chore: ruff
2024-06-03 11:53:20 +10:00
psychedelicious
e7513f6088
docs(mm): add comment in move_model_to_device
2024-06-03 10:56:04 +10:00
psychedelicious
c7f22b6a3b
tidy(mm): remove extraneous docstring
...
It's inherited from the ABC.
2024-06-03 10:46:28 +10:00
psychedelicious
99413256ce
tidy(mm): pass enum member instead of string
2024-06-03 10:43:09 +10:00
psychedelicious
aa9695e377
tidy(download): _download_job
-> _multifile_job
2024-06-03 10:15:53 +10:00
psychedelicious
c58ac1e80d
tidy(mm): minor formatting
2024-06-03 10:11:08 +10:00
psychedelicious
6cc6a45274
feat(download): add type for callback_name
...
Just a bit of typo protection in lieu of full type safety for these methods, which is difficult due to the typing of `DownloadEventHandler`.
2024-06-03 10:05:52 +10:00
psychedelicious
521f907f58
tidy(nodes): infill
...
- Set `self._context=context` instead of passing it as an arg
2024-06-03 09:43:25 +10:00
psychedelicious
ccdecf21a3
tidy(nodes): cnet processors
...
- Set `self._context=context` instead of changing the type signature of `run_processor`
- Tidy a few typing things
2024-06-03 09:41:17 +10:00
psychedelicious
b124440023
tidy(mm): move load_model_from_url
from mm to invocation context
2024-06-03 08:51:21 +10:00
psychedelicious
e3a70e598e
docs(app): simplify docstring in invocation_context
2024-06-03 08:40:29 +10:00
psychedelicious
132bbf330a
tidy(app): remove unnecessary changes in invocation_context
...
- Any mypy issues are a misconfiguration of mypy
- Use simple conditionals instead of ternaries
- Consistent & standards-compliant docstring formatting
- Use `dict` instead of `typing.Dict`
2024-06-03 08:35:23 +10:00
Lincoln Stein
2276f327e5
Merge branch 'main' into lstein/feat/simple-mm2-api
2024-06-02 09:45:31 -04:00
psychedelicious
6b24424727
feat(ui): add help icon to compare toolbar
2024-06-02 15:30:00 +10:00
psychedelicious
7153d846a9
feat(ui): add hotkey to cycle compare modes
2024-06-02 15:30:00 +10:00
psychedelicious
9a0b77ad38
feat(ui): add hotkey to swap comparison images
2024-06-02 15:30:00 +10:00
psychedelicious
220d45967e
fix(ui): typo
2024-06-02 15:30:00 +10:00
psychedelicious
038a482ef0
feat(ui): rework visibility conditions for image viewer
2024-06-02 15:30:00 +10:00
psychedelicious
c325ad3432
feat(ui): add hotkey hint to exit compare button
2024-06-02 15:30:00 +10:00
psychedelicious
449bc4dbe5
feat(ui): abstract out and share logic between comparisons
2024-06-02 15:30:00 +10:00
psychedelicious
34d68a3663
feat(ui): hover comparison mode
2024-06-02 15:30:00 +10:00
psychedelicious
8bb9571485
feat(ui): tweak slider divider styling
2024-06-02 15:30:00 +10:00
psychedelicious
08bcc71e99
fix(ui): workflows fit on load
2024-06-02 15:30:00 +10:00
psychedelicious
ff2b2fad83
feat(ui): revise drop zones
...
The main viewer area has two drop zones:
- Select for Viewer
- Select for Compare
These do what you'd imagine they would do.
2024-06-02 15:30:00 +10:00
psychedelicious
0f0a6852f1
fix(ui): make compare image scale with first image when using contain fit
2024-06-02 15:30:00 +10:00
psychedelicious
745140fa6b
feat(ui): "first image"/"second image" -> "viewer image"/"compare image"
2024-06-02 15:30:00 +10:00
psychedelicious
405fc46888
feat(ui): z/esc first exit compare before closing viewer
2024-06-02 15:30:00 +10:00
psychedelicious
ca728ca29f
fix(ui): ignore context menu in slider view
...
It doesn't make sense to allow context menu here, because the context menu will technically be on a div and not an image - there won't be any image options there.
2024-06-02 15:30:00 +10:00
psychedelicious
d0fca53e67
fix(ui): only clear comparison image on alt click of gallery image
...
This logic can't e in the reducer else it applies to dnd events which isn't right
2024-06-02 15:30:00 +10:00
psychedelicious
ad9740d72d
feat(ui): alt-click comparison image exits compare
2024-06-02 15:30:00 +10:00
psychedelicious
1c9c982b63
feat(ui): use appropriate cursor on slider
2024-06-02 15:30:00 +10:00
psychedelicious
3cfd2755c2
fix(ui): when changing viewer state, always clear compare image
2024-06-02 15:30:00 +10:00
psychedelicious
8ea4067f83
feat(ui): rework compare toolbar
2024-06-02 15:30:00 +10:00
psychedelicious
940de6a5c5
fix(ui): allow drop of currently-selected image for compare
2024-06-02 15:30:00 +10:00
psychedelicious
dd74e89127
fix(ui): close context menu on click select for compare
2024-06-02 15:30:00 +10:00
psychedelicious
69da67e920
fix(ui): dnd on board
...
Copy-paste error broke this
2024-06-02 15:30:00 +10:00
psychedelicious
76b1f241d7
fix(ui): useGalleryNavigation callback typing issue
2024-06-02 15:30:00 +10:00
psychedelicious
0e5336d8fa
feat(ui): rework comparison activation, add hotkeys
2024-06-02 15:30:00 +10:00
psychedelicious
3501636018
feat(ui): add fill mode for slider comparison
2024-06-02 15:30:00 +10:00
psychedelicious
e4ce188500
feat(ui): image selection gallery state & tweaks
2024-06-02 15:30:00 +10:00
psychedelicious
e976571fba
build(ui): remove unused dep
2024-06-02 15:30:00 +10:00
psychedelicious
0da36c1238
feat(ui): use IAIDndImage for compare mode
2024-06-02 15:30:00 +10:00
psychedelicious
4ef8cbd9d0
fix(ui): use isValidDrop in imageDropped listener
...
It was possible for a drop event to be invalid but still processed. Fixed by slightly changing the signature of isValidDrop.
2024-06-02 15:30:00 +10:00
psychedelicious
8f8ddd620b
feat(ui): add comparison modes, side-by-side view
2024-06-02 15:30:00 +10:00
psychedelicious
1af53aed60
feat(ui): fix image comparison slider resizing/aspect ratio jank
2024-06-02 15:30:00 +10:00
psychedelicious
7a4bbd092e
feat(ui): revised image comparison slider
...
Should work for any components and image now.
2024-06-02 15:30:00 +10:00
psychedelicious
72bbcb2d94
feat(ui): slider working for all aspect ratios
2024-06-02 15:30:00 +10:00
psychedelicious
c2eef93476
feat(ui): wip slider implementations
2024-06-02 15:30:00 +10:00
psychedelicious
a983f27aad
fix(ui): update types
2024-05-30 12:03:38 +10:00
psychedelicious
7cb32d3d83
chore(ui): typegen
2024-05-30 12:03:38 +10:00
psychedelicious
ac56ab79a7
fix(app): add dynamic validator to AnyInvocation & AnyInvocationOutput
...
This fixes the tests and slightly changes output types.
2024-05-30 12:03:38 +10:00
psychedelicious
50d3030471
feat(app): dynamic type adapters for invocations & outputs
...
Keep track of whether or not the typeadapter needs to be updated. Allows for dynamic invocation and output unions.
2024-05-30 12:03:38 +10:00
psychedelicious
5beec8211a
feat(api): sort openapi schemas
...
Reduces the constant changes to the frontend client types due to inconsistent ordering of pydantic models.
2024-05-30 12:03:38 +10:00
psychedelicious
5a4d10467b
feat(ui): use updated types
2024-05-30 12:03:38 +10:00