Conversation
Preserve assigned point modes during handle editing and add regression coverage. Rename path edit actions to Apply/Cancel and update modifier hints. Keep vector path stroke width visually consistent across canvas zoom levels.
- add closed path creation from the starting point - improve handle direction selection and zoom-aware path interaction - add non-destructive whole-layer vector transforms - preserve editable geometry during vector layer operations - group path editing sessions into atomic undo steps
…Shoe/InvokeAI into feat(canvas)--Splines-tool
DustyShoe
marked this pull request as draft
September 19, 2026 11:39
DustyShoe
marked this pull request as ready for review
September 20, 2026 23:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds an end-to-end MVP for editable vector layers on the Canvas.
A
vector_layerstores multiple open or closed cubic Bezier paths. Path geometry remains editable and serializable untilthe user explicitly materializes it into a raster layer or inpaint mask. The implementation is frontend-only and is ready
for architecture, UX, and code review.
Core workflow:
User-facing workflow
Path creation
There is no separate Path Tool. With a vector layer selected, the existing Shapes tool creates editable outlines:
Vector shapes are outlines only. They are not stored as filled vector objects.
Vector Edit mode
A vector layer may contain multiple paths. In Edit mode:
Point modes are stored per anchor and can be assigned to the complete selection:
Additional editing operations:
intermediate Corner point; joining endpoints of the same path closes it.
Point, handle, path, and hit-area sizing remains usable across canvas zoom levels.
Path and layer operations
The vector layer menu contains whole-layer actions:
While Edit mode is active, right-clicking anywhere on the canvas opens the active path menu without changing the active
path or point selection. It provides:
Path-scoped transforms and materialization use the current in-progress geometry and keep Edit mode active. Operations
respect layer lock, visibility, disabled, and Canvas busy states.
Materialization
Materialization is explicit and nondestructive. It always creates a new target layer and preserves the source paths.
Implementation
vector_layerto the Canvas entity model, Redux state, selectors, adapters, renderers, layer UI, context menus,project serialization, validation, and undo handling
tracing, fills, and masks
Current limitations / out of scope
isClosed = true; visually overlapping open endpoints are not treated as closedVerification
pnpm test:run: 181 test files, 2365 tests passed, no type errorspnpm build: Knip, dependency-cycle analysis, ESLint, Prettier, TypeScript, Vitest, and production Vite build passedpnpm buildindocs: Astro build passed and all internal documentation links are valid