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
2680ef52c2
feat(nodes): add ModelIdentifierInvocation
...
This node allows a user to select _any_ model, outputting a `ModelIdentifierField` for that model.
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
fe7ed72c9c
feat(nodes): make all ModelIdentifierField
inputs accept connections
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
af3fd26d4e
fix(ui): bug when clearing processor
...
When clearing the processor config, we shouldn't re-process the image. This logic wasn't handled correctly, but coincidentally the bug didn't cause a user-facing issue.
Without a config, we had a runtime error when trying to build the node for the processor graph and the listener failed.
So while we didn't re-process the image, it was because there was an error, not because the logic was correct.
Fix this by bailing if there is no image or config.
2024-05-19 07:25:48 +10:00
psychedelicious
5127fd6320
fix(ui): control adapter autoprocess jank
...
If you change the control model and the new model has the same default processor, we would still re-process the image, even if there was no need to do so.
With this change, if the image and processor config are unchanged, we bail out.
2024-05-19 07:25:48 +10:00
psychedelicious
17e1fc5254
chore(app): ruff
2024-05-18 09:21:45 +10:00
maryhipp
84e031edc2
add nulable project also
2024-05-18 09:21:45 +10:00
maryhipp
b6b7e737e0
ruff
2024-05-18 09:21:45 +10:00
maryhipp
5f3e7afd45
add nullable user to invocation error events
2024-05-18 09:21:45 +10:00
psychedelicious
b0cfca9d24
fix(app): pass image metadata as stringified json
2024-05-18 09:04:37 +10:00
psychedelicious
985ef89825
fix(app): type annotations in images service
2024-05-18 09:04:37 +10:00
psychedelicious
5928ade5fd
feat(app): simplified create image API
...
Graph, metadata and workflow all take stringified JSON only. This makes the API consistent and means we don't need to do a round-trip of pydantic parsing when handling this data.
It also prevents a failure mode where an uploaded image's metadata, workflow or graph are old and don't match the current schema.
As before, the frontend does strict validation and parsing when loading these values.
2024-05-18 09:04:37 +10:00
psychedelicious
93ebc175c6
fix(app): retain graph in metadata when uploading images
2024-05-18 09:04:37 +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
66fc110b64
Revert "feat(ui): store workflow in generation tab images"
...
This reverts commit c9c4190fb45696088207b0ac3c69c2795d7f9694.
2024-05-18 09:04:37 +10:00
psychedelicious
822f1e1f06
feat(ui): store workflow in generation tab images
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
a18d7adad4
fix(ui): allow image dims multiple of 32 with SDXL and T2I adapter
...
See https://github.com/invoke-ai/InvokeAI/pull/6342#issuecomment-2109912452 for discussion.
2024-05-17 23:38:54 +10: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
psychedelicious
575ecb4028
feat(ui): prevent connections to direct-only inputs
2024-05-17 22:08:40 +10:00
psychedelicious
ad8778df6c
feat(ui): extract node execution state from nodesSlice
...
This state is ephemeral and not undoable.
2024-05-17 13:24:23 +10:00
psychedelicious
d2f5103f9f
fix(ui): ignore actions from other slices in nodesSlice history
2024-05-17 13:24:23 +10:00
psychedelicious
dd42a56084
tests(ui): fix parseSchema test fixture
...
The schema fixture wasn't formatted quite right - doesn't affect the test but still.
2024-05-17 13:24:23 +10:00
psychedelicious
23ac340a3f
tests(ui): add test for parseSchema
2024-05-17 13:24:23 +10:00
psychedelicious
6791b4eaa8
chore(ui): lint
2024-05-17 13:24:23 +10:00
psychedelicious
a8b042177d
feat(ui): connection validation for collection items types
2024-05-17 13:24:23 +10:00
psychedelicious
76825f4261
fix(ui): allow collect node inputs to connect to multiple fields when using lazy connect
2024-05-17 13:24:23 +10:00
psychedelicious
78cb4d75ad
fix(ui): use elevateEdgesOnSelect
so last-selected edge is the interactable one when updating edges
2024-05-17 13:24:23 +10:00
psychedelicious
a18bbac262
fix(ui): jank interaction between edge update and autoconnect
2024-05-17 13:24:23 +10:00
psychedelicious
9ff5596963
feat(ui): hide values for connected fields
2024-05-17 13:24:23 +10:00
psychedelicious
8ea596b1e9
fix(ui): janky editable field title
...
- Do not allow whitespace-only field titles
- Make only preview text trigger editable
- Tooltip over the preview, not the whole "row"
2024-05-17 13:24:23 +10:00
psychedelicious
e3a143eaed
fix(ui): fix jank w/ stale connections
2024-05-17 13:24:23 +10:00
psychedelicious
c359ab6d9b
fix(ui): fix dependency tracking for copy/paste hotkeys
2024-05-17 13:24:23 +10:00
psychedelicious
dbfaa07e03
feat(ui): add checks for undo/redo actions
2024-05-17 13:24:23 +10:00
psychedelicious
7f78fe7a36
feat(ui): move viewport state to nanostores
2024-05-17 13:24:23 +10:00
psychedelicious
6cf5b402c6
feat(ui): remove extraneous selectedEdges and selectedNodes state
2024-05-17 13:24:23 +10:00
psychedelicious
b0c7c7cb47
feat(ui): remove remaining extraneous state from nodes slice
2024-05-17 13:24:23 +10:00
psychedelicious
4d68cd8dbb
feat(ui): recreate edge auto-add-node logic
2024-05-17 13:24:23 +10:00
psychedelicious
2c1fa30639
feat(ui): recreate edge autoconnect logic
2024-05-17 13:24:23 +10:00
psychedelicious
708c68413d
tidy(ui): add type for templates
2024-05-17 13:24:23 +10:00
psychedelicious
1d884fb794
feat(ui): move invocation templates out of redux
...
Templates are stored in nanostores. All hooks, selectors, etc are reworked to reference the nanostore.
2024-05-17 13:24:23 +10:00
psychedelicious
f6a44681a8
feat(ui): move invocation templates out of redux (wip)
2024-05-17 13:24:23 +10:00
psychedelicious
d4df312300
feat(ui): move nodes copy/paste out of slice
2024-05-17 13:24:23 +10:00
psychedelicious
9c0d44b412
feat(ui): split workflow editor settings to separate slice
...
We need the undoable slice to be only undoable state - settings are not undoable.
2024-05-17 13:24:23 +10:00
psychedelicious
27826369f0
feat(ui): make nodesSlice undoable
2024-05-17 13:24:23 +10:00
H0onnn
31d8b50276
[Refactor] Update min and max values for LoRACard weight input
2024-05-17 10:38:26 +10:00
psychedelicious
40b4fa7238
feat(ui): SDXL clip skip
...
Uses the same CLIP Skip value for both CLIP1 and CLIP2.
Adjusted SDXL CLIP Skip min/max/markers to be within the valid range (0 to 11).
Closes #4583
2024-05-16 07:49:30 -04:00
psychedelicious
f489c818f1
docs(ui): add comments to nsfw & watermarker helpers
2024-05-15 14:09:44 +10:00
psychedelicious
af477fa295
tidy(ui): remove unused modelLoader from refiner helper
2024-05-15 14:09:44 +10:00
psychedelicious
0ff0290735
tidy(ui): use Invocation<> helper type in canvas graph builders, elsewhere
2024-05-15 14:09:44 +10:00
psychedelicious
67dbe6d949
tidy(ui): use Invocation<> helper type in OG control adapters
2024-05-15 14:09:44 +10:00
psychedelicious
4c3c2297b9
tidy(ui): organise graph builder files
2024-05-15 14:09:44 +10:00
psychedelicious
cadea55521
tidy(ui): organise graph builder files
2024-05-15 14:09:44 +10:00
psychedelicious
c8f30b1392
tidy(ui): move testing-only types to test file
2024-05-15 14:09:44 +10:00
psychedelicious
3d14a98abf
tidy(ui): use Invocation<> type in control layers types
2024-05-15 14:09:44 +10:00
psychedelicious
77024bfca7
fix(ui): fix sdxl generation mode metadata
2024-05-15 14:09:44 +10:00
psychedelicious
4a1c3786a1
tidy(ui): organise CL graph builder
2024-05-15 14:09:44 +10:00
psychedelicious
b239891986
tidy(ui): clean up base model handling in graph builder
2024-05-15 14:09:44 +10:00
psychedelicious
9fb03d43ff
tests(ui): get coverage to 100% for graph builder
2024-05-15 14:09:44 +10:00
psychedelicious
bdc59786bd
tidy(ui): clean up graph builder helper functions
2024-05-15 14:09:44 +10:00
psychedelicious
fb6e926500
tidy(ui): remove extraneous graph validate calls
2024-05-15 14:09:44 +10:00
psychedelicious
48ccd63dba
feat(ui): use integrated metadata helper
2024-05-15 14:09:44 +10:00
psychedelicious
ee647a05dc
feat(ui): move metadata util to graph class
...
No good reason to have it be separate. A bit cleaner this way.
2024-05-15 14:09:44 +10:00
psychedelicious
154b52ca4d
docs(ui): update docstrings for Graph builder
2024-05-15 14:09:44 +10:00
psychedelicious
5dd460c3ce
chore(ui): knip
2024-05-15 14:09:44 +10:00
psychedelicious
4897ce2a13
tidy(ui): remove unused files
2024-05-15 14:09:44 +10:00
psychedelicious
5425526d50
feat(ui): use graph builder for generation tab sdxl
2024-05-15 14:09:44 +10:00
psychedelicious
5a4b050e66
feat(ui): use asserts in graph builder
2024-05-15 14:09:44 +10:00
psychedelicious
8d39520232
feat(ui): port NSFW and watermark nodes to graph builder
2024-05-15 14:09:44 +10:00
psychedelicious
04d12a1e98
feat(ui): add HRF graph builder helper
2024-05-15 14:09:44 +10:00
psychedelicious
39aa70963b
docs(ui): update docstrings for addGenerationTabSeamless
2024-05-15 14:09:44 +10:00
psychedelicious
5743254a41
fix(ui): use arrays for edge methods
2024-05-15 14:09:44 +10:00
psychedelicious
c538ffea26
tidy(ui): remove console.log
2024-05-15 14:09:44 +10:00
psychedelicious
e8d3a7c870
feat(ui): support multiple fields for getEdgesTo
, getEdgesFrom
, deleteEdgesTo
, deleteEdgesFrom
2024-05-15 14:09:44 +10:00