Skip to content

[refactor] Type createNode options parameter#9262

Merged
christian-byrne merged 2 commits intomainfrom
refactor/typed-create-node-options
Mar 4, 2026
Merged

[refactor] Type createNode options parameter#9262
christian-byrne merged 2 commits intomainfrom
refactor/typed-create-node-options

Conversation

@Myestery
Copy link
Contributor

@Myestery Myestery commented Feb 26, 2026

Summary

Narrow CreateNodeOptions from Partial<Omit<LGraphNode, ...>> (exposing hundreds of properties/methods) to an explicit interface listing only creation-time properties.

Changes

  • Replace Partial<Omit<LGraphNode, 'constructor' | 'inputs' | 'outputs'>> with explicit CreateNodeOptions interface containing only: pos, size, properties, flags, mode, color, bgcolor, boxcolor, title, shape, inputs, outputs
  • Rename local CreateNodeOptions in createModelNodeFromAsset.ts to ModelNodeCreateOptions to avoid collision

Ecosystem verification

GitHub code search across ~50 repos confirms only pos and outputs are used externally. All covered by the narrowed interface.

Fixes #9276
Fixes #4740

Replace untyped Dictionary<unknown> parameter and @ts-expect-error
suppression in createNode with a proper CreateNodeOptions interface
that extends Partial<Omit<LGraphNode, 'constructor' | 'inputs' | 'outputs'>>
and widens inputs/outputs to accept partial slot objects.

Fixes #4740
@Myestery Myestery requested a review from a team as a code owner February 26, 2026 22:12
@Myestery Myestery added enhancement New feature or request area:nodes labels Feb 26, 2026
@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Feb 26, 2026
@github-actions
Copy link

github-actions bot commented Feb 26, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 02/27/2026, 04:03:38 AM UTC

Links

@github-actions
Copy link

github-actions bot commented Feb 26, 2026

🎭 Playwright: ✅ 545 passed, 0 failed · 6 flaky

📊 Browser Reports
  • chromium: View Report (✅ 532 / ❌ 0 / ⚠️ 6 / ⏭️ 10)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 10 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 26, 2026

📝 Walkthrough

Walkthrough

Introduces a typed CreateNodeOptions interface, updates public APIs to use it (replacing untyped dictionaries), narrows positional typing in canvas code, replaces manual property copying with Object.assign in node creation, and renames one local option type to ModelNodeCreateOptions.

Changes

Cohort / File(s) Summary
Core types & API export
src/lib/litegraph/src/interfaces.ts, src/lib/litegraph/src/litegraph.ts
Add new CreateNodeOptions interface (creation-time fields like pos, size, properties, flags, inputs/outputs, styling, etc.) and export it from litegraph public types.
Node creation implementation
src/lib/litegraph/src/LiteGraphGlobal.ts
Change createNode signature to options?: CreateNodeOptions; replace manual for-in property copy with Object.assign(node, options) when applying options.
Canvas positioning
src/lib/litegraph/src/LGraphCanvas.ts
Tighten tuple typing: annotate positional tuple as const pos: [number, number] = [nodeX, nodeY].
Service usage
src/services/litegraphService.ts
addNodeOnGraph now accepts options: CreateNodeOptions = {} instead of a loose Record with pos. Runtime behavior for defaulting pos unchanged.
Local option rename
src/platform/assets/utils/createModelNodeFromAsset.ts
Renamed local CreateNodeOptions type to ModelNodeCreateOptions and updated the function signature to use it (no runtime logic changes).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I nudge a node with tidy prose,
Typed options where the wildness goes,
I stamp pos, color, slots with care,
A hop, a merge — a method fair! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title '[refactor] Type createNode options parameter' accurately and concisely describes the main change of refactoring the type signature of the createNode options parameter.
Description check ✅ Passed The PR description covers the core changes and linked issues, though it omits the 'Breaking' and 'Dependencies' sections from the template.
Linked Issues check ✅ Passed The PR successfully addresses both linked issues: #9276 by narrowing CreateNodeOptions to explicit properties and auditing ecosystem usage, and #4740 by replacing untyped Dictionary assignments with proper Object.assign and typed options.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the PR objectives: type narrowing, interface definition, and collision resolution. No extraneous modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/typed-create-node-options

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Feb 26, 2026

📦 Bundle: 4.46 MB gzip 🟢 -143 B

Details

Summary

  • Raw size: 20.9 MB baseline 20.9 MB — 🟢 -17 B
  • Gzip: 4.46 MB baseline 4.46 MB — 🟢 -143 B
  • Brotli: 3.44 MB baseline 3.44 MB — 🟢 -70 B
  • Bundles: 228 current • 228 baseline • 108 added / 108 removed

Category Glance
Data & Services 🟢 -17 B (2.55 MB) · Vendor & Third-Party ⚪ 0 B (8.84 MB) · Other ⚪ 0 B (7.86 MB) · Graph Workspace ⚪ 0 B (1.02 MB) · Panels & Settings ⚪ 0 B (435 kB) · Views & Navigation ⚪ 0 B (72.1 kB) · + 5 more

App Entry Points — 17.9 kB (baseline 17.9 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-B5EoiX8m.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +6.34 kB 🔴 +5.5 kB
assets/index-CvcAPZBp.js (removed) 17.9 kB 🟢 -17.9 kB 🟢 -6.35 kB 🟢 -5.52 kB

Status: 1 added / 1 removed

Graph Workspace — 1.02 MB (baseline 1.02 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-QwbcNnEg.js (removed) 1.02 MB 🟢 -1.02 MB 🟢 -218 kB 🟢 -164 kB
assets/GraphView-t4IpD1oO.js (new) 1.02 MB 🔴 +1.02 MB 🔴 +218 kB 🔴 +164 kB

Status: 1 added / 1 removed

Views & Navigation — 72.1 kB (baseline 72.1 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-CMy3wOdx.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-D4Yny-jB.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudLoginView-CJOVaeSZ.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.19 kB 🔴 +2.82 kB
assets/CloudLoginView-XU7eQ4Hr.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.19 kB 🟢 -2.82 kB
assets/CloudSignupView-BZo4H2NN.js (removed) 9.37 kB 🟢 -9.37 kB 🟢 -2.69 kB 🟢 -2.37 kB
assets/CloudSignupView-o_kzJGlQ.js (new) 9.37 kB 🔴 +9.37 kB 🔴 +2.7 kB 🔴 +2.35 kB
assets/UserCheckView-DfCL5WED.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/UserCheckView-DNPgh7E1.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/CloudLayoutView-B8yNpLQJ.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.1 kB 🟢 -1.83 kB
assets/CloudLayoutView-DMUsOv3Q.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.82 kB
assets/CloudForgotPasswordView-b9_aePzR.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.93 kB 🟢 -1.72 kB
assets/CloudForgotPasswordView-DlSxsyNi.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.93 kB 🔴 +1.7 kB
assets/CloudAuthTimeoutView-PG4Ib_Dz.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/CloudAuthTimeoutView-yMMt5jI6.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.54 kB
assets/CloudSubscriptionRedirectView-BRxmYeRj.js (removed) 4.75 kB 🟢 -4.75 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-DwrjBlof.js (new) 4.75 kB 🔴 +4.75 kB 🔴 +1.78 kB 🔴 +1.58 kB
assets/UserSelectView-BADWiKfD.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/UserSelectView-dQElvRoE.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.46 kB
assets/CloudSorryContactSupportView-Bypca0av.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-CI4MZk1L.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 435 kB (baseline 435 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BTmXPZDq.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.31 kB 🔴 +4.67 kB
assets/SecretsPanel-ChRyABYU.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.31 kB 🟢 -4.66 kB
assets/LegacyCreditsPanel-D3O_I7_d.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.56 kB 🟢 -4.89 kB
assets/LegacyCreditsPanel-DJlQMV79.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.56 kB 🔴 +4.88 kB
assets/SubscriptionPanel-C0HEpQkn.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.66 kB 🔴 +4.11 kB
assets/SubscriptionPanel-D0tldsEh.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.65 kB 🟢 -4.09 kB
assets/KeybindingPanel-Ctqq97iu.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.52 kB 🔴 +3.12 kB
assets/KeybindingPanel-DESzRQL2.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.52 kB 🟢 -3.12 kB
assets/AboutPanel-BGDk9l7p.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.46 kB
assets/AboutPanel-BPCnaP-y.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.47 kB
assets/ExtensionPanel-B4pQKvLo.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.36 kB
assets/ExtensionPanel-Czp7spkC.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.36 kB
assets/ServerConfigPanel-BZvHiNyX.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.13 kB 🟢 -1.92 kB
assets/ServerConfigPanel-C_uI6ggR.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.12 kB 🔴 +1.92 kB
assets/UserPanel-C3zOxhVZ.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/UserPanel-Mgqi1r-y.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +1.99 kB 🔴 +1.75 kB
assets/cloudRemoteConfig-CNaSfTJ8.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -708 B 🟢 -616 B
assets/cloudRemoteConfig-DMA4QICk.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +705 B 🔴 +613 B
assets/refreshRemoteConfig-Bh2Wkj4A.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -519 B 🟢 -447 B
assets/refreshRemoteConfig-DoR3VETQ.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +520 B 🔴 +466 B
assets/config-CGn5JFmU.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B5oF6TeI.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BVYOg4dh.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CBEvSL1z.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CGx1t8IZ.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CNcb_4nC.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cx1dZM6H.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dw-QS6Nb.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DXxgnCSn.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-GRFn4guL.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-mgwKIVQ2.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-s83B801I.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-D5yFJMQG.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -987 B
assets/auth-T5xeQmK3.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +987 B
assets/SignUpForm-BmqGE3yl.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/SignUpForm-DnggtlXq.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/UpdatePasswordContent-CH3eTBM_.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -944 B
assets/UpdatePasswordContent-DqKp-vl1.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +947 B
assets/firebaseAuthStore-BDwGRXD2.js (new) 788 B 🔴 +788 B 🔴 +386 B 🔴 +347 B
assets/firebaseAuthStore-BNjmgRe6.js (removed) 788 B 🟢 -788 B 🟢 -390 B 🟢 -351 B
assets/auth-CCsl1Uv1.js (removed) 357 B 🟢 -357 B 🟢 -226 B 🟢 -194 B
assets/auth-D4CjJxqf.js (new) 357 B 🔴 +357 B 🔴 +226 B 🔴 +216 B
assets/PasswordFields-DLbVLg8O.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-D6ioir1T.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 736 B (baseline 736 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BjfXoNmE.js (removed) 736 B 🟢 -736 B 🟢 -381 B 🟢 -329 B
assets/useSubscriptionDialog-Bk2ljzhv.js (new) 736 B 🔴 +736 B 🔴 +379 B 🔴 +328 B

Status: 1 added / 1 removed

UI Components — 47 kB (baseline 47 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-B2L4jV2e.js (new) 9.84 kB 🔴 +9.84 kB 🔴 +3.4 kB 🔴 +2.99 kB
assets/useTerminalTabs-D0WNz2zm.js (removed) 9.84 kB 🟢 -9.84 kB 🟢 -3.4 kB 🟢 -3 kB
assets/ComfyQueueButton-BDKIMHN1.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.23 kB
assets/ComfyQueueButton-BTFLUQvy.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.23 kB
assets/SubscribeButton-Cs4Hu-sU.js (new) 2.48 kB 🔴 +2.48 kB 🔴 +1.07 kB 🔴 +943 B
assets/SubscribeButton-LY_3a4tQ.js (removed) 2.48 kB 🟢 -2.48 kB 🟢 -1.07 kB 🟢 -945 B
assets/cloudFeedbackTopbarButton-B7MIrC7S.js (new) 1.59 kB 🔴 +1.59 kB 🔴 +850 B 🔴 +760 B
assets/cloudFeedbackTopbarButton-BvqVqAqV.js (removed) 1.59 kB 🟢 -1.59 kB 🟢 -855 B 🟢 -765 B
assets/ComfyQueueButton-fR9Z14Hl.js (removed) 793 B 🟢 -793 B 🟢 -395 B 🟢 -353 B
assets/ComfyQueueButton-Wv_dP0Vw.js (new) 793 B 🔴 +793 B 🔴 +394 B 🔴 +351 B
assets/Button-D1z3poyI.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-D1z3EKPy.js 1.16 kB 1.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-Bg4LklDe.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-DecBFGbM.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-CJNpTEnW.js 7.44 kB 7.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CnQQLXB-.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-sg8Jj4MY.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.55 MB (baseline 2.55 MB) • 🟢 -17 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-_4QhN_pl.js (removed) 1.75 MB 🟢 -1.75 MB 🟢 -393 kB 🟢 -296 kB
assets/dialogService-C1qGyMUR.js (new) 1.75 MB 🔴 +1.75 MB 🔴 +393 kB 🔴 +296 kB
assets/api-CfzgSLYO.js (removed) 678 kB 🟢 -678 kB 🟢 -153 kB 🟢 -122 kB
assets/api-DGsMgpc7.js (new) 678 kB 🔴 +678 kB 🔴 +153 kB 🔴 +122 kB
assets/load3dService-BTYg_PsB.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/load3dService-S-IXNUWy.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/extensionStore-BP2nXItq.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +4.21 kB 🔴 +3.7 kB
assets/extensionStore-NgjGqHT4.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -4.21 kB 🟢 -3.7 kB
assets/releaseStore-BzC9l-Ov.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-D0tOjHh6.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/keybindingService-Bqc8sJQ_.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/keybindingService-CPOBWpVX.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/bootstrapStore-BBfihdzQ.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -873 B 🟢 -790 B
assets/bootstrapStore-FcCX2Kri.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +871 B 🔴 +788 B
assets/userStore-DhwjeMAo.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +718 B 🔴 +673 B
assets/userStore-i4xJhHyb.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -721 B 🟢 -633 B
assets/audioService-DA6PHOvo.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -849 B 🟢 -729 B
assets/audioService-DDg_W9xH.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +849 B 🔴 +727 B
assets/releaseStore-Byv_d5mZ.js (new) 760 B 🔴 +760 B 🔴 +385 B 🔴 +342 B
assets/releaseStore-CAeL8alK.js (removed) 760 B 🟢 -760 B 🟢 -384 B 🟢 -347 B
assets/settingStore-4b8LogcJ.js (new) 744 B 🔴 +744 B 🔴 +387 B 🔴 +341 B
assets/settingStore-DjhdQ529.js (removed) 744 B 🟢 -744 B 🟢 -387 B 🟢 -345 B
assets/workflowDraftStore-BaA2R2o4.js (new) 736 B 🔴 +736 B 🔴 +379 B 🔴 +332 B
assets/workflowDraftStore-Dpsdc1Cb.js (removed) 736 B 🟢 -736 B 🟢 -380 B 🟢 -338 B
assets/dialogService-CkfFSe_r.js (removed) 725 B 🟢 -725 B 🟢 -369 B 🟢 -328 B
assets/dialogService-MW4z0V6Q.js (new) 725 B 🔴 +725 B 🔴 +367 B 🔴 +329 B
assets/serverConfigStore-EPk4OtIK.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Utilities & Hooks — 55.5 kB (baseline 55.5 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-AhaASDSx.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-JjX6esph.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-DsSi9bHO.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-n3zhVgDa.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useFeatureFlags-CRkH73sW.js (new) 4.14 kB 🔴 +4.14 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/useFeatureFlags-POItoyOx.js (removed) 4.14 kB 🟢 -4.14 kB 🟢 -1.23 kB 🟢 -1.06 kB
assets/useWorkspaceUI-B3s3b75G.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -703 B
assets/useWorkspaceUI-DGFPXk4i.js (new) 3 kB 🔴 +3 kB 🔴 +822 B 🔴 +704 B
assets/subscriptionCheckoutUtil-CwwcpD2x.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +956 B
assets/subscriptionCheckoutUtil-DDXKZWJa.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -962 B
assets/useErrorHandling-DbL5GSw-.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -630 B 🟢 -530 B
assets/useErrorHandling-f0bPiW1S.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +630 B 🔴 +535 B
assets/useWorkspaceSwitch-BEmXg-5E.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -543 B 🟢 -482 B
assets/useWorkspaceSwitch-Cin6XC80.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +544 B 🔴 +480 B
assets/useLoad3d-Bm0VxQPw.js (removed) 859 B 🟢 -859 B 🟢 -426 B 🟢 -386 B
assets/useLoad3d-uvS6dVXY.js (new) 859 B 🔴 +859 B 🔴 +424 B 🔴 +381 B
assets/audioUtils-Cig1JiSK.js (removed) 858 B 🟢 -858 B 🟢 -499 B 🟢 -403 B
assets/audioUtils-DTlxEhRM.js (new) 858 B 🔴 +858 B 🔴 +500 B 🔴 +404 B
assets/useLoad3dViewer-COJ0CSE3.js (removed) 838 B 🟢 -838 B 🟢 -410 B 🟢 -376 B
assets/useLoad3dViewer-CPFJYCAT.js (new) 838 B 🔴 +838 B 🔴 +409 B 🔴 +369 B
assets/useCurrentUser-B-zBJ8BT.js (removed) 722 B 🟢 -722 B 🟢 -375 B 🟢 -329 B
assets/useCurrentUser-IyUjSn1Y.js (new) 722 B 🔴 +722 B 🔴 +371 B 🔴 +328 B
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-CY7QMUhQ.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-Clzmwvt4.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Cddas8Zl.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-Cf_cbLlH.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 11 added / 11 removed

Vendor & Third-Party — 8.84 MB (baseline 8.84 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-DNX73mqE.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-DrYd4O-6.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BnCPTL0g.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DVmi2O2Z.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BnYkbQDM.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-DtiQ1dr9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-D2jVNnmE.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-MKpa1ZAW.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.86 MB (baseline 7.86 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-D3R3XjeQ.js (removed) 73.4 kB 🟢 -73.4 kB 🟢 -18.9 kB 🟢 -16.2 kB
assets/core-DI2z1NDR.js (new) 73.4 kB 🔴 +73.4 kB 🔴 +18.9 kB 🔴 +16.2 kB
assets/groupNode-BpeaPWb6.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.6 kB 🔴 +15.5 kB
assets/groupNode-LLcGe9QR.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.5 kB
assets/WidgetSelect-DaWl_FRn.js (new) 58.1 kB 🔴 +58.1 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/WidgetSelect-DkcqyPIc.js (removed) 58.1 kB 🟢 -58.1 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-DtPv24QL.js (new) 46.3 kB 🔴 +46.3 kB 🔴 +8.65 kB 🔴 +7.51 kB
assets/SubscriptionRequiredDialogContentWorkspace-DxcHsjTX.js (removed) 46.3 kB 🟢 -46.3 kB 🟢 -8.65 kB 🟢 -7.54 kB
assets/WidgetPainter-Cu0orGdI.js (removed) 32.5 kB 🟢 -32.5 kB 🟢 -7.96 kB 🟢 -7.07 kB
assets/WidgetPainter-XDMnrkEF.js (new) 32.5 kB 🔴 +32.5 kB 🔴 +7.96 kB 🔴 +7.08 kB
assets/Load3DControls-BYEiAWXu.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.65 kB
assets/Load3DControls-CQ62Malo.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.64 kB
assets/WorkspacePanelContent-BwpkW05H.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.15 kB 🟢 -5.39 kB
assets/WorkspacePanelContent-D9gIx_4t.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.14 kB 🔴 +5.39 kB
assets/SubscriptionRequiredDialogContent-BrxD7XpT.js (new) 25.7 kB 🔴 +25.7 kB 🔴 +6.57 kB 🔴 +5.78 kB
assets/SubscriptionRequiredDialogContent-C-UXKX2H.js (removed) 25.7 kB 🟢 -25.7 kB 🟢 -6.57 kB 🟢 -5.76 kB
assets/Load3dViewerContent-Bids7HqM.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/Load3dViewerContent-q_Vwc3Cl.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.5 kB
assets/WidgetImageCrop-BkNJ7Tyq.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.51 kB 🟢 -4.85 kB
assets/WidgetImageCrop-D6Ismj2n.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.51 kB 🔴 +4.86 kB
assets/SubscriptionPanelContentWorkspace-D6pu3JxH.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.06 kB 🔴 +4.46 kB
assets/SubscriptionPanelContentWorkspace-DFBuB7_m.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.05 kB 🟢 -4.46 kB
assets/CurrentUserPopoverWorkspace-BrtZY4T_.js (new) 19.9 kB 🔴 +19.9 kB 🔴 +4.88 kB 🔴 +4.35 kB
assets/CurrentUserPopoverWorkspace-G4aDfZp5.js (removed) 19.9 kB 🟢 -19.9 kB 🟢 -4.88 kB 🟢 -4.35 kB
assets/SignInContent-BF7QeWRC.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.75 kB 🔴 +4.16 kB
assets/SignInContent-njloRgFR.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.75 kB 🟢 -4.17 kB
assets/WidgetInputNumber-BzA9Shkp.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.75 kB 🟢 -4.22 kB
assets/WidgetInputNumber-Cgz0unvi.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.75 kB 🔴 +4.22 kB
assets/WidgetRecordAudio-DbFA-hHF.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.95 kB 🟢 -4.42 kB
assets/WidgetRecordAudio-EoQl7mn4.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.94 kB 🔴 +4.42 kB
assets/Load3D-5-o7d2Ad.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.51 kB
assets/Load3D-COkonswP.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.52 kB
assets/load3d-BO65KaKA.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.19 kB 🟢 -3.63 kB
assets/load3d-DLuhPwGQ.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.19 kB 🔴 +3.64 kB
assets/AudioPreviewPlayer-ByP77rKs.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.19 kB 🔴 +2.87 kB
assets/AudioPreviewPlayer-SSNbiWnh.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.19 kB 🟢 -2.87 kB
assets/changeTracker-B93gC5cB.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.9 kB 🔴 +2.55 kB
assets/changeTracker-DrwB9D5G.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.9 kB 🟢 -2.55 kB
assets/nodeTemplates-COw1iSFN.js (removed) 9.29 kB 🟢 -9.29 kB 🟢 -3.26 kB 🟢 -2.86 kB
assets/nodeTemplates-xsxWfWI2.js (new) 9.29 kB 🔴 +9.29 kB 🔴 +3.25 kB 🔴 +2.86 kB
assets/InviteMemberDialogContent-B9ONFwr-.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.29 kB 🔴 +2 kB
assets/InviteMemberDialogContent-Dy94Piqg.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.29 kB 🟢 -2 kB
assets/Load3DConfiguration-kUVj-A4m.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.92 kB 🟢 -1.68 kB
assets/Load3DConfiguration-uIg4JClY.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-2zlYdDrH.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/CreateWorkspaceDialogContent-BqIBmkyF.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/onboardingCloudRoutes-CJRBqmxT.js (new) 5.41 kB 🔴 +5.41 kB 🔴 +1.84 kB 🔴 +1.61 kB
assets/onboardingCloudRoutes-DSZ8jBJc.js (removed) 5.41 kB 🟢 -5.41 kB 🟢 -1.84 kB 🟢 -1.6 kB
assets/FreeTierDialogContent-C0rqo1Je.js (new) 5.39 kB 🔴 +5.39 kB 🔴 +1.89 kB 🔴 +1.68 kB
assets/FreeTierDialogContent-Cnl1oR-e.js (removed) 5.39 kB 🟢 -5.39 kB 🟢 -1.9 kB 🟢 -1.68 kB
assets/EditWorkspaceDialogContent-B_MKE9dA.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.95 kB 🔴 +1.7 kB
assets/EditWorkspaceDialogContent-NrWny4tZ.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.95 kB 🟢 -1.7 kB
assets/ValueControlPopover-BRQDD9X1.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/ValueControlPopover-VShtSh6g.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/Preview3d-CKQapS5A.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/Preview3d-qjAEuiKT.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.56 kB 🔴 +1.36 kB
assets/CancelSubscriptionDialogContent-C-nNsCIF.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.78 kB 🔴 +1.56 kB
assets/CancelSubscriptionDialogContent-CwpEt7mo.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/DeleteWorkspaceDialogContent-BsMidhNI.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.63 kB 🟢 -1.42 kB
assets/DeleteWorkspaceDialogContent-CXCs2iQB.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.63 kB 🔴 +1.42 kB
assets/WidgetWithControl-a0H8YGam.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.78 kB 🟢 -1.59 kB
assets/WidgetWithControl-xweBa-7B.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.77 kB 🔴 +1.58 kB
assets/LeaveWorkspaceDialogContent-CEzodR74.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/LeaveWorkspaceDialogContent-xO28p2-T.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.57 kB 🔴 +1.37 kB
assets/RemoveMemberDialogContent-BX8bntXV.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.52 kB 🟢 -1.33 kB
assets/RemoveMemberDialogContent-CubV9yhh.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.52 kB 🔴 +1.33 kB
assets/RevokeInviteDialogContent-C9Vb2B7p.js (new) 3.95 kB 🔴 +3.95 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/RevokeInviteDialogContent-CJUYcDlW.js (removed) 3.95 kB 🟢 -3.95 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/InviteMemberUpsellDialogContent-7FlJ4lpD.js (new) 3.82 kB 🔴 +3.82 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-DjaK0AQR.js (removed) 3.82 kB 🟢 -3.82 kB 🟢 -1.4 kB 🟢 -1.23 kB
assets/tierBenefits-B95BJmqr.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.3 kB 🟢 -1.17 kB
assets/tierBenefits-zbkxECbb.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.3 kB 🔴 +1.18 kB
assets/saveMesh-BXWZ2yg7.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.45 kB 🔴 +1.29 kB
assets/saveMesh-Cz_U-XLQ.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.45 kB 🟢 -1.29 kB
assets/cloudSessionCookie--5h-EAOO.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.09 kB 🟢 -995 B
assets/cloudSessionCookie-BppcMX5P.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.09 kB 🔴 +972 B
assets/GlobalToast-CCC-QMcS.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/GlobalToast-y_t_GG7L.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/SubscribeToRun-DMQIE4nS.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -896 B
assets/SubscribeToRun-VHJ_IvZT.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +888 B
assets/CloudRunButtonWrapper-BwXfS42A.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +788 B 🔴 +705 B
assets/CloudRunButtonWrapper-njIR2X_t.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -790 B 🟢 -719 B
assets/previousFullPath-Dil5Rl_B.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -648 B 🟢 -573 B
assets/previousFullPath-FZjRQ8A7.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +652 B 🔴 +576 B
assets/cloudBadges-DppBTe6Y.js (new) 1.36 kB 🔴 +1.36 kB 🔴 +703 B 🔴 +614 B
assets/cloudBadges-Rl6ndKHD.js (removed) 1.36 kB 🟢 -1.36 kB 🟢 -705 B 🟢 -619 B
assets/cloudSubscription-CxNlgR5a.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -656 B 🟢 -571 B
assets/cloudSubscription-DrJfVljD.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +654 B 🔴 +568 B
assets/Load3D-Ber43Btd.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -497 B 🟢 -449 B
assets/Load3D-Ce7WWG90.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +496 B 🔴 +441 B
assets/nightlyBadges-BpkynF5l.js (removed) 1 kB 🟢 -1 kB 🟢 -529 B 🟢 -472 B
assets/nightlyBadges-Q0ZGHJPV.js (new) 1 kB 🔴 +1 kB 🔴 +531 B 🔴 +474 B
assets/Load3dViewerContent-Bd9A4_jX.js (removed) 993 B 🟢 -993 B 🟢 -468 B 🟢 -418 B
assets/Load3dViewerContent-DIFpU1N8.js (new) 993 B 🔴 +993 B 🔴 +467 B 🔴 +413 B
assets/SubscriptionPanelContentWorkspace-BxPnxUb6.js (removed) 920 B 🟢 -920 B 🟢 -440 B 🟢 -382 B
assets/SubscriptionPanelContentWorkspace-LIJEALov.js (new) 920 B 🔴 +920 B 🔴 +438 B 🔴 +380 B
assets/graphHasMissingNodes-Ch_F5rcN.js (new) 761 B 🔴 +761 B 🔴 +373 B 🔴 +321 B
assets/graphHasMissingNodes-Cj4MjWae.js (removed) 761 B 🟢 -761 B 🟢 -374 B 🟢 -320 B
assets/changeTracker-B4TmebNf.js (new) 757 B 🔴 +757 B 🔴 +385 B 🔴 +338 B
assets/changeTracker-BrXx_g-i.js (removed) 757 B 🟢 -757 B 🟢 -386 B 🟢 -338 B
assets/WidgetLegacy-C5mcOKAC.js (removed) 745 B 🟢 -745 B 🟢 -385 B 🟢 -342 B
assets/WidgetLegacy-Cprx1EcK.js (new) 745 B 🔴 +745 B 🔴 +383 B 🔴 +336 B
assets/WidgetInputNumber-Bh6UIJdf.js (removed) 469 B 🟢 -469 B 🟢 -266 B 🟢 -229 B
assets/WidgetInputNumber-CvN7da7k.js (new) 469 B 🔴 +469 B 🔴 +262 B 🔴 +228 B
assets/AnimationControls-e1OB6oJR.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-BKNHRD6l.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-DQKI7wOs.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-D9MrYETV.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CuEodz4y.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B-AdR9IA.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CbkxT8K8.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CJGmjcIS.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CMaLgTTb.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cw07MMbJ.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D7EtdE6o.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DknEFpK3.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ds6WuXnw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dvq-F-mb.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-pUOay9Eo.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-u2AZ8xU4.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-htt0vt7m.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Bcia7X9c.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-DI0OPWoR.js 531 kB 531 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B_Wsy2zX.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BgoL-5j1.js 171 kB 171 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BgP6H8V2.js 178 kB 178 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BHnRTSDV.js 153 kB 153 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BVdfMmEN.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CplVY01V.js 185 kB 185 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D3J6T63F.js 207 kB 207 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D8ud0Hl5.js 130 kB 130 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DEL_HfgI.js 156 kB 156 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DQyIQ6JB.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Y59dVx3K.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-Dqa2c7nZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DLiWNcHw.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BLQErkwF.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-NQGNpa4H.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-0crUoXWV.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-sJMrm9jB.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-4cn4-gG9.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B5k4lNE3.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BJNVnuoz.js 402 kB 402 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-bylbcqSc.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CU0-WQTL.js 489 kB 489 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D1sHTs_-.js 362 kB 362 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DedOJsaf.js 414 kB 414 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-QD8mdHRS.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Rqekep7N.js 397 kB 397 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-rUOYRJo0.js 394 kB 394 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-wEnA0xcT.js 389 kB 389 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BIYdg9E5.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-C_7cycpB.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-CtKEtoXB.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-DVkw5nPu.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-CbNGuSYA.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-DVSfLULk.js 2.01 kB 2.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-D-ZhKuWc.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-NeEr3XWN.js 586 B 586 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BYbwNME9.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-GzA4D-L-.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-BtoXUSiF.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-DCbDfd19.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-CIcV8pqy.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DZSYhGzO.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-oYMwrOjF.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-0CncUIzA.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-TvCt3ARa.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-Cqdttdn1.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DN03zIgB.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-B7IIifV6.js 3.96 kB 3.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-CTquGMvp.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-Br_tbhcL.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 52 added / 52 removed

@github-actions
Copy link

github-actions bot commented Feb 26, 2026

⚡ Performance Report

Metric Baseline PR Δ
canvas-idle: style recalcs 124 125 +1% ⚪
canvas-idle: layouts 0 0 +0% ⚪
canvas-idle: task duration 366ms 458ms +25% 🔴
canvas-mouse-sweep: style recalcs 161 174 +8% ⚪
canvas-mouse-sweep: layouts 12 12 +0% ⚪
canvas-mouse-sweep: task duration 751ms 785ms +5% ⚪
dom-widget-clipping: style recalcs 43 41 -5% ⚪
dom-widget-clipping: layouts 0 0 +0% ⚪
dom-widget-clipping: task duration 372ms 338ms -9% ⚪
Raw data
{
  "timestamp": "2026-02-27T04:05:23.177Z",
  "gitSha": "b888d9e5333a0e0a6665507dc417eefb146faddb",
  "branch": "refactor/typed-create-node-options",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2057.9369999999813,
      "styleRecalcs": 125,
      "styleRecalcDurationMs": 19.741000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 457.51200000000006,
      "heapDeltaBytes": -2095684
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1895.103000000006,
      "styleRecalcs": 174,
      "styleRecalcDurationMs": 50.606,
      "layouts": 12,
      "layoutDurationMs": 3.621,
      "taskDurationMs": 785.2099999999999,
      "heapDeltaBytes": -3900884
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 555.6569999999965,
      "styleRecalcs": 41,
      "styleRecalcDurationMs": 11.928,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 337.888,
      "heapDeltaBytes": 6709840
    }
  ]
}

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/lib/litegraph/src/litegraph.ts (1)

94-94: Avoid expanding barrel exports unless this must be part of the public API.

This adds another re-export from a /src barrel. If only internal callers need the type, prefer importing CreateNodeOptions directly from ./interfaces at use sites.

As per coding guidelines: "Don't use barrel files (e.g., /some/package/index.ts) to re-export within /src" and "Minimize the surface area (exported values) of each module and composable."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/lib/litegraph/src/litegraph.ts` at line 94, Remove CreateNodeOptions from
the exported list in litegraph.ts and instead import CreateNodeOptions directly
from its defining module (./interfaces) at the places that consume it; update
any files currently relying on the new re-export to import CreateNodeOptions
from ./interfaces, leaving litegraph.ts exports unchanged to avoid expanding the
/src barrel surface area.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/lib/litegraph/src/litegraph.ts`:
- Line 94: Remove CreateNodeOptions from the exported list in litegraph.ts and
instead import CreateNodeOptions directly from its defining module
(./interfaces) at the places that consume it; update any files currently relying
on the new re-export to import CreateNodeOptions from ./interfaces, leaving
litegraph.ts exports unchanged to avoid expanding the /src barrel surface area.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fb93a5 and 312435d.

📒 Files selected for processing (5)
  • src/lib/litegraph/src/LGraphCanvas.ts
  • src/lib/litegraph/src/LiteGraphGlobal.ts
  • src/lib/litegraph/src/interfaces.ts
  • src/lib/litegraph/src/litegraph.ts
  • src/services/litegraphService.ts

slot_index?: number
}

/** Options for {@link LiteGraphGlobal.createNode}. Shallow-copied onto the new node. */
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: src/platform/assets/utils/createModelNodeFromAsset.ts already defines a local interface CreateNodeOptions { position?: Point } with a completely different shape, and it imports from the same @/lib/litegraph/src/litegraph barrel. Now that this new CreateNodeOptions is exported from that barrel, any future import will shadow or conflict with the local one. Worth renaming one of them (e.g. the local one to ModelNodeCreateOptions) or acknowledging the collision.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done: renamed to ModelNodeCreateOptions in the previous commit

}

/** Options for {@link LiteGraphGlobal.createNode}. Shallow-copied onto the new node. */
export interface CreateNodeOptions extends Partial<
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick (non-blocking): constructor is not a member of keyof LGraphNode (TypeScript class instance types don't include it), so Omit<LGraphNode, 'constructor' | ...> is equivalent to Omit<LGraphNode, 'inputs' | 'outputs'>. Keeping it is harmless as a guard, just noting it's a no-op today.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the interface no longer extends Partial<Omit<LGraphNode, ...>>, it's an explicit property list

// @ts-expect-error #577 Requires interface
node[i] = options[i]
}
Object.assign(node, options)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note (non-blocking): the old for...in loop traversed the prototype chain, while Object.assign only copies own enumerable properties. That's actually safer behavior - just flagging the subtle semantic difference in case any caller relied on inherited properties (unlikely with plain object literals).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged: all callers pass plain object literals, so the behavior change is safe. The stricter semantics are actually preferable here

@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Feb 27, 2026
@Myestery Myestery assigned christian-byrne and unassigned Myestery Feb 27, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/lib/litegraph/src/interfaces.ts`:
- Around line 392-393: The types for the node slot arrays allow missing required
fields; tighten the types for the properties `inputs` and `outputs` (currently
declared as `Partial<INodeInputSlot>[]` and `Partial<INodeOutputSlot>[]`) to
require at least a `name` property so malformed slots can't be created—e.g.,
change each to a union that intersects Partial with `{ name: string }` (e.g.,
`(Partial<INodeInputSlot> & { name: string })[]`) and apply the analogous change
for `INodeOutputSlot` so `outputs` become `(Partial<INodeOutputSlot> & { name:
string })[]`.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 312435d and 425084c.

📒 Files selected for processing (2)
  • src/lib/litegraph/src/interfaces.ts
  • src/platform/assets/utils/createModelNodeFromAsset.ts

Comment on lines +392 to +393
inputs?: Partial<INodeInputSlot>[]
outputs?: Partial<INodeOutputSlot>[]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's find the interfaces.ts file and examine the current type definitions
fd "interfaces\.ts" src/lib/litegraph --exec wc -l {}

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 109


🏁 Script executed:

# Look at the CreateNodeOptions type and related interfaces
rg -n "type CreateNodeOptions|interface CreateNodeOptions" --type ts src/lib/litegraph

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 146


🏁 Script executed:

# Find the INodeInputSlot and INodeOutputSlot definitions
rg -n "interface INodeInputSlot|interface INodeOutputSlot" --type ts src/lib/litegraph

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 254


🏁 Script executed:

# Search for createNode function calls to see actual usage patterns
rg -n "createNode\s*\(" --type ts -C 2 src/lib/litegraph

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 14236


🏁 Script executed:

# Search for where inputs and outputs are being set in node creation context
rg -n "inputs\s*:\s*\[" --type ts -C 2 src/lib/litegraph | head -50

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 3957


🏁 Script executed:

# Also check for outputs assignments
rg -n "outputs\s*:\s*\[" --type ts -C 2 src/lib/litegraph | head -50

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 3337


🏁 Script executed:

# Read the interfaces.ts file around the relevant definitions
sed -n '355,400p' src/lib/litegraph/src/interfaces.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1102


🏁 Script executed:

# Read more to see INodeSlot definition
sed -n '350,365p' src/lib/litegraph/src/interfaces.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 536


🏁 Script executed:

# Search for all usages of inputs/outputs in CreateNodeOptions context
# to understand if empty arrays and partial objects are common
rg "inputs\s*:\s*\[\s*\]|outputs\s*:\s*\[\s*\]" --type ts src/lib/litegraph -C 1

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 2888


🏁 Script executed:

# Check if there are any createNode calls that pass inputs/outputs with incomplete fields
rg "createNode\s*\([^)]*\{[^}]*inputs|outputs" --type ts -A 5 src/lib/litegraph | head -80

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 5485


🏁 Script executed:

# Look for any createNode calls with inputs/outputs that have incomplete field definitions
# Search for patterns where inputs/outputs have objects but might be missing name or type
rg "inputs\s*:\s*\[\s*\{" --type ts -A 3 src/lib/litegraph | grep -v "name\|type"

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 12762


🏁 Script executed:

# Check the actual createNode implementation to see how it handles inputs/outputs
rg -n "createNode\(" --type ts -A 20 src/lib/litegraph/src/LiteGraphGlobal.ts | head -80

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 668


🏁 Script executed:

# Look for SubgraphConversion test's createNode to understand the test helper
sed -n '16,50p' src/lib/litegraph/src/subgraph/SubgraphConversion.test.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1153


🏁 Script executed:

# Look at how createNode actually uses the inputs/outputs from CreateNodeOptions
sed -n '531,600p' src/lib/litegraph/src/LiteGraphGlobal.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1863


🏁 Script executed:

# Check if there are any real cases where inputs/outputs objects are provided without name field
rg "inputs\s*:\s*\[\s*\{[^}]*\}" --type ts src/lib/litegraph -A 1 | grep -B 1 -v "name"

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 10134


🏁 Script executed:

# Search for actual complete usage of createNode with inputs/outputs options
rg "LiteGraph\.createNode\([^)]*inputs:|LiteGraph\.createNode\([^)]*outputs:" --type ts -B 2 -A 5 src/lib/litegraph

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 52


Tighten inputs/outputs slot types to require core fields.

The current Partial<INodeInputSlot>[] and Partial<INodeOutputSlot>[] types allow creating nodes with incomplete slot objects (e.g., missing name). Consider requiring at least the name field—e.g., (Partial<INodeInputSlot> & { name: string })[]—to enforce stronger compile-time guarantees and prevent malformed slot definitions at runtime.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/lib/litegraph/src/interfaces.ts` around lines 392 - 393, The types for
the node slot arrays allow missing required fields; tighten the types for the
properties `inputs` and `outputs` (currently declared as
`Partial<INodeInputSlot>[]` and `Partial<INodeOutputSlot>[]`) to require at
least a `name` property so malformed slots can't be created—e.g., change each to
a union that intersects Partial with `{ name: string }` (e.g.,
`(Partial<INodeInputSlot> & { name: string })[]`) and apply the analogous change
for `INodeOutputSlot` so `outputs` become `(Partial<INodeOutputSlot> & { name:
string })[]`.

@christian-byrne christian-byrne merged commit 82750d6 into main Mar 4, 2026
37 checks passed
@christian-byrne christian-byrne deleted the refactor/typed-create-node-options branch March 4, 2026 22:01
Myestery added a commit that referenced this pull request Mar 5, 2026
## Summary
Narrow `CreateNodeOptions` from `Partial<Omit<LGraphNode, ...>>`
(exposing hundreds of properties/methods) to an explicit interface
listing only creation-time properties.

## Changes
- Replace `Partial<Omit<LGraphNode, 'constructor' | 'inputs' |
'outputs'>>` with explicit `CreateNodeOptions` interface containing
only: `pos`, `size`, `properties`, `flags`, `mode`, `color`, `bgcolor`,
`boxcolor`, `title`, `shape`, `inputs`, `outputs`
- Rename local `CreateNodeOptions` in `createModelNodeFromAsset.ts` to
`ModelNodeCreateOptions` to avoid collision

## Ecosystem verification
GitHub code search across ~50 repos confirms only `pos` and `outputs`
are used externally. All covered by the narrowed interface.

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

Labels

area:nodes enhancement New feature or request size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Narrow CreateNodeOptions to explicit Pick of creation-time properties [DevTask] Replace untyped property assignment in createNode

2 participants