Skip to content

Conversation

@psychedelicious
Copy link
Contributor

@psychedelicious psychedelicious commented Feb 13, 2024

What type of PR is this? (check all applicable)

  • Refactor
  • Feature
  • Bug Fix
  • Optimization
  • Documentation Update
  • Community Node Submission

TODO

  • update workflow docs
  • test thoroughly (maybe even actual tests!?)

Workflow Schema v3

The changes aim to deduplicate data between workflows and node templates, decoupling workflows from internal implementation details. A good amount of data that was needlessly duplicated from the node template to the workflow is removed.

These changes substantially reduce the file size of workflows (and therefore the images with embedded workflows):

  • Default T2I SD1.5 workflow JSON is reduced from 23.7kb (798 lines) to 10.9kb (407 lines).
  • Default tiled upscale workflow JSON is reduced from 102.7kb (3341 lines) to 51.9kb (1774 lines).

The trade-off is that we need to reference node templates to get things like the field type and other things. In practice, this is a non-issue, because we need a node template to do anything with a node anyways.

Schema Deduplication Changes

  • Field types are not included in the workflow. They are always pulled from the node templates.

The field type is now properly an internal implementation detail and we can change it as needed. Previously this would require a migration for the workflow itself. With the v3 schema, the structure of a field type is an internal implementation detail that we are free to change as we see fit.

  • Workflow nodes no long have an outputs property and there is no longer such a thing as a FieldOutputInstance. These are only on the templates.

These were never referenced at a time when we didn't also have the templates available, and there'd be no reason to do so.

  • Node width and height are no longer stored in the node.

These weren't used. Also, per https://reactflow.dev/api-reference/types/node, we shouldn't be programmatically changing these properties. A future enhancement can properly add node resizing.

Other Changes

  • nodeTemplates slice is merged back into nodesSlice as nodes.templates. Turns out it's just a hassle having these separate in separate slices.

  • Workflow migration logic updated to support the new schema. V1 workflows migrate all the way to v3 now.

  • Changes throughout the nodes code to accommodate the above changes.

Related Tickets & Documents

  • Related Issue #
  • Closes #

QA Instructions, Screenshots, Recordings

Merge Plan

Added/updated tests?

  • Yes
  • No : please replace this line with details on why tests
    have not been included

[optional] Are there any post deployment tasks we need to perform?

@github-actions github-actions bot added the frontend PRs that change frontend files label Feb 13, 2024
@psychedelicious
Copy link
Contributor Author

Note that this includes a full copy-paste of all workflow types and zod schemas.

This allows us to parse and validate each version of workflow schema, making workflow migration simpler. Perhaps a future enhancement could be to update the migration logic in such a way that we don't need the old schemas.

There aren't as many changes here it seems. This PR would be a net reduction in code if we weren't retaining the old schemas.

@github-actions github-actions bot added the frontend-deps PRs that change frontend dependencies label Feb 13, 2024
The changes aim to deduplicate data between workflows and node templates, decoupling workflows from internal implementation details. A good amount of data that was needlessly duplicated from the node template to the workflow is removed.

These changes substantially reduce the file size of workflows (and therefore the images with embedded workflows):

- Default T2I SD1.5 workflow JSON is reduced from 23.7kb (798 lines) to 10.9kb (407 lines).
- Default tiled upscale workflow JSON is reduced from 102.7kb (3341 lines) to 51.9kb (1774 lines).

The trade-off is that we need to reference node templates to get things like the field type and other things. In practice, this is a non-issue, because we need a node template to do anything with a node anyways.

- Field types are not included in the workflow. They are always pulled from the node templates.

The field type is now properly an internal implementation detail and we can change it as needed. Previously this would require a migration for the workflow itself. With the v3 schema, the structure of a field type is an internal implementation detail that we are free to change as we see fit.

- Workflow nodes no long have an `outputs` property and there is no longer such a thing as a `FieldOutputInstance`. These are only on the templates.

These were never referenced at a time when we didn't also have the templates available, and there'd be no reason to do so.

- Node width and height are no longer stored in the node.

These weren't used. Also, per https://reactflow.dev/api-reference/types/node, we shouldn't be programmatically changing these properties. A future enhancement can properly add node resizing.

- `nodeTemplates` slice is merged back into `nodesSlice` as `nodes.templates`. Turns out it's just a hassle having these separate in separate slices.

- Workflow migration logic updated to support the new schema. V1 workflows migrate all the way to v3 now.

- Changes throughout the nodes code to accommodate the above changes.
- Add vitest.
- Consolidate vite configs into single file (easier to config everything based on env for testing)
Unfortunately you cannot test for both a specific type of error and match its message. Splitting the error classes makes it easier to test expected error conditions.
@psychedelicious psychedelicious mentioned this pull request Feb 15, 2024
@psychedelicious
Copy link
Contributor Author

Superseded by next branch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

frontend PRs that change frontend files frontend-deps PRs that change frontend dependencies

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants