Commit Graph

2384 Commits

Author SHA1 Message Date
psychedelicious
b6e9cd4fe2 feat(ui): show cursor on drag previews 2023-09-21 09:29:57 -04:00
psychedelicious
6d1057c560 fix(ui): skip firing collision detection on dnd when droppable scrolled out
Requires some additional logic in the collision detection algorithm.

Closes #4621
2023-09-21 09:29:57 -04:00
psychedelicious
aa4b56baf2 feat(ui): enable control adapters on image drop
- Dropping/uploading an image on control adapter enables it (controlnet & ip adapter)
- The image components are always enabled to allow this
2023-09-21 14:50:55 +10:00
psychedelicious
02c087ee37 feat(ui): hide clipskip on sdxl; do not add to metadata
Hide it until #4624 is ready
2023-09-21 14:10:44 +10:00
psychedelicious
28e6a7139b fix(ui): add control adapters to canvas coherence pass 2023-09-21 13:07:15 +10:00
psychedelicious
1625854eaf fix(nodes): fix ip-adapter field positioning on workflow editor 2023-09-20 21:52:29 -04:00
CrypticWit
f87b042162
feat(nodes): Center pasted nodes at mouse location (#4595)
* Initial commit.  Feature works, but code might need some cleanup

* Cleaned up diff

* Made mousePosition a XYPosition again so its nicely typed

* Fixed yarn issues

* Paste now properly takes node width/height into account when pasting

* feat(ui): use react's types in the `onMouseMove` `reactflow` handler

* feat(ui): use refs to access `reactflow`'s DOM elements

* feat(ui): use a ref to store cursor position in nodes

---------

Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
2023-09-21 11:16:15 +10:00
psychedelicious
2b08d9e53b feat(ui): disable queue-related buttons when disconnected 2023-09-20 20:07:50 -04:00
psychedelicious
8954953eca fix(ui): no duplicate network requests on app startup 2023-09-20 20:07:50 -04:00
psychedelicious
e78b36a9f7 feat(ui): render input components for polymorphic fields
Polymorphic fields now render the appropriate input component for their base type.

For example, float polymorphics will render the number input box.

You no longer need to specify ui_type to force it to display.

TODO: The UI *may* break if a list is provided as the default value for a polymorphic field.
2023-09-21 10:00:17 +10:00
psychedelicious
7fecebf7db feat(ui): add greyscale invoke logo to invoke button when as icon 2023-09-20 19:30:17 -04:00
Jennifer Player
21de74fac4 set default for informational popups to be disabled 2023-09-20 17:43:22 -04:00
Jennifer Player
d066bc6d19 wrap control net button with div to add width 2023-09-20 15:44:15 -04:00
Kent Keirsey
f4c895257a
Merge branch 'main' into maryhipp/informational-popover 2023-09-20 13:32:06 -04:00
Mary Hipp
10af5a26f2 update component to not use selectFromResult 2023-09-20 13:31:50 -04:00
chainchompa
1088adeb0a
Merge branch 'main' into maryhipp/informational-popover 2023-09-20 13:28:22 -04:00
Mary Hipp
b2fe24c401 restore text of Invoke button 2023-09-20 13:07:42 -04:00
Jennifer Player
5075e9c899 fix more merge conflicts 2023-09-20 10:56:12 -04:00
psychedelicious
9faa53ceb1
feat(ui): consolidate advanced params (#4599) 2023-09-21 00:19:31 +10:00
psychedelicious
32672cfeda
ui: misc small fixes (#4600)
* feat(ui): tweak queue UI components

* fix(ui): manually dispatch queue status query on queue item status change

RTK Query occasionally aborts the query that occurs when the tag is invalidated, especially if multples of them fire in rapid succession.

This resulted in the queue status and progress bar sometimes not reseting when the queue finishes its last item.

Manually dispatch the query now to get around this. Eventually should probably move this to a socket so we don't need to keep responding to socket with HTTP requests. Just send ti directly via socket

* chore(ui): remove errant console.logs

* fix(ui): do not accumulate node outputs in outputs area

* fix(ui): fix merge issue

---------

Co-authored-by: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com>
2023-09-21 00:15:39 +10:00
psychedelicious
b5266f89ad
fix(ui): fallback to null for invalid metadata values (#4575) 2023-09-20 14:02:58 +00:00
Jennifer Player
7a3b467ce0 fixed merge conflicts 2023-09-20 10:00:11 -04:00
psychedelicious
bdfdf854fc fix: canvas not working on queue
Add `batch_id` to outbound events. This necessitates adding it to both `InvocationContext` and `InvocationQueueItem`. This allows the canvas to receive images.

When the user enqueues a batch on the canvas, it is expected that all images from that batch are directed to the canvas.

The simplest, most flexible solution is to add the `batch_id` to the invocation context-y stuff. Then everything knows what batch it came from, and we can have the canvas pick up images associated with its list of canvas `batch_id`s.
2023-09-20 09:57:10 -04:00
psychedelicious
1c38cce16d feat(ui): add confirmation dialog box to clear queue button 2023-09-20 09:26:55 -04:00
psychedelicious
b7938d9ca9
feat: queued generation (#4502)
* fix(config): fix typing issues in `config/`

`config/invokeai_config.py`:
- use `Optional` for things that are optional
- fix typing of `ram_cache_size()` and `vram_cache_size()`
- remove unused and incorrectly typed method `autoconvert_path`
- fix types and logic for `parse_args()`, in which `InvokeAIAppConfig.initconf` *must* be a `DictConfig`, but function would allow it to be set as a `ListConfig`, which presumably would cause issues elsewhere

`config/base.py`:
- use `cls` for first arg of class methods
- use `Optional` for things that are optional
- fix minor type issue related to setting of `env_prefix`
- remove unused `add_subparser()` method, which calls `add_parser()` on an `ArgumentParser` (method only available on the `_SubParsersAction` object, which is returned from ArgumentParser.add_subparsers()`)

* feat: queued generation and batches

Due to a very messy branch with broad addition of `isort` on `main` alongside it, some git surgery was needed to get an agreeable git history. This commit represents all of the work on queued generation. See PR for notes.

* chore: flake8, isort, black

* fix(nodes): fix incorrect service stop() method

* fix(nodes): improve names of a few variables

* fix(tests): fix up tests after changes to batches/queue

* feat(tests): add unit tests for session queue helper functions

* feat(ui): dynamic prompts is always enabled

* feat(queue): add queue_status_changed event

* feat(ui): wip queue graphs

* feat(nodes): move cleanup til after invoker startup

* feat(nodes): add cancel_by_batch_ids

* feat(ui): wip batch graphs & UI

* fix(nodes): remove `Batch.batch_id` from required

* fix(ui): cleanup and use fixedCacheKey for all mutations

* fix(ui): remove orphaned nodes from canvas graphs

* fix(nodes): fix cancel_by_batch_ids result count

* fix(ui): only show cancel batch tooltip when batches were canceled

* chore: isort

* fix(api): return `[""]` when dynamic prompts generates no prompts

Just a simple fallback so we always have a prompt.

* feat(ui): dynamicPrompts.combinatorial is always on

There seems to be little purpose in using the combinatorial generation for dynamic prompts. I've disabled it by hiding it from the UI and defaulting combinatorial to true. If we want to enable it again in the future it's straightforward to do so.

* feat: add queue_id & support logic

* feat(ui): fix upscale button

It prepends the upscale operation to queue

* feat(nodes): return queue item when enqueuing a single graph

This facilitates one-off graph async workflows in the client.

* feat(ui): move controlnet autoprocess to queue

* fix(ui): fix non-serializable DOMRect in redux state

* feat(ui): QueueTable performance tweaks

* feat(ui): update queue list

Queue items expand to show the full queue item. Just as JSON for now.

* wip threaded session_processor

* feat(nodes,ui): fully migrate queue to session_processor

* feat(nodes,ui): add processor events

* feat(ui): ui tweaks

* feat(nodes,ui): consolidate events, reduce network requests

* feat(ui): cleanup & abstract queue hooks

* feat(nodes): optimize batch permutation

Use a generator to do only as much work as is needed.

Previously, though we only ended up creating exactly as many queue items as was needed, there was still some intermediary work that calculated *all* permutations. When that number was very high, the system had a very hard time and used a lot of memory.

The logic has been refactored to use a generator. Additionally, the batch validators are optimized to return early and use less memory.

* feat(ui): add seed behaviour parameter

This dynamic prompts parameter allows the seed to be randomized per prompt or per iteration:
- Per iteration: Use the same seed for all prompts in a single dynamic prompt expansion
- Per prompt: Use a different seed for every single prompt

"Per iteration" is appropriate for exploring a the latents space with a stable starting noise, while "Per prompt" provides more variation.

* fix(ui): remove extraneous random seed nodes from linear graphs

* fix(ui): fix controlnet autoprocess not working when queue is running

* feat(queue): add timestamps to queue status updates

Also show execution time in queue list

* feat(queue): change all execution-related events to use the `queue_id` as the room, also include `queue_item_id` in InvocationQueueItem

This allows for much simpler handling of queue items.

* feat(api): deprecate sessions router

* chore(backend): tidy logging in `dependencies.py`

* fix(backend): respect `use_memory_db`

* feat(backend): add `config.log_sql` (enables sql trace logging)

* feat: add invocation cache

Supersedes #4574

The invocation cache provides simple node memoization functionality. Nodes that use the cache are memoized and not re-executed if their inputs haven't changed. Instead, the stored output is returned.

## Results

This feature provides anywhere some significant to massive performance improvement.

The improvement is most marked on large batches of generations where you only change a couple things (e.g. different seed or prompt for each iteration) and low-VRAM systems, where skipping an extraneous model load is a big deal.

## Overview

A new `invocation_cache` service is added to handle the caching. There's not much to it.

All nodes now inherit a boolean `use_cache` field from `BaseInvocation`. This is a node field and not a class attribute, because specific instances of nodes may want to opt in or out of caching.

The recently-added `invoke_internal()` method on `BaseInvocation` is used as an entrypoint for the cache logic.

To create a cache key, the invocation is first serialized using pydantic's provided `json()` method, skipping the unique `id` field. Then python's very fast builtin `hash()` is used to create an integer key. All implementations of `InvocationCacheBase` must provide a class method `create_key()` which accepts an invocation and outputs a string or integer key.

## In-Memory Implementation

An in-memory implementation is provided. In this implementation, the node outputs are stored in memory as python classes. The in-memory cache does not persist application restarts.

Max node cache size is added as `node_cache_size` under the `Generation` config category.

It defaults to 512 - this number is up for discussion, but given that these are relatively lightweight pydantic models, I think it's safe to up this even higher.

Note that the cache isn't storing the big stuff - tensors and images are store on disk, and outputs include only references to them.

## Node Definition

The default for all nodes is to use the cache. The `@invocation` decorator now accepts an optional `use_cache: bool` argument to override the default of `True`.

Non-deterministic nodes, however, should set this to `False`. Currently, all random-stuff nodes, including `dynamic_prompt`, are set to `False`.

The field name `use_cache` is now effectively a reserved field name and possibly a breaking change if any community nodes use this as a field name. In hindsight, all our reserved field names should have been prefixed with underscores or something.

## One Gotcha

Leaf nodes probably want to opt out of the cache, because if they are not cached, their outputs are not saved again.

If you run the same graph multiple times, you only end up with a single image output, because the image storage side-effects are in the `invoke()` method, which is bypassed if we have a cache hit.

## Linear UI

The linear graphs _almost_ just work, but due to the gotcha, we need to be careful about the final image-outputting node. To resolve this, a `SaveImageInvocation` node is added and used in the linear graphs.

This node is similar to `ImagePrimitive`, except it saves a copy of its input image, and has `use_cache` set to `False` by default.

This is now the leaf node in all linear graphs, and is the only node in those graphs with `use_cache == False` _and_ the only node with `is_intermedate == False`.

## Workflow Editor

All nodes now have a footer with a new `Use Cache [ ]` checkbox. It defaults to the value set by the invocation in its python definition, but can be changed by the user.

The workflow/node validation logic has been updated to migrate old workflows to use the new default values for `use_cache`. Users may still want to review the settings that have been chosen. In the event of catastrophic failure when running this migration, the default value of `True` is applied, as this is correct for most nodes.

Users should consider saving their workflows after loading them in and having them updated.

## Future Enhancements - Callback

A future enhancement would be to provide a callback to the `use_cache` flag that would be run as the node is executed to determine, based on its own internal state, if the cache should be used or not.

This would be useful for `DynamicPromptInvocation`, where the deterministic behaviour is determined by the `combinatorial: bool` field.

## Future Enhancements - Persisted Cache

Similar to how the latents storage is backed by disk, the invocation cache could be persisted to the database or disk. We'd need to be very careful about deserializing outputs, but it's perhaps worth exploring in the future.

* fix(ui): fix queue list item width

* feat(nodes): do not send the whole node on every generator progress

* feat(ui): strip out old logic related to sessions

Things like `isProcessing` are no longer relevant with queue. Removed them all & updated everything be appropriate for queue. May be a few little quirks I've missed...

* feat(ui): fix up param collapse labels

* feat(ui): click queue count to go to queue tab

* tidy(queue): update comment, query format

* feat(ui): fix progress bar when canceling

* fix(ui): fix circular dependency

* feat(nodes): bail on node caching logic if `node_cache_size == 0`

* feat(nodes): handle KeyError on node cache pop

* feat(nodes): bypass cache codepath if caches is disabled

more better no do thing

* fix(ui): reset api cache on connect/disconnect

* feat(ui): prevent enqueue when no prompts generated

* feat(ui): add queue controls to workflow editor

* feat(ui): update floating buttons & other incidental UI tweaks

* fix(ui): fix missing/incorrect translation keys

* fix(tests): add config service to mock invocation services

invoking needs access to `node_cache_size` to occur

* optionally remove pause/resume buttons from queue UI

* option to disable prepending

* chore(ui): remove unused file

* feat(queue): remove `order_id` entirely, `item_id` is now an autoinc pk

---------

Co-authored-by: Mary Hipp <maryhipp@Marys-MacBook-Air.local>
2023-09-20 15:09:24 +10:00
Ryan Dick
8b44d83859 yarn build 2023-09-19 14:03:22 -04:00
Kent Keirsey
0b6315de71
Merge branch 'main' into feat/ip-adapter 2023-09-19 13:49:20 -04:00
Ryan Dick
382e2139bd Clear incompatible IP-Adapter when base model changes in the Linear UI. 2023-09-18 12:57:23 -04:00
Jennifer Player
d7ebe3f048 Merge branch 'maryhipp/informational-popover' of https://github.com/invoke-ai/InvokeAI into maryhipp/informational-popover 2023-09-18 11:03:06 -04:00
Jennifer Player
5c2bdf626b fix coherence copy 2023-09-18 11:03:02 -04:00
Jennifer Player
390a1c9fbb add in compositing settings header info popups 2023-09-18 11:01:43 -04:00
Jennifer Player
c46d9b8768 fix ts error in build 2023-09-18 10:31:50 -04:00
chainchompa
ef8d9843dd
Merge branch 'main' into maryhipp/informational-popover 2023-09-18 10:16:16 -04:00
Jennifer Player
dc2e1a42bc add param negative conditioning tooltip 2023-09-18 09:12:03 -04:00
psychedelicious
1869874433 chore(ui): lint 2023-09-18 16:01:20 +10:00
psychedelicious
94f16b1c69 feat(ui): provide feedback when recalling invalid lora 2023-09-18 16:01:20 +10:00
psychedelicious
cc0482ae8b feat(ui): simplify lora recall check 2023-09-18 16:01:20 +10:00
Mary Hipp
fdf9833c39 add toast 2023-09-18 16:01:20 +10:00
Mary Hipp
5a961bb58e first pass to recall LoRAs 2023-09-18 16:01:20 +10:00
blessedcoolant
231b7a5000 fix: Upload not working correctly on the ip Adapter image upload 2023-09-17 12:08:35 +12:00
blessedcoolant
11c501fc80 fix: Upload issue with the ip adapter image uploader 2023-09-17 11:58:15 +12:00
blessedcoolant
7be5743011 feat: Add IP Adapter Begin & End Percent to Linear UI 2023-09-17 11:53:05 +12:00
blessedcoolant
3e813ead1f chore: extract the adapter info initial state 2023-09-16 10:59:19 -04:00
blessedcoolant
820ec08e9a feat: Update Control Adapter Collapse active status to reflect IP Adapter 2023-09-16 10:59:19 -04:00
blessedcoolant
4dd289b337 feat: Handle IP Adapter Image being reset on being deleted. 2023-09-16 10:59:19 -04:00
blessedcoolant
b60b1e359e fix: Decrease the size of the IP Adapter Image Reset Button 2023-09-16 10:59:19 -04:00
blessedcoolant
208286e97a wip: Improve the IP Adapter UI 2023-09-16 10:59:19 -04:00
blessedcoolant
f7b64304ae wip: Add IP Adapter To Linear UI 2023-09-16 10:59:19 -04:00
blessedcoolant
834751e877 Merge branch 'main' into feat/ip-adapter 2023-09-16 07:06:46 +12:00
chainchompa
e7a10d310f
Merge branch 'main' into maryhipp/informational-popover 2023-09-15 14:52:57 -04:00
blessedcoolant
682d6998bc
Merge branch 'main' into moretranslation 2023-09-16 06:52:24 +12:00
Jennifer Player
2ce07a4730 popovers updates 2023-09-15 14:48:36 -04:00
Jennifer Player
45d5ab20ec remove individual popover components 2023-09-15 14:36:36 -04:00
Kent Keirsey
b75c56768d Unmasked default 2023-09-15 13:52:11 -04:00
Ryan Dick
b57acb7353 Merge branch 'main' into feat/ip-adapter 2023-09-15 13:15:25 -04:00
chainchompa
7bf7c16a5d
Merge branch 'main' into maryhipp/informational-popover 2023-09-15 13:12:25 -04:00
Jennifer Player
fcea65770f added optional popovers for users to learn more about each setting 2023-09-15 10:37:05 -04:00
mickr777
273271f091 Merge branch 'moretranslation' of https://github.com/mickr777/InvokeAI into moretranslation 2023-09-15 14:14:04 +10:00
mickr777
54dc912c83 Revert some test Changes 2023-09-15 14:13:54 +10:00
mickr777
571f50adf7
Merge branch 'main' into moretranslation 2023-09-15 14:06:26 +10:00
mickr777
368bd6f778 Prettier Fixes 2023-09-15 14:04:28 +10:00
mickr777
7481251127 More Translations and Fixes 2023-09-15 13:58:48 +10:00
Ryan Dick
990ce9a1da Lookup IP-Adapter linked image encoder from disk instead of storing in model config metadata. 2023-09-14 23:06:57 -04:00
psychedelicious
604fc006b1 fix(ui): construct openapi url from window.location.origin 2023-09-14 23:06:39 -04:00
psychedelicious
704e016f05 feat(ui): disable immutable redux check
The immutable and serializable checks for redux can cause substantial performance issues. The immutable check in particular is pretty heavy. It's only run in dev mode, but this and really slow down the already-slower performance of dev mode.

The most important one for us is serializable, which has far less of a performance impact.

The immutable check is largely redundant because we use immer-backed RTK for everything and immer gives us confidence there.

Disable the immutable check, leaving serializable in.
2023-09-14 22:02:29 -04:00
mickr777
a1ef079d1f
Merge branch 'main' into moretranslation 2023-09-15 11:34:48 +10:00
psychedelicious
34a09cb4ca fix(ui): fix send to canvas crash
A few weeks back, we changed how the canvas scales in response to changes in window/panel size.

This introduced a bug where if we the user hadn't already clicked the canvas tab once to initialize the stage elements, the stage's dimensions were zero, then the calculation of the stage's scale ends up zero, then something is divided by that zero and Konva dies.

This is only a problem on Chromium browsers - somehow Firefox handles it gracefully.

Now, when calculating the stage scale, never return a 0 - if it's a zero, return 1 instead. This is enough to fix the crash, but the image ends up centered on the top-left corner of the stage (the origin of the canvas).

Because the canvas elements are not initialized at this point (we haven't switched tabs yet), the stage dimensions fall back to (0,0). This means the center of the stage is also (0,0) - so the image is centered on (0,0), the top-left corner of the stage.

To fix this, we need to ensure we:
- Change to the canvas tab before actually setting the image, so the stage elements are able to initialize
- Use `flushSync` to flush DOM updates for this tab change so we actually have DOM elements to work with
- Update the stage dimensions once on first load of it (so in the effect that sets up the resize observer, we update the stage dimensions)

The result now is the expected behaviour - images sent to canvas do not crash and end up in the center of the canvas.
2023-09-15 11:05:53 +10:00
Ryan Dick
18095ecc44 yarn build 2023-09-14 16:56:51 -04:00
Ryan Dick
e02a557454 Fix frontend typescript errors. 2023-09-14 16:43:43 -04:00
Ryan Dick
cc8b7a74da (minor) Delete minor TODO. 2023-09-14 13:04:34 -04:00
Ryan Dick
388554448a Add CLIP Vision model to IP-Adapter info and use this to infer which model to use. 2023-09-14 11:57:53 -04:00
Ryan Dick
cadc0839a6 typegen 2023-09-14 11:19:52 -04:00
mickr777
ad5f61e3b5
Merge branch 'main' into moretranslation 2023-09-14 13:36:37 +10:00
psychedelicious
f6738d647e fix(ui): store customStarUI outside redux
JSX is not serializable, so it cannot be in redux. Non-serializable global state may be put into `nanostores`.

- Use `nanostores` for `customStarUI`
- Use `nanostores` for `headerComponent`
- Re-enable the serializable & immutable check redux middlewares
2023-09-14 12:13:03 +10:00
Mary Hipp Rogers
d989c7fa34
add option for custom star ui (#4530)
Co-authored-by: Mary Hipp <maryhipp@Marys-MacBook-Air.local>
2023-09-13 20:48:10 +00:00
Ryan Dick
a2777decd4 Add a IPAdapterModelField for passing passing IP-Adapter models between nodes. 2023-09-13 13:40:59 -04:00
Ryan Dick
468253aa14 typegen 2023-09-13 08:27:24 -04:00
mickr777
3920d5c90d Missed Translations 2023-09-13 21:15:36 +10:00
mickr777
8c63173b0c
Translation update (#4503)
* Update Translations

* Fix Prettier Issue

* Fix Error in invokebutton.tsx

* More Translations

* few Fixes

* More Translations

* More Translations and lint Fixes

* Update constants.ts

Revert "Update constants.ts"

---------

Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
2023-09-13 17:31:34 +10:00
psychedelicious
57ebf735e6 feat(nodes): add InputField.ui_choice_labels: dict[str, str]
This maps values to labels for multiple-choice fields.

This allows "enum" fields (i.e. `Literal["val1", "val2", ...]` fields) to use code-friendly string values for choices, but present this to the UI as human-friendly labels.
2023-09-13 16:50:25 +10:00
Mary Hipp
7b2e6deaf1 add toggle for shouldDisableInformationalPopovers 2023-09-12 16:33:46 -04:00
Mary Hipp
63f94579c5 add informational popover base component and sample 2023-09-12 16:10:43 -04:00
Martin Kristiansen
5615c31799 isort wip 2023-09-12 13:01:58 -04:00
Mary Hipp Rogers
e060fef540
dont try to load image at all if shouldFetchMetadataFromApi (#4511)
Co-authored-by: Mary Hipp <maryhipp@Marys-MacBook-Air.local>
2023-09-11 11:11:32 -04:00
psychedelicious
24d9357fdc feat(ui): truncate error messages in toasts to 128 characters 2023-09-08 13:24:37 -04:00
psychedelicious
74cc409c72 feat(ui): add nodesAllowlist to config 2023-09-08 13:24:37 -04:00
psychedelicious
7254a6a517 feat(ui): add UI-level nodes denylist
This simply hides nodes from the workflow editor. The nodes will still work if an API request is made with them. For example, you could hide `iterate` nodes from the workflow editor, but if the Linear UI makes use of those nodes, they will still function.

- Update `AppConfig` with optional property `nodesDenylist: string[]`
- If provided, nodes are filtered out by `type` in the workflow editor
2023-09-08 13:24:37 -04:00
Millun Atluri
0166d7ba2b new frontend build 2023-09-08 15:22:22 +10:00
psychedelicious
56399a650a fix(ui): use zod to parse metdata when fetching from api 2023-09-08 11:55:25 +10:00
psychedelicious
e4035a51af fix(ui): add missing config property 2023-09-08 11:55:10 +10:00
Millun Atluri
b5e1ba34b3
Merge branch 'main' into refactor/rename-get-logger 2023-09-07 23:19:59 +10:00
Ryan Dick
46c9dcb113 Run yarn build. 2023-09-06 17:16:01 -04:00
Ryan Dick
6df79045fa Run typegen. 2023-09-06 17:03:37 -04:00
Ryan Dick
d776e0a0a9 Split ControlField and IpAdapterField. 2023-09-06 17:03:37 -04:00
Mary Hipp
81ea742aea cleanup 2023-09-05 16:55:44 -04:00
Mary Hipp
15d28bfdbf add option to fetch metadata from api instead of reading off of png 2023-09-05 16:54:29 -04:00
psychedelicious
0a1c5bea05 fix(ui): do not assign empty string to version if undefined
this causes zod to fail when building workflows
2023-09-06 00:01:26 +10:00
Lincoln Stein
500f3046a9 remove choice to update from main and add a warning about tags & branches 2023-09-05 08:14:26 -04:00
blessedcoolant
9caa2a2043 fix: Set scaled steps to be at 64 to be in sync with the rest of the canvas 2023-09-05 22:59:37 +12:00
blessedcoolant
86185f2fe3 feat: Scaled Bounding Box Dimensions now respect Aspect Ratio 2023-09-05 22:37:14 +12:00
blessedcoolant
94ec3da7b5 chore: regen scheme merge 2023-09-05 15:23:16 +12:00
blessedcoolant
f44496a579 Merge branch 'main' into feat/ip-adapter 2023-09-05 15:22:15 +12:00
blessedcoolant
b008fd4a5f
Merge branch 'main' into fix/ui/fix-invoke-button-validation 2023-09-05 15:00:39 +12:00
psychedelicious
8b305651f9 fix(ui): fix non-nodes validation logic being applied to nodes invoke button 2023-09-05 12:44:39 +10:00
blessedcoolant
a9fafad5b5 chore: sync, lint & update 2023-09-05 14:17:23 +12:00
blessedcoolant
c5b9c8fc3a Merge branch 'main' into lama-infill 2023-09-05 14:16:27 +12:00
blessedcoolant
fb5ac78191 Merge branch 'lama-infill' of https://github.com/blessedcoolant/InvokeAI into lama-infill 2023-09-05 14:11:05 +12:00
blessedcoolant
871b9286d1 fix: Review changes 2023-09-05 14:10:41 +12:00
psychedelicious
2ab75bc52e feat(ui): move fp32 check to its own variable
remove a ton of extraneous checks that are easy to miss during maintenance
2023-09-05 11:51:46 +10:00
dunkeroni
10eec546ad
Consolidate and generalize saturation/luminosity adjusters (#4425)
* Consolidated saturation/luminosity adjust.
Now allows increasing and inverting.
Accepts any color PIL format and channel designation.

* Updated docs/nodes/defaultNodes.md

* shortened tags list to channel types only

* fix typo in mode list

* split features into offset and multiply nodes

* Updated documentation

* Change invert to discrete boolean.
Previous math was unclear and had issues with 0 values.

* chore: black

* chore(ui): typegen

---------

Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
2023-09-05 11:18:37 +10:00
psychedelicious
d8f7c19030
Merge branch 'main' into refactor/rename-get-logger 2023-09-05 10:37:53 +10:00
blessedcoolant
c63390f6e1 fix: Temporarily update the ControlField zod model
While we decide how to go ahead with this .
2023-09-05 12:29:05 +12:00
blessedcoolant
cbd451c610 chore: Regen Schema 2023-09-05 12:13:08 +12:00
blessedcoolant
b1ef3370fa chore: Regen Schema 2023-09-05 09:56:34 +12:00
blessedcoolant
db4af7c287 Merge branch 'main' into lama-infill 2023-09-05 09:54:44 +12:00
blessedcoolant
52d15e06bf Merge branch 'main' into lama-infill 2023-09-05 07:12:27 +12:00
psychedelicious
4aca264308 feat(ui): handle node versions
- Node versions are now added to node templates
- Node data (including in workflows) include the version of the node
- On loading a workflow, we check to see if the node and template versions match exactly. If not, a warning is logged to console.
- The node info icon (top-right corner of node, which you may click to open the notes editor) now shows the version and mentions any issues.
- Some workflow validation logic has been shifted around and is now executed in a redux listener.
2023-09-04 19:08:18 +10:00
psychedelicious
920fc0e751 chore(ui): typegen 2023-09-04 15:25:58 +10:00
psychedelicious
34e3c2e000 feat(ui): style handles 2023-09-04 15:25:31 +10:00
psychedelicious
92975130bd feat: allow float inputs to accept integers
Pydantic automatically casts ints to floats.
2023-09-04 15:25:31 +10:00
psychedelicious
a765f01c08 chore(ui): typegen 2023-09-04 15:25:31 +10:00
psychedelicious
09803b075d fix(ui): fix node value checks to compare to undefined
existing checks would fail if falsy values
2023-09-04 15:25:31 +10:00
psychedelicious
1062fc4796 feat: polymorphic fields
Initial support for polymorphic field types. Polymorphic types are a single of or list of a specific type. For example, `Union[str, list[str]]`.

Polymorphics do not yet have support for direct input in the UI (will come in the future). They will be forcibly set as Connection-only fields, in which case users will not be able to provide direct input to the field.

If a polymorphic should present as a singleton type - which would allow direct input - the node must provide an explicit type hint.

For example, `DenoiseLatents`' `CFG Scale` is polymorphic, but in the node editor, we want to present this as a number input. In the node definition, the field is given `ui_type=UIType.Float`, which tells the UI to treat this as a `float` field.

The connection validation logic will prevent connecting a collection to `CFG Scale` in this situation, because it is typed as `float`. The workaround is to disable validation from the settings to make this specific connection. A future improvement will resolve this.

This also introduces better support for collection field types. Like polymorphics, collection types are parsed automatically by the client and do not need any specific type hints.

Also like polymorphics, there is no support yet for direct input of collection types in the UI.

- Disabling validation in workflow editor now displays the visual hints for valid connections, but lets you connect to anything.
- Added `ui_order: int` to `InputField` and `OutputField`. The UI will use this, if present, to order fields in a node UI. See usage in `DenoiseLatents` for an example.
- Updated the field colors - duplicate colors have just been lightened a bit. It's not perfect but it was a quick fix.
- Field handles for collections are the same color as their single counterparts, but have a dark dot in the center of them.
- Field handles for polymorphics are a rounded square with dot in the middle.
- Removed all fields that just render `null` from `InputFieldRenderer`, replaced with a single fallback
- Removed logic in `zValidatedWorkflow`, which checked for existence of node templates for each node in a workflow. This logic introduced a circular dependency, due to importing the global redux `store` in order to get the node templates within a zod schema. It's actually fine to just leave this out entirely; The case of a missing node template is handled by the UI. Fixing it otherwise would introduce a substantial headache.
- Fixed the `ControlNetInvocation.control_model` field default, which was a string when it shouldn't have one.
2023-09-04 15:25:31 +10:00
blessedcoolant
95f44ff343 fix: Make the name extraction work for both ckpts and folders 2023-09-04 10:52:27 +12:00
blessedcoolant
f9c3c07d98 fix: Support UNIX paths 2023-09-04 10:16:57 +12:00
blessedcoolant
c91ba2dbe7 feat: Infer Model Name automatically if empty in Model Forms 2023-09-04 01:36:48 +12:00
blessedcoolant
917c2c480e Merge branch 'main' into lama-infill 2023-09-03 23:16:34 +12:00
psychedelicious
0a70a856e5
Merge branch 'main' into fix/ui/fix-click-node-collapse 2023-09-03 09:43:40 +10:00
blessedcoolant
4fa66b2ba8 ui: Move Coherence settings above mask settings 2023-09-03 01:39:01 +12:00
blessedcoolant
6cfabc585a feat: Add Coherence Mode - Mask 2023-09-03 01:26:32 +12:00
blessedcoolant
b5f42bedce feat: Add Coherence Mode 2023-09-03 00:34:37 +12:00
blessedcoolant
fded8bee39 chore: Regen schema 2023-09-02 23:13:29 +12:00
blessedcoolant
ec09e21fc2 Merge branch 'main' into lama-infill 2023-09-02 23:02:38 +12:00
psychedelicious
625b08cff7 chore: typegen 2023-09-02 13:03:48 +10:00
psychedelicious
89b724d222 fix(ui): fix metadata parsing of older images
The metadata parsing was overly strict, not taking into account the shape of old metadata. Relaxed the schemas.

Also fixed a misspelling.
2023-09-02 13:03:48 +10:00
psychedelicious
699dfa222e fix(ui): node UI elements do not select node on click
Add a click handler for node wrapper component that exclusively selects that node, IF no other modifier keys are held.

Technically I believe this means we are doubling up on the selection logic, as reactflow handles this internally also. But this is by far the most reliable way to fix the UX.
2023-09-02 12:11:07 +10:00
Mary Hipp
ec2b44bfbd update hooks to pass in DTO 2023-09-02 11:36:46 +10:00
Mary Hipp
f8bb1f7a3e update getImageMetadataFromFile query to allow dyanmic URL based on image without using baseUrl for rest of endpoints 2023-09-02 11:36:46 +10:00
psychedelicious
0a7d06f8c6 fix(ui): fix circular imports
The logic that introduced a circular import was actually extraneous. I have entirely removed it.
2023-09-02 11:26:48 +10:00
blessedcoolant
7269ed2a0a Merge branch 'main' into lama-infill 2023-09-02 11:21:31 +12:00
blessedcoolant
46bc6968b8 fix: ControlImage Dimension retrieval not working as intended 2023-09-02 11:11:34 +12:00
blessedcoolant
497f66e682 feat: Add Patchmatch Downscale control to UI + refine the ui there 2023-09-02 10:24:32 +12:00
blessedcoolant
b73216ef81 feat: Decrement Brush Size by 1 for values under 5 for more precision 2023-09-02 10:23:14 +12:00
blessedcoolant
469fc49a2f ui: Make patchmatch downscale options optional 2023-09-02 08:36:01 +12:00
blessedcoolant
1a9f552a75 experimental: Add CV2 Infill 2023-09-02 04:48:18 +12:00
blessedcoolant
7a295cbfd5 experimental: Pass Mask To Coherence Pass 2023-09-01 11:40:09 +12:00
blessedcoolant
0d3d880323 feat: Re-Enable LaMa Infill 2023-09-01 09:13:28 +12:00
Lincoln Stein
b567d65032 blackify and rerun frontend build 2023-08-31 10:35:17 -04:00
psychedelicious
e90fd96eee fix(nodes): fix warning when using current image node 2023-08-31 13:40:38 +10:00
psychedelicious
8e470f9b6f fix(ui): fix metadata retrieval when has controlnet 2023-08-31 11:20:18 +10:00
Lincoln Stein
05e203570d make image import script work with python3.9; cleanup wheel creator 2023-08-30 17:35:58 -04:00
blessedcoolant
3cd2d3b764 fix: SDXL T2I and L2I not respecting Scaled on Canvas 2023-08-31 06:45:21 +12:00
blessedcoolant
4bac36356a fix: Create SDXL Refiner Create Mask only in inpaint & outpaint 2023-08-31 06:33:09 +12:00
blessedcoolant
97763f778a fix: SDXL Refiner not working with Canvas Inpaint & Outpaint 2023-08-31 06:26:02 +12:00
blessedcoolant
754666ed09 fix: Missing SDXL Refiner Seamless VAE plug 2023-08-31 05:49:02 +12:00
blessedcoolant
4c407328f2 fix: SDXL Refiner Seamless Interaction 2023-08-31 05:14:19 +12:00
blessedcoolant
943bedadf2 ui: Rename ControlNet Collapse header to Control Adapters 2023-08-31 01:44:13 +12:00
psychedelicious
667d4deeb7 feat(ui): improved model node ui 2023-08-30 22:36:40 +10:00
psychedelicious
adfdb02c1b fix(ui): fix workflow edge validation for collapsed edges 2023-08-30 22:36:15 +10:00
psychedelicious
216dff143e feat(ui): swath of UI tweaks and improvements 2023-08-30 21:31:58 +10:00
psychedelicious
f2334ec302 fix(ui): reset node execution states on cancel 2023-08-30 18:58:27 +10:00
psychedelicious
044d4c107a feat(nodes): move all invocation metadata (type, title, tags, category) to decorator
All invocation metadata (type, title, tags and category) are now defined in decorators.

The decorators add the `type: Literal["invocation_type"]: "invocation_type"` field to the invocation.

Category is a new invocation metadata, but it is not used by the frontend just yet.

- `@invocation()` decorator for invocations

```py
@invocation(
    "sdxl_compel_prompt",
    title="SDXL Prompt",
    tags=["sdxl", "compel", "prompt"],
    category="conditioning",
)
class SDXLCompelPromptInvocation(BaseInvocation, SDXLPromptInvocationBase):
    ...
```

- `@invocation_output()` decorator for invocation outputs

```py
@invocation_output("clip_skip_output")
class ClipSkipInvocationOutput(BaseInvocationOutput):
    ...
```

- update invocation docs
- add category to decorator
- regen frontend types
2023-08-30 18:35:12 +10:00
psychedelicious
94d0c18cbd feat(ui): remove highlighto n mouseover 2023-08-30 13:22:59 +10:00
psychedelicious
7b49f96472 feat(ui): style input fields 2023-08-30 13:19:37 +10:00
psychedelicious
9a2c0554de feat(ui): better workflow validation and parsing
Checks for the existence of nodes for each edge - does not yet check the types.
2023-08-30 13:02:49 +10:00
blessedcoolant
29112f96d2 Merge branch 'main' into feat/nodes-phase-5 2023-08-30 14:11:49 +12:00
blessedcoolant
1d6be7f7fd Merge branch 'ui-fixes' of https://github.com/blessedcoolant/InvokeAI into ui-fixes 2023-08-30 14:08:39 +12:00
blessedcoolant
64723f0628 fix: ControlNet DnD icons repeated twice 2023-08-30 14:07:24 +12:00
psychedelicious
8982543312 fix(ui): fix control image save button logic 2023-08-30 11:58:15 +10:00
psychedelicious
d8ce20c06f fix(ui): fix control image save button logic 2023-08-30 11:33:38 +10:00
psychedelicious
0ed6a141f1
Merge branch 'main' into feat/nodes-phase-5 2023-08-30 11:15:34 +10:00
blessedcoolant
db4d35ed45 ui: update scaled width and height sliders to be model sensitive 2023-08-30 10:28:54 +12:00
blessedcoolant
65fb6af01f ui: Make aspect ratio logic more robust 2023-08-30 10:15:26 +12:00
blessedcoolant
c6bab14043 ui: actually resolve circulars + fix flip bounding boxes AR unset 2023-08-30 09:33:04 +12:00
blessedcoolant
55f19aff3a ui: encase Denoising Strength to make it more prominent 2023-08-30 09:32:41 +12:00
blessedcoolant
1b6586dd8c fix: cyclic redundancy 2023-08-30 09:12:07 +12:00
blessedcoolant
b5da7faafb ui: make bounding box swap also unlock Aspect Ratio 2023-08-30 09:06:38 +12:00
blessedcoolant
b13a06f650 ui: map aspect ratios instead of manually creating the array 2023-08-30 08:52:11 +12:00
blessedcoolant
8e4d288f02 ui: Make swap size unlock fixed ratio
Coz it is no longer relevant
2023-08-30 08:44:34 +12:00
blessedcoolant
8d4caaabb0 ui: Simply collapse spacing 2023-08-30 08:40:17 +12:00
blessedcoolant
171a0eaf51 feat: Add Lock Ratio Option 2023-08-30 07:04:08 +12:00
blessedcoolant
2469859c01 feat: Add Set Control Image Width / Height to User Settings 2023-08-30 06:23:02 +12:00
blessedcoolant
cff391aa1d feat: Update size resets to be model dependent 2023-08-30 05:58:07 +12:00
blessedcoolant
4fd4aee2ab feat: Auto Change Dimensions on Model Switch by Type 2023-08-30 05:49:57 +12:00
blessedcoolant
f5c5f59220 minor: tweak padding on ControlNet Collapse 2023-08-30 05:24:42 +12:00
blessedcoolant
9afc909ff0 ui: tweak parameter options spacing 2023-08-30 05:22:44 +12:00
blessedcoolant
176d41d624 ui: Add SubParametersWrapper 2023-08-30 05:05:54 +12:00
blessedcoolant
9eed8cdc27 ui: fix some minor spacing and color issues 2023-08-30 04:51:53 +12:00
blessedcoolant
98e905ee48 ui: Combine mask and coherence under Compositing 2023-08-30 04:51:32 +12:00
blessedcoolant
52c2397498 ui: Keep boards modal open by default 2023-08-30 04:17:30 +12:00
blessedcoolant
11fa87388b fix: Controlnet Prepreocessed Image Save Icon Missing 2023-08-30 04:05:36 +12:00
blessedcoolant
258b0814a8 Merge branch 'main' into feat/nodes-phase-5 2023-08-30 02:33:49 +12:00
blessedcoolant
15a927b517 fix: Processing Control Image not saving properly 2023-08-30 02:09:13 +12:00
blessedcoolant
d251124196 feat: Add Save Preprocessed Image To Board 2023-08-30 01:14:41 +12:00
blessedcoolant
243e76dd80 feat: Send Canvas Image & Mask To ControlNet 2023-08-29 23:48:28 +12:00
blessedcoolant
c4bec0e81b Merge branch 'main' into feat/nodes-phase-5 2023-08-29 12:42:52 +12:00
blessedcoolant
6fdeeb8ce8 Merge branch 'main' into pr/4352 2023-08-29 12:40:01 +12:00
blessedcoolant
9993e4b02e fix: lint errors 2023-08-29 12:37:09 +12:00
blessedcoolant
e6b677873a chore: Regen schema 2023-08-29 12:20:55 +12:00
blessedcoolant
d0c74822eb resolve: Merge conflicts 2023-08-29 12:08:00 +12:00
blessedcoolant
383d008529 Merge branch 'main' into feat/nodes-phase-5 2023-08-29 12:05:28 +12:00
blessedcoolant
577464091c fix: SDXL LoRA's not working with seamless 2023-08-29 06:44:18 +12:00
blessedcoolant
aaae471910 fix: SDXL Canvas Inpaint & Outpaint being broken 2023-08-29 05:42:00 +12:00
blessedcoolant
56ed76fd95 fix: useMultiSelect file named incorrectly 2023-08-29 05:19:51 +12:00
blessedcoolant
5133825efb fix: Incorrect plug in Dynamic Prompt Graph 2023-08-29 05:17:46 +12:00
blessedcoolant
50a266e064 feat: Add Seamless to Inpaint & Outpaint 2023-08-29 05:11:22 +12:00
blessedcoolant
87bb4d8f6e fix: Seamless not working with SDXL on Canvas 2023-08-29 04:52:41 +12:00
blessedcoolant
fcb60a7a59 chore: Update var names that were not updated 2023-08-29 04:33:22 +12:00
blessedcoolant
b5dac99411 feat: Add Seamless To Canvas Text To Image / Image To Image + SDXL + Refiner 2023-08-29 04:26:11 +12:00
blessedcoolant
a08d22587b fix: Incorrect node ID's for Seamless plugging 2023-08-29 04:21:11 +12:00
blessedcoolant
0ea67050f1 fix: Seamless not correctly plugged to SDXL Denoise Latents 2023-08-29 04:18:45 +12:00
blessedcoolant
594e547c3b feat: Add Seamless to T2I / I2I / SDXL T2I / I2I + Refiner 2023-08-29 04:01:04 +12:00
blessedcoolant
3c37245804 Merge branch 'main' into maryhipp/preselected-image 2023-08-29 01:12:09 +12:00
blessedcoolant
e60af40c8d chore: lint fixes 2023-08-29 01:11:55 +12:00
mickr777
00ca9b027a
Update CurrentImageNode.tsx 2023-08-28 19:15:53 +10:00
mickr777
e81e17ccb6
Merge branch 'main' into nextprevcurrentimagenode 2023-08-28 18:05:33 +10:00
Millun Atluri
24132a7950
Merge branch 'main' into refactor/rename-get-logger 2023-08-28 11:38:37 +10:00
mickr777
38851ae19a
Merge branch 'main' into nextprevcurrentimagenode 2023-08-27 19:50:39 +10:00
blessedcoolant
71c3955530 feat: Add Scale Before Processing To Canvas Txt2Img / Img2Img (w/ SDXL) 2023-08-27 08:26:23 +12:00
blessedcoolant
b18695df6f fix: Update color of denoise mask socket
The previous red look too much like the error color.
2023-08-27 06:16:13 +12:00
blessedcoolant
521da555d6 feat: Update color of Denoise Mask socket 2023-08-27 06:09:02 +12:00
blessedcoolant
c923d094c6 rename: Inpaint Mask to Denoise Mask 2023-08-27 05:50:13 +12:00
blessedcoolant
226721ce51 feat: Setup UnifiedCanvas to work with new InpaintMaskField 2023-08-27 03:50:29 +12:00
blessedcoolant
af3e316cee chore: Regen schema 2023-08-27 03:12:03 +12:00
blessedcoolant
382a55afd3 fix: merge conflicts 2023-08-27 03:07:42 +12:00
blessedcoolant
e9633a3adb Merge branch 'main' into fix/inpaint_gen 2023-08-27 02:54:19 +12:00
Lincoln Stein
0bf5fee1b2 correct solution to crash 2023-08-24 23:16:03 -04:00
Lincoln Stein
8114fc7bc2 UI tweak to column select 2023-08-24 23:16:03 -04:00
Mary Hipp
d52a096607 enable preselected image actions 2023-08-24 13:29:53 -04:00
Mary Hipp
44b6adfb9f cleanup 2023-08-25 00:09:16 +10:00
Mary Hipp
466a819f06 render created_by in UI if its present 2023-08-25 00:09:16 +10:00
psychedelicious
0c5736d9c9 feat(ui): cache image metadata for 24 hours 2023-08-24 22:12:13 +10:00
psychedelicious
7d1942e9f0 feat: workflow saving and loading 2023-08-24 21:42:32 +10:00
mickr777
5d8cd62e44
Update CurrentImageNode.tsx 2023-08-24 19:20:35 +10:00
mickr777
b6dc5c0fee
Run Prettier 2023-08-24 18:45:38 +10:00
mickr777
c1b8e4b501
Add Next/Prev Buttons CurrentImageNode.tsx 2023-08-24 18:31:27 +10:00
psychedelicious
7f6fdf5d39 feat(ui): hide lama infill 2023-08-23 23:05:29 -04:00
psychedelicious
40e6dd8464 feat(ui): use seed + 1 for second inpaint/outpaint pass 2023-08-23 23:05:29 -04:00
psychedelicious
2f11936db0 fix(ui): use seed + 1 for inpaint/outpaint second pass 2023-08-23 23:05:29 -04:00
blessedcoolant
f45ea1145d fix: LoRA's not working with new canvas refine 2023-08-23 23:05:29 -04:00
blessedcoolant
49892faee4 experimental: LaMa Infill 2023-08-23 23:05:29 -04:00
blessedcoolant
7bb876a79b feat: Add Refiner Pass to Canvas Inpainting 2023-08-23 23:05:29 -04:00
blessedcoolant
f89be8c685 cleanup: Some minor cleanup 2023-08-23 23:05:29 -04:00
blessedcoolant
7e4009a58e chore: Rename canvas refine elements to have more apt names 2023-08-23 23:05:29 -04:00
blessedcoolant
5141e82f88 fix: Remove paste back from inpainting too 2023-08-23 23:05:29 -04:00
blessedcoolant
8277bfab5e feat: Add Refiner Pass to SDXL Outpainting
Also fix Scale Before Processing
2023-08-23 23:05:29 -04:00
blessedcoolant
0af8a0e84b feat: Replace Seam Painting with Refine Pass for Outpainting 2023-08-23 23:05:29 -04:00
blessedcoolant
9bafe4a94f fix: Paste Back Not Respecting Inpainted Mask 2023-08-23 23:05:29 -04:00
psychedelicious
111322b015 fix(ui): fix staging area shadow
It was too strong
2023-08-23 23:06:42 +10:00
psychedelicious
859c155e7f fix(ui): fix IAICollapse styling 2023-08-23 23:06:42 +10:00
psychedelicious
955fef35aa chore(ui): remove cruft related to old canvas scaling method 2023-08-23 23:06:42 +10:00
psychedelicious
6efa953172 fix(ui): fix canvas scaling 2023-08-23 23:06:42 +10:00
psychedelicious
06ac16a77d feat(ui): style minimap 2023-08-23 23:06:42 +10:00
psychedelicious
05c939d41e feat(ui): remove canvas beta layout 2023-08-23 23:06:42 +10:00
psychedelicious
cfee02b753 feat(ui): align invoke buttons 2023-08-23 23:06:42 +10:00
blessedcoolant
4f088252db fix: Restyle the WorkflowPanel 2023-08-23 23:06:42 +10:00
blessedcoolant
ca3e826a14 feat: Make the in progress dark mode colors golden 2023-08-23 23:06:42 +10:00
psychedelicious
0cb886b915 feat(ui): node buttons and shadow 2023-08-23 23:06:42 +10:00
blessedcoolant
2ec8fd3dc7 feat: Make the active processing node light up 2023-08-23 23:06:42 +10:00
psychedelicious
90abd0fe49 fix(ui): position floating buttons 2023-08-23 23:06:42 +10:00
psychedelicious
3651cf7ee2 wip buttons 2023-08-23 23:06:42 +10:00
blessedcoolant
8eca3bbbcd chore: Remove Pinned Hotkeys from Hotkeys Modal 2023-08-23 23:06:42 +10:00
psychedelicious
73318c2847 feat(ui): remove floating panels, move all to resizable panels
There is a console error we can ignore when toggling gallery panel on canvas - this will be resolved in the next release of the resizable library
2023-08-23 23:06:42 +10:00
psychedelicious
6d10e40c9b feat(ui): add selection mode toggle 2023-08-23 23:06:42 +10:00
blessedcoolant
5cf9b75d77 fix: Remove / as hotkey for add node and add tooltip 2023-08-23 23:06:42 +10:00
blessedcoolant
d4463674cf fix: Move add node hotkey to the right component 2023-08-23 23:06:42 +10:00
psychedelicious
ce7172d78c feat(ui): add workflow saving/loading (wip)
Adds loading workflows with exhaustive validation via `zod`.

There is a load button but no dedicated save/load UI yet. Also need to add versioning to the workflow format itself.
2023-08-23 23:06:42 +10:00
psychedelicious
38b2dedc1d feat(ui): use new ui_order to sort fields; connection-only fields in grid 2023-08-23 23:06:42 +10:00
psychedelicious
cd73085eb9 feat(nodes): add ui_order node field attribute
used by UI to sort fields in workflow editor
2023-08-23 23:06:42 +10:00
psychedelicious
2497aa5cd8 feat(ui): improve node schema parsing and add outputType to templates 2023-08-23 23:06:42 +10:00
psychedelicious
089ada8cd1 chore(ui): typegen 2023-08-23 23:06:42 +10:00
psychedelicious
35d14fc0f9 fix(ui): simplify typegen script
i had this committed earlier but lost it somehow
2023-08-23 23:06:42 +10:00
psychedelicious
b79bca2c14 build(ui): fix up lint scripts (way faster now) 2023-08-23 23:06:42 +10:00
psychedelicious
7b97754271 chore(ui): update all packages
- only breaking change was in `openapi-fetch`, easy fix
- also looks like prettier/eslint is a bit more comprehensive? caught a couple extra things
2023-08-23 23:06:42 +10:00
Lincoln Stein
3f7ac556c6
Merge branch 'main' into refactor/rename-performance-options 2023-08-21 22:29:34 -04:00
psychedelicious
4da861e980 chore: clean up .gitignore 2023-08-22 10:02:03 +10:00
blessedcoolant
7b2079cf83 feat: Add hotkey for Add Nodes (Shift+A)
Standard with other tools like Blender
2023-08-22 03:31:29 +12:00
psychedelicious
01738deb23 feat(ui): add eslint rules
- `curly` requires conditionals to use curly braces
- `react/jsx-curly-brace-presence` requires string props to *not* have curly braces
2023-08-21 19:17:36 +10:00
psychedelicious
fbff22c94b feat(ui): memoize all components 2023-08-21 19:17:36 +10:00
psychedelicious
5c305b1eeb feat(ui): add app error boundary
Should catch all app crashes
2023-08-21 19:17:36 +10:00
psychedelicious
990b6b5f6a feat(ui): useful tooltips on invoke button 2023-08-21 19:17:36 +10:00
psychedelicious
2dfcba8654 fix(ui): fix graphs using old field names 2023-08-21 19:17:36 +10:00
psychedelicious
6d111aac90 fix(ui): fix node opacity slider hitbox 2023-08-21 19:17:36 +10:00
psychedelicious
f9fc89b3c5 feat(ui): nodes scheduler type default value -> "euler" 2023-08-21 19:17:36 +10:00
psychedelicious
ab76d54c10 feat(ui): update node schema parsing
simplified logic thanks to backend changes
2023-08-21 19:17:36 +10:00
psychedelicious
56245a7406 chore(ui): regen types 2023-08-21 19:17:36 +10:00
psychedelicious
4ac41bc4b1 feat(ui): adding node selects new node exclusively 2023-08-21 19:17:36 +10:00
psychedelicious
4be4fc6731 feat(ui): rework add node select
- `space` and `/` open floating add node select
- improved filter logic (partial word matches)
2023-08-21 19:17:36 +10:00
psychedelicious
a9fdc77edd feat(ui): rename node editor to workflow editor 2023-08-21 19:17:36 +10:00
psychedelicious
385765faec fix(ui): fix missing tags on template parse 2023-08-21 19:17:36 +10:00
psychedelicious
adb05cde5b feat(ui): simple partial search for nodes 2023-08-21 19:17:36 +10:00
psychedelicious
211e8203f8 feat(ui): organise nodes files
- also remove old `.gitignore` of `inputs/` which wasn't used and was ignoring a frontend folder
2023-08-21 19:17:36 +10:00
psychedelicious
165c57c001 feat(ui): add select all to workflow editor 2023-08-21 19:17:36 +10:00
psychedelicious
2514af79a0 feat(ui): crude node outputs display
Resets on invoke. Nothing fancy for the UI yet, just simple text (for numbers and strings) or image. For other output types, the output in JSON.
2023-08-21 19:17:36 +10:00
psychedelicious
f952f8f685 feat(ui): add typegen customisation for invocation outputs
The `type` property is required on all of them, but because this is defined in pydantic as a Literal, it is not required in the OpenAPI schema. Easier to fix this by changing the generated types than fiddling around with pydantic.
2023-08-21 19:17:36 +10:00
psychedelicious
519bcb38c1 feat(ui): node delete, copy, paste 2023-08-21 19:17:36 +10:00
psychedelicious
567d46b646 feat(ui): delete key works on workflow editor 2023-08-21 19:17:36 +10:00
psychedelicious
030802295b feat(ui): reset only specific nodes/cnet that use images
Previously if an image was used in nodes and you deleted it, it would reset all of node editor. Same for controlnet.

Now it only resets the specific nodes or controlnets that used that image.
2023-08-21 19:17:36 +10:00
psychedelicious
a495c8c156 feat(ui): misc cleanups 2023-08-21 19:17:36 +10:00
psychedelicious
ae6db67068 feat(ui): add width to mantine selects 2023-08-21 19:17:36 +10:00