psychedelicious
f631aea4ee
fix(ui): skip RG layers with no mask
...
These do not need to be added to the graph or metadata, as they are no-ops on the backend.
2024-05-09 07:52:52 -04:00
psychedelicious
32f4c1f966
fix(ui): memoize mouse event handlers
...
This prevents resetting the stage event handlers on every frame. Whoops!
2024-05-09 07:52:52 -04:00
psychedelicious
adebe639e3
tidy(ui): remove errant console.logs
2024-05-09 07:52:52 -04:00
psychedelicious
44280ed472
fix(ui): layer recall uses fresh ids
...
When layer metadata is stored, the layer IDs are included. When recalling the metadata, we need to assign fresh IDs, else we can end up with multiple layers with the same ID, which of course causes all sorts of issues.
2024-05-09 07:52:52 -04:00
psychedelicious
cec8840038
fix(ui): handle disabled RG layers
...
Was missing a check for `layer.isEnabled`.
2024-05-09 07:52:52 -04:00
psychedelicious
fc7f484935
feat(ui): add data-testid
s to control layers components:
...
- Add Layer Menu Button: `control-layers-add-layer-menu-button`
- Delete All Layers Button: `control-layers-delete-all-layers-button`
- CL Layer List: `control-layers-layer-list`
- CL Canvas: `control-layers-canvas`
- Toggle Metadata Button: `toggle-show-metadata-button`
- Toggle Progress Button: `toggle-show-progress-button`
- Toggle Viewer Menu Button: `toggle-viewer-menu-button`
- Settings Tab Button: `generation-tab-settings-tab-button`
- Control Layers Tab Button: `generation-tab-control-layers-tab-button`
2024-05-09 07:03:13 +10:00
psychedelicious
1aa7cd57c2
feat(ui): add invert brush scroll checkbox to control layers settings
2024-05-09 07:03:13 +10:00
psychedelicious
722a91aedb
fix(ui): canvas toolbar centering
2024-05-09 07:03:13 +10:00
Mary Hipp
03c24ca9cb
lint fix
2024-05-08 15:49:37 -04:00
Mary Hipp
5820579237
switch to generation tab when someone sends to img2img
2024-05-08 15:49:37 -04:00
psychedelicious
6c768bfe7e
fix(ui): viewer toggle prevents progress toggle interaction
2024-05-08 08:39:18 -04:00
psychedelicious
5ca794b94f
feat(ui): show progress toggle on control layers toolbar
2024-05-08 08:39:18 -04:00
psychedelicious
d20695260d
feat(ui): open viewer on enqueue from generation tab
2024-05-08 08:39:18 -04:00
psychedelicious
d8557d573b
Revert "feat(ui): extend zod with a is
typeguard` method"
...
This reverts commit 0f45933791
.
2024-05-08 08:39:18 -04:00
psychedelicious
6c1fd584d2
feat(ui): pre-CL control adapter metadata recall
2024-05-08 08:39:18 -04:00
psychedelicious
e8e764be20
feat(ui): revise image viewer
...
- Viewer only exists on Generation tab
- Viewer defaults to open
- When clicking the Control Layers tab on the left panel, close the viewer (i.e. open the CL editor)
- Do not switch to editor when adding layers (this is handled by clicking the Control Layers tab)
- Do not open viewer when single-clicking images in gallery
- _Do_ open viewer when _double_-clicking images in gallery
- Do not change viewer state when switching between app tabs (this no longer makes sense; the viewer only exists on generation tab)
- Change the button to a drop down menu that states what you are currently doing, e.g. Viewing vs Editing
2024-05-08 08:39:18 -04:00
psychedelicious
e8023c44b0
chore(ui): lint
2024-05-08 08:39:18 -04:00
psychedelicious
a3a6449786
feat(ui): versioned control layers metadata
2024-05-08 08:39:18 -04:00
psychedelicious
e9d2ffe3d7
fix(ui): process control image on recall if no processed image
2024-05-08 08:39:18 -04:00
psychedelicious
23ad6fb730
feat(ui): handle missing images/models when recalling control layers
2024-05-08 08:39:18 -04:00
psychedelicious
00f36cb491
tidy(ui): clean up control layers graph builder
2024-05-08 08:39:18 -04:00
psychedelicious
3f489c92c8
feat(ui): handle initial image layers in control layers helper
2024-05-08 08:39:18 -04:00
psychedelicious
f147f99bef
feat(ui): better metadata labels for layers
2024-05-08 08:39:18 -04:00
psychedelicious
6107e3d281
fix(ui): fix zControlAdapterBase schema weight
2024-05-08 08:39:18 -04:00
psychedelicious
de33d6e647
fix(ui): metadata "Layers" -> "Layer"
2024-05-08 08:39:18 -04:00
psychedelicious
e36e5871a1
chore(ui): lint
2024-05-08 08:39:18 -04:00
psychedelicious
8b25c1a62e
tidy(ui): remove extraneous metadata handlers
2024-05-08 08:39:18 -04:00
psychedelicious
dfbd7eb1cf
feat(ui): individual layer recall
2024-05-08 08:39:18 -04:00
psychedelicious
b43b2714cc
feat(ui): add fracturedjsonjs
to pretty-serialize objects
...
In use on the metadata viewer - makes it sooo much easier on the eyes.
2024-05-08 08:39:18 -04:00
psychedelicious
e537de2f6d
feat(ui): layers recall
...
This still needs some finessing - needs logic depending on the tab...
2024-05-08 08:39:18 -04:00
psychedelicious
ccd399e277
feat(ui): add getIsVisible
to metadata handlers
2024-05-08 08:39:18 -04:00
psychedelicious
bfad814862
fix(ui): fix IPAdapterConfigV2 schema weight
2024-05-08 08:39:18 -04:00
psychedelicious
6e8b7f9421
feat(ui): write layers to metadata
2024-05-08 08:39:18 -04:00
psychedelicious
e47629cbe7
feat(ui): add zod schema for layers array
2024-05-08 08:39:18 -04:00
psychedelicious
e840de27ed
feat(ui): extend zod with a is
typeguard` method
...
Feels dangerous, but it's very handy.
2024-05-08 08:39:18 -04:00
psychedelicious
8342f32f2e
refactor(ui): rewrite all types as zod schemas
...
This change prepares for safe metadata recall.
2024-05-08 08:39:18 -04:00
psychedelicious
a7aa529b99
tidy(ui): "imageName" -> "name"
2024-05-08 08:39:18 -04:00
psychedelicious
4adc592657
feat(ui): move strength to init image layer
...
This further splits the control layers state into its own thing.
2024-05-07 11:02:16 +10:00
psychedelicious
e8d60e8d83
fix(ui): image metadata viewer stuck when spamming hotkey
2024-05-07 11:02:16 +10:00
psychedelicious
886f5c90a3
feat(ui): move img2img strength out of advanced on canvas
2024-05-07 11:02:16 +10:00
psychedelicious
5e684c11f1
Update invokeai_version.py
2024-05-07 09:09:10 +10:00
psychedelicious
72ce239592
revert(ui): remove floating viewer
...
There are unresolved platform-specific issues with this component, and its utility is debatable.
Should be easy to just revert this commit to add it back in the future if desired.
2024-05-06 19:00:07 -04:00
psychedelicious
a826f8f8c5
fix(ui): show total layer count in control layers tab
2024-05-06 19:00:07 -04:00
psychedelicious
b6c19a8e47
feat(ui): close viewer when adding a RG layer
2024-05-06 19:00:07 -04:00
psychedelicious
67d6cf19c6
fix(ui): switch to viewer if auto-switch is enabled
2024-05-06 19:00:07 -04:00
psychedelicious
a9bf651c69
chore(ui): bump all deps
2024-05-06 19:00:07 -04:00
psychedelicious
3bd5d9a8e4
fix(ui): memoize FloatingImageViewer
...
Maybe this will fix @JPPhoto's issue?
2024-05-06 19:00:07 -04:00
psychedelicious
6249982d82
fix(ui): stuck viewer when spamming toggle
...
There are a number of bugs with `framer-motion` that can result in sync issues with AnimatePresence and the conditionally rendered component.
You can see this if you rapidly click an accordion, occasionally it gets out of sync and is closed when it should be open.
This is a bigger problem with the viewer where the user may hold down the `z` key. It's trivial to get it to lock up.
For now, just remove the animation entirely.
Upstream issues for reference:
https://github.com/framer/motion/issues/2023
https://github.com/framer/motion/issues/2618
https://github.com/framer/motion/issues/2554
2024-05-06 19:00:07 -04:00
psychedelicious
6b98dba71d
chore(ui): lint
2024-05-06 08:55:32 -04:00
psychedelicious
c0065a65a0
feat(ui): floating viewer always shows progress, never shows metadata
2024-05-06 08:55:32 -04:00
psychedelicious
cce3144c74
feat(ui): add floating image viewer
2024-05-06 08:55:32 -04:00
psychedelicious
aab152a7e9
fix(ui): track mouse out flags correctly
2024-05-06 08:55:32 -04:00
psychedelicious
c5b948bc3f
feat(ui): fade layer selection color
2024-05-06 08:55:32 -04:00
psychedelicious
44ecddae2e
feat(ui): style Settings/Control Layers tabs like tabs
2024-05-06 08:55:32 -04:00
psychedelicious
26847895b9
fix(ui): update hotkeys for viewer
2024-05-06 08:55:32 -04:00
psychedelicious
e4a640f0a7
feat(ui): optimized rendering of selected layer
...
Instead of caching on every stroke, we can use a compositing rect when the layer is being drawn to improve performance.
2024-05-04 12:03:28 -04:00
psychedelicious
b5b6a96d94
feat(ui): dynamic brush spacing
...
Scaled to 10% of brush size, clamped between 5px and 15px. This makes drawing feel a bit smoother, but maintains reasonable performance.
2024-05-04 12:03:28 -04:00
psychedelicious
806a8f69c5
perf(ui): rerender of opacity sliders
2024-05-04 12:03:28 -04:00
psychedelicious
ac0b9ba290
tidy(ui): $cursorPosition
-> $lastCursorPos
2024-05-04 12:03:28 -04:00
psychedelicious
7ca613d41c
feat(ui): snap cursor pos when drawing rects
...
- Rects snap to stage edge when within a threshold (10 screen pixels)
- When mouse leaves stage, set last mousedown pos to null, preventing nonfunctional rect outlines
Partially addresses #6306 .
There's a technical challenge to fully address the issue - mouse event are not fired when the mouse is outside the stage. While we could draw the rect even if the mouse leaves, we cannot update the rect's dimensions on mouse move, or complete the drawing on mouse up.
To fully address the issue, we'd need to a way to forward window events back to the stage, or at least handle window events. We can explore this later.
2024-05-04 12:03:28 -04:00
psychedelicious
5cb1ff8679
fix(ui): open viewer on image click, not select
2024-05-04 12:03:28 -04:00
psychedelicious
8794b99d51
fix(ui): save upscaled images to gallery on canvas tab
2024-05-03 23:15:10 -04:00
psychedelicious
6bdded85da
fix(ui): do not auto-hide next/prev image buttons
2024-05-03 23:15:10 -04:00
psychedelicious
26613f10c7
feat(ui): close viewer when user switches tabs
2024-05-03 23:15:10 -04:00
psychedelicious
6d2fe3b691
tidy(ui): clean up layer reset logic
2024-05-03 23:15:10 -04:00
psychedelicious
2888845f7c
fix(ui): invalidate mask cache when moving layer
2024-05-03 23:15:10 -04:00
psychedelicious
4beccea6e7
fix(ui): do not run HRO if using an initial image
2024-05-03 23:15:10 -04:00
psychedelicious
68d1458c83
fix(ui): address feedback
2024-05-04 08:40:12 +10:00
blessedcoolant
f4dde883ca
feat: improve the switch states of the control layers / viewer area
2024-05-04 08:40:12 +10:00
psychedelicious
be7eeb576b
fix(ui): fix viewer getting stuck when spamming toggle
2024-05-03 20:57:18 +10:00
psychedelicious
af9f0e0963
feat(ui): cache control layer mask images
...
When invoking with control layers, we were creating and uploading the mask images on every enqueue, even when the mask didn't change. The mask image can be cached to greatly reduce the number of uploads.
With this change, we are a bit smarter about the mask images:
- Check if there is an uploaded mask image name
- If so, attempt to retrieve its DTO. Typically it will be in the RTKQ cache, so there is no network request, but it will make a network request if not cached to confirm the image actually exists on the server.
- If we don't have an uploaded mask image name, or the request fails, we go ahead and upload the generated blob
- Update the layer's state with a reference to this uploaded image for next time
- Continue as before
Any time we modify the mask (drawing/erasing, resetting the layer), we invalidate that cached image name (set it to null).
We now only upload images when we need to and generation starts faster.
2024-05-03 20:57:18 +10:00
Lincoln Stein
2bba7f38b9
Merge branch 'main' into lstein/feat/config-migration
2024-05-03 00:04:37 -04:00
Lincoln Stein
a48abfacf4
make config migrator into an instance; refactor location of get_config()
2024-05-02 23:45:34 -04:00
psychedelicious
0787c6c746
Update invokeai_version.py
2024-05-03 13:23:19 +10:00
psychedelicious
579d436934
fix(ui): floating param/gallery buttons
2024-05-02 23:09:26 -04:00
psychedelicious
36f01988e8
chore(ui): lint
2024-05-02 23:09:26 -04:00
psychedelicious
d9b92d19f9
feat(ui): clearer viewer/editor context switching
2024-05-02 23:09:26 -04:00
psychedelicious
fdfc379a84
fix(ui): layer counts
2024-05-02 23:09:26 -04:00
psychedelicious
2062cfe84a
fix(ui): cursor when no renderable layers added
2024-05-02 23:09:26 -04:00
psychedelicious
eb36e834b2
feat(ui): add fallback when no layers exist
2024-05-02 23:09:26 -04:00
psychedelicious
2baa33730a
fix(ui): fix control layer list layout
2024-05-02 23:09:26 -04:00
psychedelicious
c30df7ce79
feat(ui): style settings/control layers tabs
2024-05-02 23:09:26 -04:00
psychedelicious
f05ac5a7a5
chore(ui): bump @invoke-ai/ui-library
2024-05-02 23:09:26 -04:00
psychedelicious
85dd78b8df
fix(ui): handle deleting images in use in generation tab
2024-05-02 23:09:26 -04:00
psychedelicious
4c7be03702
tidy(ui): rename generation tab graph builders
2024-05-02 23:09:26 -04:00
psychedelicious
e354fee4f4
fix(ui): add img2img metadata to graphs
2024-05-02 23:09:26 -04:00
psychedelicious
20e628297c
fix(ui): smoother animations in current image preview
2024-05-02 23:09:26 -04:00
psychedelicious
98664fc46f
fix(ui): gallery prev/next buttons animations
2024-05-02 23:09:26 -04:00
psychedelicious
33617fc06a
feat(ui): rework image viewer
...
- Rework styling
- Replace "CurrentImageDisplay" entirely
- Add a super short fade to reduce jarring transition
- Make the viewer a singleton component, overlaid on everything else - reduces change when switching tabs
2024-05-02 23:09:26 -04:00
psychedelicious
c05e52ebae
fix(ui): do not delete all layers when using image as initial image
2024-05-02 23:09:26 -04:00
psychedelicious
5734a97c55
fix(ui): do not attempt drawing when invalid layer type selected
2024-05-02 23:09:26 -04:00
psychedelicious
94a73d5377
feat(ui): update mm-related translations
2024-05-02 23:09:26 -04:00
psychedelicious
0f7fdabe9b
feat(ui): rename tab identifiers
...
- "txt2img" -> "generation"
- "unifiedCanvas" -> "canvas"
- "modelManager" -> "models"
- "nodes" -> "workflows"
- Add UI slice migration setting the active tab to "generation"
2024-05-02 23:09:26 -04:00
psychedelicious
7c1f1076b4
feat(ui): rename tabs
...
- "Text to Image" -> "Generation"
- "Unified Canvas" -> "Canvas"
- "Model Manager" -> "Models"
2024-05-02 23:09:26 -04:00
psychedelicious
a6ac184211
tidy(ui): excise img2img tab
2024-05-02 23:09:26 -04:00
psychedelicious
7d58908e32
fix(ui): fix img2img graphs w/ control layers
2024-05-02 23:09:26 -04:00
psychedelicious
26d3ec3fce
fix(ui): destroy initial image layer after deleting
2024-05-02 23:09:26 -04:00
psychedelicious
dc81357152
feat(ui): add img2img via control layers to graph builders
2024-05-02 23:09:26 -04:00
psychedelicious
c9886796f6
feat(ui): add image viewer overlay
...
- Works on txt2img, canvas and workflows tabs, img2img has its own side-by-side view
- In workflow editor, the is closeable only if you are in edit mode, else it's always there
- Press `i` to open
- Press `esc` to close
- Selecting an image or changing image selection opens the viewer
- When generating, if auto-switch to new image is enabled, the viewer opens when an image comes in
To support this change, I organized and restructured some tab stuff.
2024-05-02 23:09:26 -04:00
psychedelicious
209ddc2037
fix(ui): do not toggle layers on double click of opacity popover
2024-05-02 23:09:26 -04:00