Mary Hipp
ea449f5a0a
upscale graph built, no multidiffusion yet
2024-07-23 10:55:54 +10:00
Mary Hipp
5a1ed99ca1
restore adhoc upscale button
2024-07-23 10:55:54 +10:00
Mary Hipp
3a2707ac02
disable invoke button properly for upscaling tab
2024-07-23 10:55:54 +10:00
Mary Hipp
ce5b1103ed
add send to upscale to context menu
2024-07-23 10:55:54 +10:00
Mary Hipp
fd91b83d86
build out the rest of the accordions
2024-07-23 10:55:54 +10:00
Mary Hipp
a0a54348e8
removed upscale button, created spandrel model dropdown, created upscale initial image that works with dnd
2024-07-23 10:55:54 +10:00
Mary Hipp
43b3e242b0
tidy(ui): refactor parameters panel components to be 1:1 with tabs
2024-07-23 10:55:54 +10:00
Ryan Dick
81991e072b
Merge branch 'main' into ryan/spandrel-upscale
2024-07-16 15:14:08 -04:00
psychedelicious
24bf1ea65a
fix(ui): boards cut off when search open
2024-07-15 14:07:20 +10:00
psychedelicious
84abdc5780
fix(ui): prevent cutoff of last board
2024-07-12 14:25:38 +10:00
psychedelicious
88c3a71586
fix(ui): fix bug with usePanel
2024-07-10 04:27:24 -07:00
psychedelicious
ec1b429d45
feat(ui): add divider between board search and list
2024-07-10 04:27:24 -07:00
psychedelicious
146e3a3377
feat(ui): tweak board tooltip behaviour
2024-07-10 04:27:24 -07:00
psychedelicious
7db767b7c3
feat(ui): sticky board list header
2024-07-10 04:27:24 -07:00
psychedelicious
b70e87f25b
feat(ui): tweak add board button style
2024-07-10 04:27:24 -07:00
psychedelicious
fea1ec9085
feat(ui): updated boards resizable panel logic
2024-07-10 04:27:24 -07:00
psychedelicious
2e7a95998c
feat(ui): add support for default size in usePanel
2024-07-10 04:27:24 -07:00
psychedelicious
788f90a7d5
feat(ui): tweak resizehandle styling
2024-07-10 04:27:24 -07:00
psychedelicious
6bf29b20af
fix(ui): fix edge case in panels
...
Not sure why I didn't figure out how to do this before - we only should reset a panel if it's too small.
2024-07-10 04:27:24 -07:00
psychedelicious
a7c44b4a98
feat(ui): rename gallery boards on double click
2024-07-10 04:27:24 -07:00
psychedelicious
48a57f0da8
feat(ui): boards styling
...
- Refine layout
- Update colors - more minimal, fewer shaded boxes
- Add indicator for search icons showing a search term is entered
- Handle new `projectName` and `projectUrl` ui props
2024-07-10 04:27:24 -07:00
chainchompa
2edfb2356d
remove extra boardname
2024-07-10 04:27:24 -07:00
chainchompa
58d2c1557d
prettier
2024-07-10 04:27:24 -07:00
chainchompa
8fdff33cf8
update board header styling, toggle board search, resizing gallery panels
2024-07-10 04:27:24 -07:00
chainchompa
a96e34d2d1
remove collapsibles and update board title
2024-07-10 04:27:24 -07:00
chainchompa
8826adad24
filter out uncategorized when not included in search
2024-07-10 04:27:24 -07:00
chainchompa
cdacf2ecd0
clear out boards search when adding a new board
2024-07-10 04:27:24 -07:00
chainchompa
f193a576a6
move boardname back and make collapsible again
2024-07-10 04:27:24 -07:00
chainchompa
b7ebdca70a
update image and assets tabs styling
2024-07-10 04:27:24 -07:00
Ryan Dick
7b5d4935b4
Merge branch 'main' into ryan/spandrel-upscale
2024-07-09 13:47:11 -04:00
psychedelicious
476ebd13ae
feat(ui): add board button tooltip when private boards enabled
2024-07-09 22:51:08 +10:00
psychedelicious
2460689c00
feat(ui): style board name
2024-07-09 22:47:03 +10:00
psychedelicious
781b800ef7
feat(ui): boards lists start collapsed
2024-07-09 22:40:50 +10:00
psychedelicious
d38d513d23
fix(ui): autoadd badge doesn't flex shrink
2024-07-09 22:39:32 +10:00
psychedelicious
80e1b87b9e
fix(ui): autoadd badge hides when editing name
2024-07-09 22:39:17 +10:00
psychedelicious
6014382c7b
feat(ui): select a board when it is created
2024-07-09 22:37:41 +10:00
psychedelicious
060d698a12
feat(ui): restore image count for boards
2024-07-09 22:19:20 +10:00
psychedelicious
637802d803
fix(ui): restore auto-add indicator
2024-07-09 22:14:21 +10:00
psychedelicious
2faf1e2ed3
fix(ui): show uncategorized board when private boards disabled
2024-07-09 22:02:54 +10:00
psychedelicious
81cf47dd99
feat(ui): boards list layout & style tweaking
2024-07-09 21:58:48 +10:00
chainchompa
907b257984
remove unused file and addressed pr feedback
2024-07-08 23:20:50 -04:00
chainchompa
38c5804457
remove unused disclosure
2024-07-08 22:09:23 -04:00
chainchompa
faf65c988a
Merge branch 'main' into boards-ui-update
2024-07-08 22:06:26 -04:00
chainchompa
1785825690
add current gallery board name
2024-07-08 22:03:42 -04:00
chainchompa
79a7b11214
remove old boards list
2024-07-08 15:02:22 -04:00
chainchompa
3a85ab15a1
update BoardRecord
2024-07-08 14:55:04 -04:00
chainchompa
9ca6980c7a
cleanup and bug fixes
2024-07-08 13:29:53 -04:00
Ryan Dick
d09999736c
Rename spandrel models to 'Image-to-Image Model' throughout the UI.
2024-07-05 14:04:08 -04:00
Ryan Dick
9d3739244f
Prettier formatting.
2024-07-03 16:28:21 -04:00
Ryan Dick
9328c17ded
Add Spandrel models to the list of models in the Model Manager tab.
2024-07-03 16:28:21 -04:00
Ryan Dick
c1c8e55e8e
Fix static check errors.
2024-07-03 16:28:21 -04:00
Ryan Dick
29c8ddfb88
WIP - A bunch of boilerplate to support Spandrel Image-to-Image models throughout the model manager and the frontend.
2024-07-03 16:28:21 -04:00
chainchompa
6437ef3f82
add view that displays private boards with shared boards
2024-07-03 14:25:36 -04:00
Mary Hipp
e719018ba1
fix sort order
2024-07-03 09:20:08 -07:00
psychedelicious
5578660ccb
fix(ui): reset page when search term changes
2024-07-03 13:20:40 +10:00
psychedelicious
4075a81676
feat(ui): gallery image selection ux
...
The selection logic is a bit complicated. We have image selection and pagination, both of which can be triggered using the mouse or hotkeys. We have viewer image selection and comparison image selection, which is determined by the alt key.
This change ties the room together with these behaviours:
- Changing the page using pagination buttons never changes the selection.
- Changing the selected image using arrows may change the page, if the arrow key pressed would select an image off the current page.
- `right` on the last image of the current page goes to the next page
- `down` on the last row of images goes to the next page
- `left` on the first image of the current page goes to the previous page
- `up` on the first row of images goes to the previous page
- If `alt` is held when using arrow keys, we change the page, but we only change the comparison image selection.
- When using arrow keys, if the page has changed since the last image was selected, the selection is reset to the first image on the page.
- The next/previous buttons on the image viewer do the same thing as `left` and `right` without `alt`.
- When clicking an image in the gallery:
- If no modifier keys are held, the image is exclusively selected.
- If `ctrl` or `meta` are held, the image's selection status is toggled.
- If `shift` is held, all images from the last-selected image to the image are selected. If there are no images on the current page, the selection is unchanged.
- If `alt` is held, the image is set as the compare image.
- `ctrl+a` and `meta+a` add the current page to the selection.
The logic for gallery navigation and selection is now pretty hairy. It's spread across 3 hooks, a listener, redux slice, components.
When we next make changes to this part of the app, we should consider consolidating some of the related logic. Probably most of it can go into a single listener and make it much simpler to grok.
2024-07-02 13:52:32 +10:00
psychedelicious
4d39976909
feat(ui): restore loading spinner in search box
...
@maryhipp you were right, after trying loading bars and different placements, this feels like the best place for it.
2024-07-02 13:52:32 +10:00
Mary Hipp
d14894b3ae
(ui) clarify auto-add options
2024-07-02 06:44:09 +10:00
Mary Hipp
93caa23ef8
undo
2024-07-01 15:36:06 -04:00
Mary Hipp
57c0fcb93d
(ui) clarify auto-add options
2024-07-01 15:36:06 -04:00
psychedelicious
b1cc413bbd
tidy(ui): remove search term fetching indicator
...
Don't like this UI (even though I suggested it). No need to prevent the user from interacting with the search term field during fetching. Let's figure out a nicer way to present this in a followup.
2024-07-01 20:06:28 +10:00
psychedelicious
f0b1f0e5b6
feat(ui): pass search term as-is to query
...
The images service does not add the query filter if the search term is an empty string.
2024-07-01 20:06:28 +10:00
Mary Hipp
20d5c3a8bf
(ui): improve loader/fetching state while searching, make search term a string in redux
2024-07-01 20:06:28 +10:00
Mary Hipp
da05034e20
feat(ui): debounced gallery search
2024-07-01 20:06:28 +10:00
psychedelicious
10076fb1e8
feat(ui): tweak gallery settings popover divider styling
2024-06-28 18:01:01 +10:00
psychedelicious
d6e85e5f67
tidy(ui): rename GalleryBulkSelect -> GallerySelectionCountTag
2024-06-28 18:01:01 +10:00
psychedelicious
1ce459198c
chore(ui): knip
2024-06-28 18:01:01 +10:00
psychedelicious
17d337169d
fix(ui): do not reset limit when changing gallery view
2024-06-28 18:01:01 +10:00
psychedelicious
1468f4d37e
perf(ui): split out gallery settings popover components
...
This was taking over 15ms (!) to render each time a setting changed, wtf
2024-06-28 18:01:01 +10:00
psychedelicious
2b744480d6
feat(ui): update UI for sorting
2024-06-28 18:01:01 +10:00
Mary Hipp
6109a06f04
feat(ui): gallery sort by created at or starred, asc or desc
2024-06-28 18:01:01 +10:00
psychedelicious
0d4b80780b
feat(ui): handle edge cases when archiving/deleting boards
...
If the currently selected or auto-add board is archived or deleted, we should reset them. There are some edge cases taht weren't handled in the previous implementation.
All handling of this logic is moved to the (renamed) listener.
2024-06-28 10:36:05 +10:00
Mary Hipp
b5f23292d4
lint fix
2024-06-28 10:36:05 +10:00
Mary Hipp
740bf80f3e
(ui): update query param to include_archived, fix cache when archiving boards
2024-06-28 10:36:05 +10:00
Mary Hipp
dc90de600d
(ui) allow auto-add on archived boards, reset to uncategorized if auto-add board is not currently visible due to archived view
2024-06-28 10:36:05 +10:00
psychedelicious
5709f82e5f
feat(ui): separate context menu for no board board
...
Much easier to not need to handle the board being optional in the component.
2024-06-28 10:36:05 +10:00
psychedelicious
20042d99ec
tidy(ui): archived icon component
2024-06-28 10:36:05 +10:00
Mary Hipp
29eb3c8b62
lint fix
2024-06-28 10:36:05 +10:00
Mary Hipp
071e8bcee4
feat(ui): make archiving and auto-add mutually exclusive
2024-06-28 10:36:05 +10:00
Mary Hipp
68c0aa898f
feat(ui): add ability to archive/unarchive boards, add toggle to gallery settings to show/hide archived boards in list
2024-06-28 10:36:05 +10:00
psychedelicious
a0a0c57789
chore(ui): knip
2024-06-27 13:48:40 +10:00
psychedelicious
32ebf82d1a
feat(ui): better pagination buttons
2024-06-27 13:48:40 +10:00
psychedelicious
2dd172c2c6
feat(ui): gallery bulk select styling
2024-06-27 13:48:40 +10:00
psychedelicious
6dcdc87eb1
fix(ui): control adapter image preview
2024-06-27 13:48:40 +10:00
Mary Hipp
715dd983b0
appease the knip
2024-06-27 13:48:40 +10:00
Mary Hipp
84ffd36071
lint fix
2024-06-27 13:48:40 +10:00
Mary Hipp
9f30f1bfec
fix circular dep
2024-06-27 13:48:40 +10:00
Mary Hipp
bdff5c4e87
only show selected when greater than 0
2024-06-27 13:48:40 +10:00
Mary Hipp
66e25628c3
fix neg pages
2024-06-27 13:48:40 +10:00
Mary Hipp
3a531a3c88
remove rest of cache, add bulk select UI
2024-06-27 13:48:40 +10:00
Mary Hipp
f01df49128
lint fix
2024-06-27 13:48:40 +10:00
psychedelicious
719c066ac4
feat(ui): more efficient board totals fetching
...
We only need to show the totals in the tooltip. Tooltips accpet a component for the tooltip label. The component isn't rendered until the tooltip is triggered.
Move the board total fetching into a tooltip component for the boards. Now we only fire these requests when the user mouses over the board
2024-06-27 13:48:40 +10:00
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
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
6d067e56f2
fix(ui): on page load, if CA processed image no longer exists, re-process it
2024-06-07 10:32:28 +10: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
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
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
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
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
5a4d10467b
feat(ui): use updated types
2024-05-30 12:03:38 +10:00
psychedelicious
843f82c837
fix(ui): remove overly strict constraints on control adapter weight
2024-05-29 19:01:28 -07:00
psychedelicious
5388f5a817
fix(ui): edit variant for main models only
...
Closes #6444
2024-05-27 11:02:00 +10:00
psychedelicious
60784a4361
feat(ui): update client for removal of session events
2024-05-27 09:06:02 +10:00
psychedelicious
eaf67b2150
feat(ui): add logging for session events
2024-05-27 09:06:02 +10:00
psychedelicious
585feccf82
fix(ui): update event handling to match new types
2024-05-27 09:06:02 +10:00
psychedelicious
a1d68eb319
fix(ui): denoise percentage
2024-05-27 09:06:02 +10:00
psychedelicious
3abc182b44
chore(ui): tidy after rebase
2024-05-27 09:06:02 +10:00
psychedelicious
8d79ce94aa
feat(ui): update UI to use new events
...
- Use OpenAPI schema for event payload types
- Update all event listeners
- Add missing events / remove old nonexistent events
2024-05-27 09:06:02 +10:00
psychedelicious
f5a775ae4e
feat(ui): toast on queue item errors, improved error descriptions
...
Show error toasts on queue item error events instead of invocation error events. This allows errors that occurred outside node execution to be surfaced to the user.
The error description component is updated to show the new error message if available. Commercial handling is retained, but local now uses the same component to display the error message itself.
2024-05-24 20:02:24 +10:00
psychedelicious
125e1d7eb4
tidy: remove unnecessary whitespace changes
2024-05-24 20:02:24 +10:00
psychedelicious
2fbe5ecb00
fix(ui): correctly fallback to error message when traceback is empty string
2024-05-24 20:02:24 +10:00
psychedelicious
6fc7614b4a
fix(ui): race condition with progress
...
There's a race condition where a canceled session may emit a progress event or two after it's been canceled, and the progress image isn't cleared out.
To resolve this, the system slice tracks canceled session ids. When a progress event comes in, we check the cancellations and skip setting the progress if canceled.
2024-05-24 20:02:24 +10:00
psychedelicious
aa329ea811
feat(ui): handle enriched events
2024-05-24 20:02:24 +10:00
psychedelicious
46a90ca402
fix(ui): initial image layers always ignored
...
Whoops!
2024-05-24 06:40:48 +10:00
psychedelicious
70487f0c2e
fix(ui): layers are "enabled", not "visible"
2024-05-23 10:14:34 +10:00
psychedelicious
55d7d9cc75
fix(ui): control layers don't disable correctly
...
Closes #6424
2024-05-23 10:14:34 +10:00
psychedelicious
0ba57d6dc5
feat(ui): close starter models toast when a model is installed
2024-05-22 09:40:46 +10:00
psychedelicious
57743239d7
feat(ui): add updateDescription
flag to toast API
...
If false, when updating a toast, the description is left alone. The count will still tick up.
2024-05-22 09:40:46 +10:00
psychedelicious
4a394c60cf
feat(ui): add isLocal
flag to config
2024-05-22 09:40:46 +10:00
psychedelicious
29e1ea59fc
feat(ui): style copy button on ToastWithSessionRefDescription
2024-05-22 09:40:46 +10:00
psychedelicious
2e5d24f272
tidy(ui): remove old comment
2024-05-22 09:40:46 +10:00
psychedelicious
1afa340b1a
fix(ui): show toast when recalling seed
2024-05-22 09:40:46 +10:00
psychedelicious
3b381b5a8c
tidy(ui): remove the ToastID enum
...
With the model install logic cleaned up the enum is less useful
2024-05-22 09:40:46 +10:00
psychedelicious
f2b9684de8
tidy(ui): split install model into helper hook
...
This was duplicated like 7 times or so
2024-05-22 09:40:46 +10:00
psychedelicious
a66b3497e0
feat(ui): port all toasts to use new util
2024-05-22 09:40:46 +10:00
psychedelicious
683ec8e5f2
feat(ui): add stateful toast utility
...
Small wrapper around chakra's toast system simplifies creating and updating toasts. See comments in toast.ts for details.
2024-05-22 09:40:46 +10:00
psychedelicious
f31f0cf733
feat(ui): restore spellcheck on prompt boxes
2024-05-22 08:52:25 +10:00
psychedelicious
38265b3123
docs(ui): update validateWorkflow comments
2024-05-21 05:17:10 -07:00
psychedelicious
caca28286c
tests(ui): add test for resource usage check
2024-05-21 05:17:10 -07:00
psychedelicious
38320a5100
feat(ui): reset missing images, boards and models when loading workflows
...
These fields are reset back to `undefined` if not accessible. A warning toast is showing, and in the JS console, the full warning message is logged.
2024-05-21 05:17:10 -07:00
psychedelicious
9ba47cae20
fix(ui): unable to edit notes node title
2024-05-21 11:27:11 +10:00
psychedelicious
bf4310ca71
fix(ui): errors when node template or field template doesn't exist
...
Some asserts were bubbling up in places where they shouldn't have, causing errors when a node has a field without a matching template, or vice-versa.
To resolve this without sacrificing the runtime safety provided by asserts, a `InvocationFieldCheck` component now wraps all field components. This component renders a fallback when a field doesn't exist, so the inner components can safely use the asserts.
2024-05-21 11:22:08 +10:00
psychedelicious
e75f98317f
fix(ui): notes node text not selectable
2024-05-21 10:06:25 +10:00
psychedelicious
1249d4a6e3
fix(ui): crash when using a notes node
2024-05-21 10:06:09 +10:00
steffylo
32277193b6
fix(ui): retain denoise strength and opacity when changing image
2024-05-20 18:27:51 +10:00
psychedelicious
620ee2875e
fix(ui): store hidden
state of edges in workflows
...
This prevents a minor visual bug where collapsed edges between collapsed nodes didn't display correctly on first load of a workflow.
2024-05-20 11:36:47 +10:00
psychedelicious
5553588147
fix(ui): ensure invocation edges have a type
2024-05-20 11:36:47 +10:00
psychedelicious
1c29b3bd85
feat(ui): updated field type translations
2024-05-20 11:28:33 +10:00
psychedelicious
e88b807a13
docs(ui): update field type docs & comments
2024-05-20 11:28:33 +10:00
psychedelicious
9e55ef3d4b
fix(ui): workflow migration field type
...
At some point, I made a mistake and imported the wrong types to some files for the old v1 and v2 workflow schema migration data.
The relevant zod schemas and inferred types have been restored.
This change doesn't alter runtime behaviour. Only type annotations.
2024-05-20 11:28:33 +10:00
psychedelicious
8062a47d16
fix(ui): use new field type cardinality throughout app
...
Update business logic and tests.
2024-05-20 11:28:33 +10:00
psychedelicious
dba8c43ecb
feat(ui): explicit field type cardinality
...
Replace the `isCollection` and `isCollectionOrScalar` flags with a single enum value `cardinality`. Valid values are `SINGLE`, `COLLECTION` and `SINGLE_OR_COLLECTION`.
Why:
- The two flags were mutually exclusive, but this wasn't enforce. You could create a field type that had both `isCollection` and `isCollectionOrScalar` set to true, whuch makes no sense.
- There was no explicit declaration for scalar/single types.
- Checking if a type had only a single flag was tedious.
Thanks to a change a couple months back in which the workflows schema was revised, field types are internal implementation details. Changes to them are non-breaking.
2024-05-20 11:28:33 +10:00
psychedelicious
f4625c2671
feat(ui): add canvas objects to metadat a for all canvas graphs
2024-05-20 10:32:59 +10:00
psychedelicious
ba8bed6870
fix(ui): edge case resulting in no node templates when loading workflow, causing failure
...
Depending on the user behaviour and network conditions, it's possible that we could try to load a workflow before the invocation templates are available.
Fix is simple:
- Use the RTKQ query hook for openAPI schema in App.tsx
- Disable the load workflow buttons until w have templates parsed
2024-05-19 07:34:00 -07:00
psychedelicious
e2f109807c
fix(ui): delete edges when their source or target no longer exists
2024-05-19 20:14:01 +10:00
psychedelicious
cea1874e00
perf(ui): memoize WorkflowName selectors
2024-05-19 20:14:01 +10:00
psychedelicious
89b0e9e4de
feat(ui): use connection validationResults directly in components
2024-05-19 20:14:01 +10:00
psychedelicious
26d0d55d97
fix(ui): set nodeDragThreshold to prevent spurious position change events
2024-05-19 20:14:01 +10:00
psychedelicious
059c5586a4
perf(ui): ignore all no-op node and edge changes
2024-05-19 20:14:01 +10:00
psychedelicious
9ed5698aa8
fix(ui): do not remove exposed fields when updating workflows
2024-05-19 20:14:01 +10:00
psychedelicious
0b5696c5d4
feat(ui): remove nodeExclusivelySelected action
2024-05-19 20:14:01 +10:00
psychedelicious
a51142674a
tidy(ui): more succinct syntax for edge and node updates
2024-05-19 20:14:01 +10:00
psychedelicious
b8b671c0db
feat(ui): remove selectionDeleted action
2024-05-19 20:14:01 +10:00
psychedelicious
7cceafe0dd
feat(ui): remove selectionPasted action
2024-05-19 20:14:01 +10:00
psychedelicious
cbe32b647a
feat(ui): remove selectedAll action
2024-05-19 20:14:01 +10:00
psychedelicious
9a8e0842bb
feat(ui): remove nodeReplaced action
2024-05-19 20:14:01 +10:00
psychedelicious
1d7671298f
fix(ui): group edge selection actions
2024-05-19 20:14:01 +10:00
psychedelicious
e38d75c3dc
feat(ui): get rid of nodeAdded
2024-05-19 20:14:01 +10:00
psychedelicious
21fab9785a
feat(ui): tweak edge styling
2024-05-19 20:14:01 +10:00
psychedelicious
b3429553bb
fix(ui): collapsed edges selected state
2024-05-19 20:14:01 +10:00
psychedelicious
e480844042
fix(ui): edge styling
2024-05-19 20:14:01 +10:00
psychedelicious
26029108f7
feat(ui): rework node and edge mutation logic
...
Remove our DIY'd reducers, consolidating all node and edge mutations to use `edgesChanged` and `nodesChanged`, which are called by reactflow. This makes the API for manipulating nodes and edges less tangly and error-prone.
2024-05-19 20:14:01 +10:00
psychedelicious
504ac82077
fix(ui): duplicated edges when updating edge with lazy connect
2024-05-19 20:14:01 +10:00
psychedelicious
6b11740dda
chore(ui): knip
2024-05-19 20:14:01 +10:00
psychedelicious
a80e3448f5
feat(ui): rework pendingConnection
2024-05-19 20:14:01 +10:00
psychedelicious
4bda174eb9
tests(ui): coverage for getCollectItemType
2024-05-19 20:14:01 +10:00
psychedelicious
b1e28c2f2c
tests(ui): coverage for getFirstValidConnection
2024-05-19 20:14:01 +10:00
psychedelicious
83000a4190
feat(ui): rework getFirstValidConnection with new helpers
2024-05-19 20:14:01 +10:00
psychedelicious
c98205d0d7
tests(ui): candidate fields, getFirstValidConnection (wip)
2024-05-19 20:14:01 +10:00
psychedelicious
ce2ad5903c
feat(ui): extract logic for finding candidate fields to own function
2024-05-19 20:14:01 +10:00
psychedelicious
fe3980a369
tests(ui): add buildNode convenience wrapper for buildInvocationNode
2024-05-19 20:14:01 +10:00
psychedelicious
ea97ae5ae8
tidy(ui): extraneous vars in makeConnectionErrorSelector
2024-05-19 20:14:01 +10:00
psychedelicious
3605b6b1a3
fix(ui): handling for in-progress edge updates during conection validation
2024-05-19 20:14:01 +10:00
psychedelicious
fc31dddbf7
feat(ui): use new validateConnection
2024-05-19 20:14:01 +10:00
psychedelicious
6ad01d824d
feat(ui): add strict mode to validateConnection
2024-05-19 20:14:01 +10:00
psychedelicious
78f9f3ee95
feat(ui): better types for validateConnection
2024-05-19 20:14:01 +10:00
psychedelicious
972398d203
tests(ui): add iterate to test schema
2024-05-19 20:14:01 +10:00
psychedelicious
857889d1fa
tests(ui): coverage for getCollectItemType
2024-05-19 20:14:01 +10:00
psychedelicious
8074a802d6
tests(ui): coverage for validateConnectionTypes
2024-05-19 20:14:01 +10:00
psychedelicious
059d5a682c
tidy(ui): validateConnection code clarity
2024-05-19 20:14:01 +10:00
psychedelicious
00c2d8f95d
tidy(ui): areTypesEqual var names
2024-05-19 20:14:01 +10:00
psychedelicious
04a596179b
tests(ui): finish test cases for validateConnection
2024-05-19 20:14:01 +10:00
psychedelicious
3fcb2720d7
tests(ui): add tests for consolidated connection validation
2024-05-19 20:14:01 +10:00
psychedelicious
6f7160b9fd
fix(ui): call updateNodeInternals when making connections
2024-05-19 20:14:01 +10:00
psychedelicious
6b4e464d17
fix(ui): rework edge update logic
2024-05-19 20:14:01 +10:00
psychedelicious
9f7841a04b
tidy(ui): clean up addnodepopover hotkeys
2024-05-19 20:14:01 +10:00
psychedelicious
468644ab18
fix(ui): rebase conflict
2024-05-19 20:14:01 +10:00
psychedelicious
9d127fee6b
feat(ui): makeConnectionErrorSelector now creates a parameterized selector
2024-05-19 20:14:01 +10:00
psychedelicious
6658897210
tidy(ui): tidy connection validation functions and logic
2024-05-19 20:14:01 +10:00
psychedelicious
af7b194bec
chore(ui): lint
2024-05-19 20:14:01 +10:00
psychedelicious
de1ea50e6d
fix(ui): rebase resolution
2024-05-19 20:14:01 +10:00
psychedelicious
a012bb6e07
feat(ui): add ModelIdentifierField field type
...
This new field type accepts _any_ model. A field renderer lets the user select any available model.
2024-05-19 20:14:01 +10:00
psychedelicious
6a2c53f6c5
fix(ui): do not allow comparison between undefined original types
2024-05-19 20:14:01 +10:00
psychedelicious
2cbf7d9221
fix(ui): stupid ts
2024-05-19 20:14:01 +10:00
psychedelicious
85a5a7c47a
feat(ui): add originalType
to FieldType, improved connection validation
...
We now keep track of the original field type, derived from the python type annotation in addition to the override type provided by `ui_type`.
This makes `ui_type` work more like it sound like it should work - change the UI input component only.
Connection validation is extend to also check the original types. If there is any match between two fields' "final" or original types, we consider the connection valid.This change is backwards-compatible; there is no workflow migration needed.
2024-05-19 20:14:01 +10:00
psychedelicious
386d552493
fix(ui): loading workflows from file
2024-05-18 09:04:37 +10:00
psychedelicious
799cf06d20
fix(ui): loading library workflows
2024-05-18 09:04:37 +10:00
psychedelicious
922716d2ab
feat(ui): store graph in image metadata
...
The previous super-minimal implementation had a major issue - the saved workflow didn't take into account batched field values. When generating with multiple iterations or dynamic prompts, the same workflow with the first prompt, seed, etc was stored in each image.
As a result, when the batch results in multiple queue items, only one of the images has the correct workflow - the others are mismatched.
To work around this, we can store the _graph_ in the image metadata (alongside the workflow, if generated via workflow editor). When loading a workflow from an image, we can choose to load the workflow or the graph, preferring the workflow.
Internally, we need to update images router image-saving services. The changes are minimal.
To avoid pydantic errors deserializing the graph, when we extract it from the image, we will leave it as stringified JSON and let the frontend's more sophisticated and flexible parsing handle it. The worklow is also changed to just return stringified JSON, so the API is consistent.
2024-05-18 09:04:37 +10:00
psychedelicious
5d60c3c8e1
fix(ui): jank when editing field title
2024-05-18 08:46:40 +10:00
psychedelicious
4e21d01c7f
feat(ui): dim field name when connected
2024-05-18 08:46:40 +10:00
psychedelicious
6b7b0b3777
fix(ui): do not rearrange fields when connection/disconnecting
2024-05-18 08:46:40 +10:00
psychedelicious
07feb5ba07
Revert "feat(ui): SDXL clip skip"
...
This reverts commit 40b4fa7238
.
2024-05-17 15:08:04 -07:00
psychedelicious
32dff2c4e3
feat(ui): copy/paste input edges when copying node
...
- Copy edges to selected nodes on copy
- If pasted with `ctrl/meta-shift-v`, also paste the input edges
2024-05-17 23:12:29 +10:00