Skip to content

feat(ui): add a New project dialog to the Launchpad - #9913

Draft
joshistoast wants to merge 1 commit into
mainfrom
feat/new-project-dialog
Draft

joshistoast wants to merge 1 commit into
mainfrom
feat/new-project-dialog

Conversation

@joshistoast

@joshistoast joshistoast commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Creating a project from the Launchpad was a one-click button plus a caret menu of five starts; nothing let you choose a model, a size, a starting image or a workflow before the editor opened, and the project always opened with model defaults and a blank workflow.

The New project button now opens a dialog. The left rail lists the five starts (Generate, Canvas, Upscale, Video, Workflow) plus File (.invk)… import. Generate and Canvas panes use the shared ModelSelect and a size block (aspect-ratio chips derived from the model's native resolution, width/height with swap, live preview). Canvas adds Start from: Blank | Image, where Image offers upload, pick-from-gallery and From clipboard, and locks the canvas size to the image. The Workflow pane shows the workflow library (search, Browse/Yours, tags, grid) with Blank workflow preselected. The footer takes an optional name; Enter creates. The last start and model are remembered per account. The Home tiles keep the one-click path.

Create stages a one-shot, account-owned request and navigates to /app?new=true&intent=…; the session controller consumes it once after applying the intent (rename, generate settings as a system patch, library workflow load through the existing pending-load path, canvas document/bbox sizing). A start image is handed to the Canvas widget through a project-keyed one-shot store, so the canvas-operations import stays out of the editor boot graph. A request staged for another intent is dropped.

To share the library UI without adding an editor boot request, the editor's WorkflowLibraryDialog and WorkflowPublicationHost are now lazy boundaries in WorkflowWidgetChrome (the publication host latches in workflowUiStore once any publication intent is posted, so unanswered saves are still re-offered after switching projects), and isUpdatableSource/findProjectCopiesOf moved to a leaf core/workflowSource.ts so eager chrome code no longer imports modelRequirements. readClipboardImage moved to platform/browser/clipboardImage.ts.

QA Instructions

Run from invokeai/frontend/webv2:

  • pnpm lint — pass.
  • pnpm test — 629 files / 10 470 tests pass.
  • pnpm test:browser — 345 of 346 files pass; src/platform/ui/theme/ToastContrast.browser.test.tsx timed out on a hover once under a saturated worker pool and passes in isolation (28/28); unrelated to this change.
  • pnpm test:fixtures, pnpm test:performance:architecture, pnpm test:project-files:browser, pnpm test:accessibility:browser — pass (the check:release chain re-run from the point of the flake).
  • Browser verification against the mock backend (pnpm dev:mock): Generate with 3:2 + name → editor opens on Compose with that model, 624×416 and the name; Canvas + gallery image → Edit layout with a 512×576 bbox and a raster layer from the image; Workflow + library card → Automate layout with the picked workflow replacing the blank one; the editor's library dialog and Save-to-library dialog open after the lazy change; no console errors. The mock serves 1×1 "full" images, so the pixels of the start image were not visually confirmed; the layer and bbox were.

Performance (browser gate, measured; counts are requests/scripts at startup): Launchpad 30/26 → 29/25, editor-minimal 88/83 → 87/82, editor-canvas 97/92 → 96/91, editor-gallery 88/83 → 87/82, editor-workflow unchanged at 95/89. Editor static build graph 72/56 → 71/55. The one accepted growth: editor-workflow activated 7/6 → 8/7 (+4.6 KB) because the publication module now loads when the Workflow editor activates instead of at boot; features/workflow/queries.ts imports data/publication.ts, so no chunk group can hold it without a structural violation. Baselines were edited by hand to the measured counts and owner sets; no timings were re-recorded.

Review

Resolved: a stale request could land on a different start (now dropped on intent mismatch); tabbing through width/height turned a chip size into a custom "Free" size; Canvas "Image" with no image silently created a blank canvas; Create ran before architecture capabilities loaded and would have persisted fallback defaults; a chip-derived size did not follow a model change; blank Canvas starts left the bbox overhanging the 1024² document; the lazy publication host lost its mount latch on project switch, so unanswered library saves stopped being re-offered (regression test added). Remaining limitation: Upscale and Video panes only describe what is chosen in the editor; a video model picker and a project template system are follow-ups.

Compatibility / Rollout

Two additive account preferences (launchpadNewProjectIntent, launchpadNewProjectModelKey) with normalization defaults; no migration. No persisted project document or API change. The projects.newProjectStart string is removed with the caret menu.

Checklist

  • The PR has a short but descriptive title, suitable for a changelog
  • Meaningful regression coverage added / updated where needed; obsolete tests/code removed
  • Persisted-state and API changes include required migrations / compatibility validation
  • Relevant performance/efficiency opportunities considered; material claims have evidence
  • Material review findings resolved and relevant checks rerun
  • Documentation added / updated (if applicable)
  • Updated What's New copy (if doing a release after this PR)

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

Choose a start, model, size, start image (upload, gallery or clipboard), library workflow and name before the editor opens; a one-shot request seeds the new draft.
Lazy-load the editor's workflow library and publication dialogs so the shared library UI adds no editor boot request.
@github-actions github-actions Bot added frontend PRs that change frontend files docs PRs that change docs labels Oct 18, 2026
@lstein lstein added the 7.1 label Oct 19, 2026

This branch has not been deployed

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

Labels

7.1 docs PRs that change docs frontend PRs that change frontend files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants