Skip to content

fix: prevent non-widget inputs on nested subgraphs from appearing as button widgets#9542

Merged
DrJKL merged 3 commits intomainfrom
drjkl/why-are-they-buttons
Mar 7, 2026
Merged

fix: prevent non-widget inputs on nested subgraphs from appearing as button widgets#9542
DrJKL merged 3 commits intomainfrom
drjkl/why-are-they-buttons

Conversation

@DrJKL
Copy link
Contributor

@DrJKL DrJKL commented Mar 7, 2026

Summary

Fix non-widget inputs on nested subgraphs appearing twice — once as slots and once as unresolved button widgets.

Changes

  • What: Add getTargetWidget() guard in the isSubgraphNode() branch of resolveSubgraphInputTarget, matching the existing check for non-subgraph nodes. Non-widget inputs (e.g. AUDIO, IMAGE) now return undefined instead of a bogus promotion entry.

Review Focus

resolveSubgraphInputTarget had an asymmetry: the non-subgraph branch checked getTargetWidget() before returning, but the isSubgraphNode() branch returned unconditionally for every input. For nested subgraphs where non-widget slots are linked through to inner SubgraphNode inputs, this created PromotedWidgetView entries that failed resolveDeepest() (falling back to type: 'button'), while the inputs also rendered as normal slot circles since input.widget was never set by _resolveInputWidget (which correctly skipped them).

┆Issue is synchronized with this Notion page by Unito

…button widgets

resolveSubgraphInputTarget unconditionally returned a promotion target for every input linked to a nested SubgraphNode, including non-widget inputs (e.g. AUDIO, IMAGE). This caused bogus PromotedWidgetView entries that failed to resolve (falling back to type 'button'), while the inputs also rendered as normal slot circles — appearing twice.

Add getTargetWidget() guard in the isSubgraphNode() branch, matching the existing check for non-subgraph nodes.

Amp-Thread-ID: https://ampcode.com/threads/T-019cca65-f6b1-71f4-b870-62056b704736
Co-authored-by: Amp <amp@ampcode.com>
@DrJKL DrJKL requested a review from a team as a code owner March 7, 2026 22:46
@dosubot dosubot bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Mar 7, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 7, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

A null-check guard was added to the subgraph node path in resolveSubgraphInputTarget so the function returns undefined when getTargetWidget() yields no valid target. Comprehensive unit tests for various subgraph/input/widget scenarios were added.

Changes

Cohort / File(s) Summary
Subgraph Input Target Resolution
src/core/graph/subgraph/resolveSubgraphInputTarget.ts
Adds a guard to require a valid widget target from getTargetWidget() for subgraph nodes; returns undefined when absent instead of falling back to inputInput.name.
Unit tests for resolution logic
src/core/graph/subgraph/resolveSubgraphInputTarget.test.ts
Adds extensive tests covering nested subgraph inputs, mixed widget/non-widget cases, and plain interior node inputs to validate resolved nodeId/widgetName or undefined outcomes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 I hop through nodes both near and far,
Checking widgets where the subgraphs are,
If a target's missing, I'll simply say "none" —
Better to be honest than falsely done. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title accurately describes the fix: preventing non-widget inputs on nested subgraphs from appearing as button widgets, which aligns with the core change.
Description check ✅ Passed The PR description covers the required template sections including Summary and What sections with sufficient detail. While Review Focus is present (exceeding the template's basic requirements), it could better highlight critical design decisions.

✏️ 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 drjkl/why-are-they-buttons

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

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/07/2026, 10:53:41 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

🎭 Playwright: ✅ 554 passed, 0 failed · 3 flaky

📊 Browser Reports
  • chromium: View Report (✅ 541 / ❌ 0 / ⚠️ 3 / ⏭️ 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)

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

📦 Bundle: 4.57 MB gzip 🔴 +15 B

Details

Summary

  • Raw size: 21.4 MB baseline 21.4 MB — 🔴 +54 B
  • Gzip: 4.57 MB baseline 4.57 MB — 🔴 +15 B
  • Brotli: 3.53 MB baseline 3.53 MB — 🔴 +106 B
  • Bundles: 232 current • 232 baseline • 108 added / 108 removed

Category Glance
Data & Services 🔴 +54 B (2.77 MB) · Vendor & Third-Party ⚪ 0 B (8.87 MB) · Other ⚪ 0 B (8.04 MB) · Graph Workspace ⚪ 0 B (954 kB) · Panels & Settings ⚪ 0 B (436 kB) · Editors & Dialogs ⚪ 0 B (77.6 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-4S7rVEHk.js (new) 28.9 kB 🔴 +28.9 kB 🔴 +11.4 kB 🔴 +9.34 kB
assets/index-Cm9f1YDf.js (removed) 28.9 kB 🟢 -28.9 kB 🟢 -11.4 kB 🟢 -9.31 kB

Status: 1 added / 1 removed

Graph Workspace — 954 kB (baseline 954 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-CIrG7tdk.js (removed) 954 kB 🟢 -954 kB 🟢 -201 kB 🟢 -153 kB
assets/GraphView-ZI6TY5te.js (new) 954 kB 🔴 +954 kB 🔴 +201 kB 🔴 +153 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BCIBgJdT.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudSurveyView-pFMIaeOG.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.81 kB
assets/CloudLoginView-a9SsDbu2.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.2 kB 🟢 -2.83 kB
assets/CloudLoginView-DC8lohAQ.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.2 kB 🔴 +2.83 kB
assets/CloudSignupView-DtsZG-HN.js (new) 9.41 kB 🔴 +9.41 kB 🔴 +2.71 kB 🔴 +2.38 kB
assets/CloudSignupView-t0ZQbKwj.js (removed) 9.41 kB 🟢 -9.41 kB 🟢 -2.71 kB 🟢 -2.39 kB
assets/UserCheckView-C795IUB3.js (removed) 8.42 kB 🟢 -8.42 kB 🟢 -2.22 kB 🟢 -1.94 kB
assets/UserCheckView-DCG8NObk.js (new) 8.42 kB 🔴 +8.42 kB 🔴 +2.22 kB 🔴 +1.94 kB
assets/CloudLayoutView-CCCShRxr.js (new) 6.47 kB 🔴 +6.47 kB 🔴 +2.12 kB 🔴 +1.84 kB
assets/CloudLayoutView-CgSwohxP.js (removed) 6.47 kB 🟢 -6.47 kB 🟢 -2.12 kB 🟢 -1.86 kB
assets/CloudForgotPasswordView-H20DZCsM.js (new) 5.59 kB 🔴 +5.59 kB 🔴 +1.95 kB 🔴 +1.72 kB
assets/CloudForgotPasswordView-VjPrGb8v.js (removed) 5.59 kB 🟢 -5.59 kB 🟢 -1.95 kB 🟢 -1.72 kB
assets/CloudAuthTimeoutView-CZZ-LuyL.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudAuthTimeoutView-DtQ3E2X8.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.79 kB 🔴 +1.58 kB
assets/CloudSubscriptionRedirectView-BZCCTFo6.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.8 kB 🟢 -1.59 kB
assets/CloudSubscriptionRedirectView-DFJ1T_0R.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.8 kB 🔴 +1.59 kB
assets/UserSelectView-CvtvyVXH.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.63 kB 🔴 +1.47 kB
assets/UserSelectView-DfNc0_kb.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.46 kB
assets/CloudSorryContactSupportView-Deer4x8G.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-BEfSPHAy.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BQt2UEdq.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.3 kB 🟢 -4.66 kB
assets/SecretsPanel-DanNvCJ3.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.66 kB
assets/LegacyCreditsPanel-CIqR2oXb.js (new) 20.7 kB 🔴 +20.7 kB 🔴 +5.58 kB 🔴 +4.92 kB
assets/LegacyCreditsPanel-DYnFFpDf.js (removed) 20.7 kB 🟢 -20.7 kB 🟢 -5.58 kB 🟢 -4.91 kB
assets/SubscriptionPanel-BSVp4TgK.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.76 kB 🔴 +4.17 kB
assets/SubscriptionPanel-CqxOfevh.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.75 kB 🟢 -4.18 kB
assets/KeybindingPanel-CBxnqqYs.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.54 kB 🔴 +3.14 kB
assets/KeybindingPanel-Co6G-TAI.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.54 kB 🟢 -3.13 kB
assets/AboutPanel-B_SYGGrG.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.46 kB
assets/AboutPanel-jBhFBw75.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.45 kB
assets/ExtensionPanel-BbSQ3Yg8.js (new) 9.42 kB 🔴 +9.42 kB 🔴 +2.67 kB 🔴 +2.38 kB
assets/ExtensionPanel-BEa1UcOu.js (removed) 9.42 kB 🟢 -9.42 kB 🟢 -2.67 kB 🟢 -2.37 kB
assets/ServerConfigPanel-CfJy_GLw.js (removed) 6.49 kB 🟢 -6.49 kB 🟢 -2.13 kB 🟢 -1.91 kB
assets/ServerConfigPanel-DPKKk35H.js (new) 6.49 kB 🔴 +6.49 kB 🔴 +2.13 kB 🔴 +1.91 kB
assets/UserPanel-C93tgD38.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/UserPanel-DIwf9sxd.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/cloudRemoteConfig-BAklgrxE.js (new) 1.48 kB 🔴 +1.48 kB 🔴 +724 B 🔴 +632 B
assets/cloudRemoteConfig-DMXM8CBm.js (removed) 1.48 kB 🟢 -1.48 kB 🟢 -724 B 🟢 -631 B
assets/refreshRemoteConfig-D5BD3U7u.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +519 B 🔴 +473 B
assets/refreshRemoteConfig-DH1Z_Q4a.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -520 B 🟢 -467 B
assets/config-DrIhAAj_.js 1.22 kB 1.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-0_PXdVjq.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-7ytexSd_.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-91ZQQ8VC.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-aWa4u4qN.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B6_1ih6C.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C8aNjNPu.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CKnKW5J4.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CrLux3Yh.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DxEQtHFK.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-JMKwrBEp.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-rsISbbV-.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-bzG_PPFh.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +989 B
assets/auth-Ci2PTm8A.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -990 B
assets/SignUpForm-CBGv2AeV.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/SignUpForm-CTPiJ9fL.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/UpdatePasswordContent-DDT6xJdy.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1.09 kB 🟢 -960 B
assets/UpdatePasswordContent-DRiUaiut.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +1.09 kB 🔴 +959 B
assets/firebaseAuthStore-B--critI.js (new) 831 B 🔴 +831 B 🔴 +408 B 🔴 +364 B
assets/firebaseAuthStore-BwXS8zbi.js (removed) 831 B 🟢 -831 B 🟢 -408 B 🟢 -366 B
assets/auth-DSkBOeaa.js (new) 357 B 🔴 +357 B 🔴 +224 B 🔴 +183 B
assets/auth-DW63p7AI.js (removed) 357 B 🟢 -357 B 🟢 -222 B 🟢 -190 B
assets/PasswordFields-D5kX5MXM.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-BorJpYlL.js 1.59 kB 1.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 77.6 kB (baseline 77.6 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useShareDialog-B5-LO4lJ.js (removed) 76.8 kB 🟢 -76.8 kB 🟢 -16.4 kB 🟢 -14.1 kB
assets/useShareDialog-CGQR1LsR.js (new) 76.8 kB 🔴 +76.8 kB 🔴 +16.4 kB 🔴 +14 kB
assets/useSubscriptionDialog-CKMpEZxk.js (removed) 779 B 🟢 -779 B 🟢 -398 B 🟢 -345 B
assets/useSubscriptionDialog-CTBFEfZw.js (new) 779 B 🔴 +779 B 🔴 +398 B 🔴 +346 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-B4vYUWkP.js (new) 13.8 kB 🔴 +13.8 kB 🔴 +3.9 kB 🔴 +3.49 kB
assets/ComfyQueueButton-D3D5L7r3.js (removed) 13.8 kB 🟢 -13.8 kB 🟢 -3.9 kB 🟢 -3.48 kB
assets/useTerminalTabs-Bl9Hy-BB.js (new) 9.87 kB 🔴 +9.87 kB 🔴 +3.41 kB 🔴 +3.01 kB
assets/useTerminalTabs-CDDBw-JN.js (removed) 9.87 kB 🟢 -9.87 kB 🟢 -3.41 kB 🟢 -3 kB
assets/SubscribeButton-CGZ09-l-.js (new) 2.34 kB 🔴 +2.34 kB 🔴 +1.01 kB 🔴 +882 B
assets/SubscribeButton-DzgbsVu9.js (removed) 2.34 kB 🟢 -2.34 kB 🟢 -1.01 kB 🟢 -882 B
assets/cloudFeedbackTopbarButton-fQdu7CGO.js (removed) 1.42 kB 🟢 -1.42 kB 🟢 -746 B 🟢 -668 B
assets/cloudFeedbackTopbarButton-Yeae9oa_.js (new) 1.42 kB 🔴 +1.42 kB 🔴 +745 B 🔴 +658 B
assets/ComfyQueueButton-53Zuoptj.js (new) 836 B 🔴 +836 B 🔴 +415 B 🔴 +368 B
assets/ComfyQueueButton-w9O67-tv.js (removed) 836 B 🟢 -836 B 🟢 -413 B 🟢 -372 B
assets/Button-D3asrPDZ.js 3.2 kB 3.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-BJr1VDd1.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-D3QLfJ-O.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-C0yl0FxS.js 5.95 kB 5.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/toggle-group-B2QRWqGW.js 3.83 kB 3.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-B95EAjGD.js 7.39 kB 7.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-xfn08Ppk.js 1.19 kB 1.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-YsqWV653.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.77 MB (baseline 2.77 MB) • 🔴 +54 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-BncBMjFU.js (new) 1.93 MB 🔴 +1.93 MB 🔴 +433 kB 🔴 +325 kB
assets/dialogService-Dmrwgyf4.js (removed) 1.93 MB 🟢 -1.93 MB 🟢 -433 kB 🟢 -325 kB
assets/api-naOVNhCe.js (new) 693 kB 🔴 +693 kB 🔴 +156 kB 🔴 +124 kB
assets/api-B_0kbtst.js (removed) 693 kB 🟢 -693 kB 🟢 -156 kB 🟢 -124 kB
assets/load3dService-O7T1GUPF.js (removed) 91.1 kB 🟢 -91.1 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/load3dService-XxIbCYwg.js (new) 91.1 kB 🔴 +91.1 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/extensionStore-BbxWXTVX.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -4.63 kB 🟢 -4.1 kB
assets/extensionStore-DnJrjgbq.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +4.63 kB 🔴 +4.1 kB
assets/workflowShareService-4vV-1niU.js (new) 13.1 kB 🔴 +13.1 kB 🔴 +4 kB 🔴 +3.55 kB
assets/workflowShareService-BbiqcVo6.js (removed) 13.1 kB 🟢 -13.1 kB 🟢 -4 kB 🟢 -3.54 kB
assets/releaseStore-7s2tnNFj.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-C3rGusdP.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/keybindingService-CNfZQKqJ.js (new) 7.16 kB 🔴 +7.16 kB 🔴 +1.72 kB 🔴 +1.48 kB
assets/keybindingService-CZWnAOLw.js (removed) 7.16 kB 🟢 -7.16 kB 🟢 -1.72 kB 🟢 -1.48 kB
assets/bootstrapStore-9kQFmX9F.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -872 B 🟢 -797 B
assets/bootstrapStore-DKjRQOWq.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +873 B 🔴 +800 B
assets/userStore-CTE3wl1c.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -718 B 🟢 -678 B
assets/userStore-oHLrKH_L.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +717 B 🔴 +675 B
assets/audioService-C64X5Uva.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +849 B 🔴 +724 B
assets/audioService-Dg3OQKFk.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -848 B 🟢 -724 B
assets/releaseStore-B9bL4N86.js (new) 803 B 🔴 +803 B 🔴 +404 B 🔴 +359 B
assets/releaseStore-D_luU5bk.js (removed) 803 B 🟢 -803 B 🟢 -404 B 🟢 -355 B
assets/settingStore-C1bhSfZs.js (removed) 787 B 🟢 -787 B 🟢 -406 B 🟢 -357 B
assets/settingStore-D4fxJ4bd.js (new) 787 B 🔴 +787 B 🔴 +406 B 🔴 +360 B
assets/workflowDraftStore-Di2Q0Bb2.js (removed) 779 B 🟢 -779 B 🟢 -397 B 🟢 -351 B
assets/workflowDraftStore-ir-Ffeao.js (new) 779 B 🔴 +779 B 🔴 +398 B 🔴 +352 B
assets/dialogService-CI1tAzCE.js (new) 768 B 🔴 +768 B 🔴 +389 B 🔴 +348 B
assets/dialogService-Q3cz3vPg.js (removed) 768 B 🟢 -768 B 🟢 -389 B 🟢 -344 B
assets/serverConfigStore-Ze5zvB9a.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 14 added / 14 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-D2jXWJ0k.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3d-D4EeCGJI.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3dViewer-CHpUf0uu.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useLoad3dViewer-D1Ncr3LD.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useFeatureFlags-B8RIkx39.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.36 kB 🔴 +1.17 kB
assets/useFeatureFlags-Bl9fJ8pF.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.37 kB 🟢 -1.17 kB
assets/useWorkspaceUI-DV_CC6_f.js (removed) 3 kB 🟢 -3 kB 🟢 -821 B 🟢 -707 B
assets/useWorkspaceUI-su8k1NJ-.js (new) 3 kB 🔴 +3 kB 🔴 +822 B 🔴 +702 B
assets/subscriptionCheckoutUtil-Bo32s2Fa.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +957 B
assets/subscriptionCheckoutUtil-pFvm7Bvc.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -958 B
assets/useErrorHandling-BcfUk-wk.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -628 B 🟢 -533 B
assets/useErrorHandling-Bi4wqAp3.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +629 B 🔴 +534 B
assets/useLoad3d-B_KrlCZ_.js (removed) 902 B 🟢 -902 B 🟢 -446 B 🟢 -397 B
assets/useLoad3d-C_tA_rQ6.js (new) 902 B 🔴 +902 B 🔴 +444 B 🔴 +398 B
assets/useLoad3dViewer-B-RnqdyK.js (removed) 881 B 🟢 -881 B 🟢 -431 B 🟢 -383 B
assets/useLoad3dViewer-CkNfTB8K.js (new) 881 B 🔴 +881 B 🔴 +429 B 🔴 +383 B
assets/audioUtils-Da0_-3fU.js (removed) 858 B 🟢 -858 B 🟢 -498 B 🟢 -406 B
assets/audioUtils-NwFocxiu.js (new) 858 B 🔴 +858 B 🔴 +498 B 🔴 +405 B
assets/useCurrentUser-Br83-PSb.js (new) 765 B 🔴 +765 B 🔴 +393 B 🔴 +347 B
assets/useCurrentUser-BTG6ilr-.js (removed) 765 B 🟢 -765 B 🟢 -393 B 🟢 -342 B
assets/useWorkspaceSwitch-Cm1K1e7j.js (removed) 688 B 🟢 -688 B 🟢 -350 B 🟢 -297 B
assets/useWorkspaceSwitch-Du5CSvWY.js (new) 688 B 🔴 +688 B 🔴 +351 B 🔴 +297 B
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-Bz3E3A2O.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-CC-l-L9z.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DOdPeMQc.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-Cybe2l6l.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-Ti3tsiGv.js 944 B 944 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-Dhz4AtFE.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 11 added / 11 removed

Vendor & Third-Party — 8.87 MB (baseline 8.87 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-D82zUMvC.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-DccD0mxo.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-u14f4tgD.js 1.54 MB 1.54 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-prq_Rlnc.js 1.72 MB 1.72 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-C-tDe-KL.js 399 kB 399 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-C69yBO64.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-DTO2QA4Q.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-CH_Hqnyl.js 124 kB 124 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-Co8jWZ4q.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 — 8.04 MB (baseline 8.04 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-C80ac42-.js (removed) 73.8 kB 🟢 -73.8 kB 🟢 -19 kB 🟢 -16.3 kB
assets/core-DB5qIbO-.js (new) 73.8 kB 🔴 +73.8 kB 🔴 +19 kB 🔴 +16.3 kB
assets/groupNode-hqybxn_2.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.6 kB
assets/groupNode-mczvpR2Z.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.6 kB
assets/WidgetSelect-0bx1eZgC.js (new) 58.3 kB 🔴 +58.3 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/WidgetSelect-bimenYYj.js (removed) 58.3 kB 🟢 -58.3 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-Bq8pgx3K.js (new) 46.3 kB 🔴 +46.3 kB 🔴 +8.65 kB 🔴 +7.49 kB
assets/SubscriptionRequiredDialogContentWorkspace-BRxOmtby.js (removed) 46.3 kB 🟢 -46.3 kB 🟢 -8.65 kB 🟢 -7.54 kB
assets/WidgetPainter-BcKmUFc9.js (new) 32.9 kB 🔴 +32.9 kB 🔴 +7.97 kB 🔴 +7.07 kB
assets/WidgetPainter-CWTAdheZ.js (removed) 32.9 kB 🟢 -32.9 kB 🟢 -7.97 kB 🟢 -7.05 kB
assets/Load3DControls-CtsVLqKM.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.33 kB 🟢 -4.65 kB
assets/Load3DControls-nUdWjgRi.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.33 kB 🔴 +4.65 kB
assets/WorkspacePanelContent--KkFGx7c.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.16 kB 🔴 +5.39 kB
assets/WorkspacePanelContent-BEl8UDaw.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.16 kB 🟢 -5.4 kB
assets/SubscriptionRequiredDialogContent-BxTSZVUq.js (new) 25.6 kB 🔴 +25.6 kB 🔴 +6.56 kB 🔴 +5.79 kB
assets/SubscriptionRequiredDialogContent-Cr6lwSuI.js (removed) 25.6 kB 🟢 -25.6 kB 🟢 -6.56 kB 🟢 -5.78 kB
assets/Load3dViewerContent-Bc0xZU9c.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/Load3dViewerContent-GIsSO_5o.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.5 kB
assets/WidgetImageCrop-C9ZRPKBQ.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.52 kB 🟢 -4.84 kB
assets/WidgetImageCrop-IUwAt1SU.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.52 kB 🔴 +4.86 kB
assets/SubscriptionPanelContentWorkspace-CcjKgv-a.js (removed) 22 kB 🟢 -22 kB 🟢 -5.11 kB 🟢 -4.51 kB
assets/SubscriptionPanelContentWorkspace-XpCD8mv6.js (new) 22 kB 🔴 +22 kB 🔴 +5.11 kB 🔴 +4.5 kB
assets/CurrentUserPopoverWorkspace-24bB65iS.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.94 kB 🟢 -4.41 kB
assets/CurrentUserPopoverWorkspace-RVG0S48i.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +4.94 kB 🔴 +4.41 kB
assets/SignInContent-2SVePoci.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.77 kB 🔴 +4.18 kB
assets/SignInContent-DZTCNHyO.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.77 kB 🟢 -4.18 kB
assets/WidgetInputNumber-CyX9rfUR.js (removed) 18.8 kB 🟢 -18.8 kB 🟢 -4.79 kB 🟢 -4.26 kB
assets/WidgetInputNumber-d6drgCor.js (new) 18.8 kB 🔴 +18.8 kB 🔴 +4.79 kB 🔴 +4.25 kB
assets/WidgetRecordAudio-CAKz7Cz6.js (new) 17.4 kB 🔴 +17.4 kB 🔴 +5.01 kB 🔴 +4.47 kB
assets/WidgetRecordAudio-ClPKblsH.js (removed) 17.4 kB 🟢 -17.4 kB 🟢 -5.01 kB 🟢 -4.48 kB
assets/Load3D-BJaNgWux.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.5 kB
assets/Load3D-sj8Mq7CM.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.02 kB 🔴 +3.51 kB
assets/load3d-D7igeDhp.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.21 kB 🔴 +3.65 kB
assets/load3d-knkfRjrc.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.21 kB 🟢 -3.66 kB
assets/AudioPreviewPlayer-CGs32O5X.js (new) 11 kB 🔴 +11 kB 🔴 +3.26 kB 🔴 +2.92 kB
assets/AudioPreviewPlayer-g0RWqC2v.js (removed) 11 kB 🟢 -11 kB 🟢 -3.26 kB 🟢 -2.91 kB
assets/nodeTemplates-9myde17C.js (new) 9.34 kB 🔴 +9.34 kB 🔴 +3.27 kB 🔴 +2.87 kB
assets/nodeTemplates-DHQLYviU.js (removed) 9.34 kB 🟢 -9.34 kB 🟢 -3.27 kB 🟢 -2.88 kB
assets/InviteMemberDialogContent-B6PHJLby.js (removed) 7.41 kB 🟢 -7.41 kB 🟢 -2.31 kB 🟢 -2.03 kB
assets/InviteMemberDialogContent-BrRSoZxr.js (new) 7.41 kB 🔴 +7.41 kB 🔴 +2.31 kB 🔴 +2.02 kB
assets/Load3DConfiguration-BrVBmNBi.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-CR9fLVxv.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-BF0F0Wyp.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/CreateWorkspaceDialogContent-W0hzhdfk.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/onboardingCloudRoutes-B-0zjzlQ.js (new) 5.51 kB 🔴 +5.51 kB 🔴 +1.87 kB 🔴 +1.64 kB
assets/onboardingCloudRoutes-Coqg7zNf.js (removed) 5.51 kB 🟢 -5.51 kB 🟢 -1.88 kB 🟢 -1.64 kB
assets/FreeTierDialogContent-C9UjOD1t.js (new) 5.42 kB 🔴 +5.42 kB 🔴 +1.91 kB 🔴 +1.69 kB
assets/FreeTierDialogContent-CWJAO_1I.js (removed) 5.42 kB 🟢 -5.42 kB 🟢 -1.91 kB 🟢 -1.69 kB
assets/EditWorkspaceDialogContent-CrEn0YDq.js (new) 5.36 kB 🔴 +5.36 kB 🔴 +1.96 kB 🔴 +1.72 kB
assets/EditWorkspaceDialogContent-sNKnK_e7.js (removed) 5.36 kB 🟢 -5.36 kB 🟢 -1.96 kB 🟢 -1.72 kB
assets/ValueControlPopover-BHHVVsiU.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.77 kB 🟢 -1.58 kB
assets/ValueControlPopover-DFe312O6.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.77 kB 🔴 +1.59 kB
assets/Preview3d-CVQydSwv.js (new) 4.89 kB 🔴 +4.89 kB 🔴 +1.61 kB 🔴 +1.41 kB
assets/Preview3d-CzobC8gR.js (removed) 4.89 kB 🟢 -4.89 kB 🟢 -1.61 kB 🟢 -1.4 kB
assets/CancelSubscriptionDialogContent-BNqMy6BQ.js (removed) 4.83 kB 🟢 -4.83 kB 🟢 -1.8 kB 🟢 -1.58 kB
assets/CancelSubscriptionDialogContent-DFyKFvEm.js (new) 4.83 kB 🔴 +4.83 kB 🔴 +1.8 kB 🔴 +1.58 kB
assets/DeleteWorkspaceDialogContent-Bb40WOOY.js (removed) 4.26 kB 🟢 -4.26 kB 🟢 -1.65 kB 🟢 -1.44 kB
assets/DeleteWorkspaceDialogContent-CfWvFie3.js (new) 4.26 kB 🔴 +4.26 kB 🔴 +1.65 kB 🔴 +1.44 kB
assets/WidgetWithControl-B5sSro7R.js (removed) 4.17 kB 🟢 -4.17 kB 🟢 -1.82 kB 🟢 -1.64 kB
assets/WidgetWithControl-BClACc83.js (new) 4.17 kB 🔴 +4.17 kB 🔴 +1.82 kB 🔴 +1.65 kB
assets/LeaveWorkspaceDialogContent-BWDe8g99.js (new) 4.09 kB 🔴 +4.09 kB 🔴 +1.59 kB 🔴 +1.39 kB
assets/LeaveWorkspaceDialogContent-BzUQnGA-.js (removed) 4.09 kB 🟢 -4.09 kB 🟢 -1.6 kB 🟢 -1.39 kB
assets/RemoveMemberDialogContent-B2FphoB_.js (removed) 4.08 kB 🟢 -4.08 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/RemoveMemberDialogContent-DjOkLaZg.js (new) 4.08 kB 🔴 +4.08 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/RevokeInviteDialogContent-BtDw2E_g.js (new) 3.99 kB 🔴 +3.99 kB 🔴 +1.56 kB 🔴 +1.37 kB
assets/RevokeInviteDialogContent-DzVTs8ZZ.js (removed) 3.99 kB 🟢 -3.99 kB 🟢 -1.56 kB 🟢 -1.37 kB
assets/InviteMemberUpsellDialogContent-bT_LQXWC.js (removed) 3.86 kB 🟢 -3.86 kB 🟢 -1.42 kB 🟢 -1.25 kB
assets/InviteMemberUpsellDialogContent-DkuCbhQO.js (new) 3.86 kB 🔴 +3.86 kB 🔴 +1.42 kB 🔴 +1.25 kB
assets/tierBenefits-aGM0c0Io.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.3 kB 🟢 -1.16 kB
assets/tierBenefits-DaCFMQFq.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.3 kB 🔴 +1.17 kB
assets/saveMesh-BOoTYfbZ.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -1.48 kB 🟢 -1.32 kB
assets/saveMesh-BtauB7Ao.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +1.48 kB 🔴 +1.31 kB
assets/cloudSessionCookie-ChTYxjXk.js (new) 3.14 kB 🔴 +3.14 kB 🔴 +1.11 kB 🔴 +972 B
assets/cloudSessionCookie-CTdCy3E0.js (removed) 3.14 kB 🟢 -3.14 kB 🟢 -1.1 kB 🟢 -969 B
assets/GlobalToast-C5dRyJFA.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/GlobalToast-DXXnRGQY.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/SubscribeToRun-BtFgI7O3.js (new) 2.06 kB 🔴 +2.06 kB 🔴 +948 B 🔴 +829 B
assets/SubscribeToRun-OWpa0SNY.js (removed) 2.06 kB 🟢 -2.06 kB 🟢 -948 B 🟢 -829 B
assets/CloudRunButtonWrapper-_xK0RcIm.js (new) 1.72 kB 🔴 +1.72 kB 🔴 +805 B 🔴 +735 B
assets/CloudRunButtonWrapper-B0lTt3xr.js (removed) 1.72 kB 🟢 -1.72 kB 🟢 -806 B 🟢 -733 B
assets/cloudBadges-BcUhdnD7.js (new) 1.54 kB 🔴 +1.54 kB 🔴 +793 B 🔴 +695 B
assets/cloudBadges-BGWTCPUn.js (removed) 1.54 kB 🟢 -1.54 kB 🟢 -794 B 🟢 -696 B
assets/previousFullPath-tzkHAM3h.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +650 B 🔴 +577 B
assets/previousFullPath-yQbcHIKM.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -650 B 🟢 -583 B
assets/cloudSubscription-DFXjl_yD.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -675 B 🟢 -583 B
assets/cloudSubscription-DMtxA_G7.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +674 B 🔴 +586 B
assets/Load3D-2pP0dnG9.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +521 B 🔴 +458 B
assets/Load3D-BJTHj-EF.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -522 B 🟢 -457 B
assets/nightlyBadges-CnkZ_dHr.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -550 B 🟢 -489 B
assets/nightlyBadges-Dd2HebPh.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +548 B 🔴 +490 B
assets/Load3dViewerContent-BRWqBtPp.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -491 B 🟢 -432 B
assets/Load3dViewerContent-CJiXcqGY.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +488 B 🔴 +429 B
assets/SubscriptionPanelContentWorkspace-CEc27r4P.js (removed) 963 B 🟢 -963 B 🟢 -457 B 🟢 -396 B
assets/SubscriptionPanelContentWorkspace-SG1-fF_-.js (new) 963 B 🔴 +963 B 🔴 +456 B 🔴 +397 B
assets/WidgetLegacy-B3ilo48n.js (new) 787 B 🔴 +787 B 🔴 +405 B 🔴 +356 B
assets/WidgetLegacy-Dmlw4tf_.js (removed) 787 B 🟢 -787 B 🟢 -404 B 🟢 -352 B
assets/changeTracker-9OyaaL9d.js (removed) 763 B 🟢 -763 B 🟢 -393 B 🟢 -344 B
assets/changeTracker-B1Izblwq.js (new) 763 B 🔴 +763 B 🔴 +393 B 🔴 +346 B
assets/graphHasMissingNodes-87L09FVE.js (new) 761 B 🔴 +761 B 🔴 +375 B 🔴 +329 B
assets/graphHasMissingNodes-C0_bwZuO.js (removed) 761 B 🟢 -761 B 🟢 -373 B 🟢 -332 B
assets/AnimationControls-Duc4GLUA.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-_vWTPKYY.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-DaAGiCO7.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-D2Wl6A4b.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-BcOH_oP5.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CVUg6Znj.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-4Ex6JXL0.js 19.2 kB 19.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-4eY_jIIw.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B2u5OAt2.js 16.5 kB 16.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BAAf-WrY.js 16.4 kB 16.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BwgnbfCS.js 16.5 kB 16.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CMf3AlGU.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Db23kZm5.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DTom9f1s.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-uXFULtu8.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-y391QX3e.js 15.6 kB 15.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-ZTJwiV8a.js 17.3 kB 17.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-ogISyp4e.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-CiDQVNER.js 544 kB 544 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-DB0ysFMT.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Loader-cdpDz0uu.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-5H8roobL.js 158 kB 158 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CA5dYHUm.js 159 kB 159 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CDDmwCUg.js 199 kB 199 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CiUjHtn0.js 221 kB 221 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CpPIHWU9.js 166 kB 166 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Crut1KEq.js 140 kB 140 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D8Vf0Ptk.js 164 kB 164 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DOAQmYEE.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DPbrllQt.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-jNOpmuRW.js 190 kB 190 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-PtX2AFpt.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-CIss1NZp.js 1.83 kB 1.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CcX--__P.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-D-7rS-iO.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-FC1oe-E1.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-quKrqFV_.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-L08_iM14.js 2.78 kB 2.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B8HFl03z.js 406 kB 406 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bhwr0_qt.js 452 kB 452 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BnwYZsRe.js 494 kB 494 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BQQ7epXP.js 394 kB 394 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C4H2Yzrv.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Ci3336-6.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CVMvffJd.js 453 kB 453 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cxe4eF5X.js 402 kB 402 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D3rH0GXo.js 418 kB 418 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-LI1J_566.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ZRmGudls.js 402 kB 402 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-B5wSHUh4.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-rvNSYIKQ.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-BuvvODD1.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-B3Tsj8GO.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-BwR6vNpJ.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-J8f-bQt0.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/Textarea-tnAz8KeU.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-BUItZo5F.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DIRwAHBY.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-B3NJoLzd.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CagJRS6y.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-DLkq0NID.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-L4hCPhOA.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-BZyvlEbQ.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-CyRqphmc.js 3.6 kB 3.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-Ey4H47pH.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-D0ea31DA.js 2.89 kB 2.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-Dq9_JfRn.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-BUuB6s0W.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-tYaGazrB.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-By-QMhe2.js 4.26 kB 4.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-CoDLRkkN.js 3.54 kB 3.54 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-DYLaC2lj.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 50 added / 50 removed

Non-widget inputs on nested SubgraphNodes (e.g. AUDIO, IMAGE) must return undefined instead of a bogus promotion target.

Amp-Thread-ID: https://ampcode.com/threads/T-019cca7b-9ba8-779c-ba40-9f2b45bed5e2
Co-authored-by: Amp <amp@ampcode.com>
@github-actions
Copy link

github-actions bot commented Mar 7, 2026

⚡ Performance Report

ℹ️ Collecting baseline variance data (0/5 runs). Significance will appear after 2 main branch runs.

Metric Baseline PR Δ
canvas-idle: style recalcs 124 125 +1%
canvas-idle: layouts 0 0 +0%
canvas-idle: task duration 401ms 539ms +34%
canvas-mouse-sweep: style recalcs 181 182 +1%
canvas-mouse-sweep: layouts 12 12 +3%
canvas-mouse-sweep: task duration 988ms 1046ms +6%
dom-widget-clipping: style recalcs 42 45 +6%
dom-widget-clipping: layouts 0 1
dom-widget-clipping: task duration 349ms 393ms +13%
subgraph-dom-widget-clipping: style recalcs 73 75 +3%
subgraph-dom-widget-clipping: layouts 0 0 -100%
subgraph-dom-widget-clipping: task duration 405ms 442ms +9%
subgraph-idle: style recalcs 121 122 +1%
subgraph-idle: layouts 0 0 +0%
subgraph-idle: task duration 370ms 481ms +30%
subgraph-mouse-sweep: style recalcs 166 160 -4%
subgraph-mouse-sweep: layouts 16 16 +2%
subgraph-mouse-sweep: task duration 879ms 865ms -2%
Raw data
{
  "timestamp": "2026-03-07T22:57:06.290Z",
  "gitSha": "e9720b0a056dba3ff754d615f8fdf5addc509589",
  "branch": "drjkl/why-are-they-buttons",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2098.7799999999766,
      "styleRecalcs": 127,
      "styleRecalcDurationMs": 29.069,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 595.418,
      "heapDeltaBytes": -4104356
    },
    {
      "name": "canvas-idle",
      "durationMs": 2016.5250000000015,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 28.958,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 507.91600000000005,
      "heapDeltaBytes": -4311540
    },
    {
      "name": "canvas-idle",
      "durationMs": 2038.663999999983,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 28.484,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 512.919,
      "heapDeltaBytes": -3579628
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2059.1079999999806,
      "styleRecalcs": 184,
      "styleRecalcDurationMs": 57.70399999999999,
      "layouts": 12,
      "layoutDurationMs": 3.299,
      "taskDurationMs": 1108.819,
      "heapDeltaBytes": -2891976
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2104.0079999999934,
      "styleRecalcs": 189,
      "styleRecalcDurationMs": 65.178,
      "layouts": 13,
      "layoutDurationMs": 3.9219999999999993,
      "taskDurationMs": 1144.2540000000001,
      "heapDeltaBytes": -2338156
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1900.7309999999507,
      "styleRecalcs": 174,
      "styleRecalcDurationMs": 54.63999999999999,
      "layouts": 12,
      "layoutDurationMs": 3.5500000000000003,
      "taskDurationMs": 886.257,
      "heapDeltaBytes": -3136600
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 578.3869999999922,
      "styleRecalcs": 42,
      "styleRecalcDurationMs": 14.213000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 379.94199999999995,
      "heapDeltaBytes": 6354300
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 631.2689999999748,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 18.246000000000002,
      "layouts": 1,
      "layoutDurationMs": 0.2900000000000001,
      "taskDurationMs": 415.08399999999995,
      "heapDeltaBytes": 8423624
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 588.3269999999925,
      "styleRecalcs": 45,
      "styleRecalcDurationMs": 18.636,
      "layouts": 1,
      "layoutDurationMs": 0.2819999999999999,
      "taskDurationMs": 382.54900000000004,
      "heapDeltaBytes": 7304584
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 642.7160000000072,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 16.669999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 439.56200000000007,
      "heapDeltaBytes": 14639620
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 642.1230000000264,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 17.737999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 451.181,
      "heapDeltaBytes": -8989208
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 630.7940000000372,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 17.154,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 434.60200000000003,
      "heapDeltaBytes": 15079820
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2007.9510000000198,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 32.481,
      "layouts": 1,
      "layoutDurationMs": 0.289,
      "taskDurationMs": 514.39,
      "heapDeltaBytes": -2761872
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2029.2420000000106,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 28.119999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 473.096,
      "heapDeltaBytes": -3460448
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1999.1939999999886,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 27.374999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 454.91700000000003,
      "heapDeltaBytes": -3488136
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1745.8630000000142,
      "styleRecalcs": 159,
      "styleRecalcDurationMs": 56.046,
      "layouts": 17,
      "layoutDurationMs": 4.845,
      "taskDurationMs": 841.958,
      "heapDeltaBytes": -5131644
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1905.5329999999913,
      "styleRecalcs": 166,
      "styleRecalcDurationMs": 56.916000000000004,
      "layouts": 16,
      "layoutDurationMs": 4.314,
      "taskDurationMs": 969.9879999999999,
      "heapDeltaBytes": -5198400
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1704.9710000000005,
      "styleRecalcs": 155,
      "styleRecalcDurationMs": 47.945,
      "layouts": 16,
      "layoutDurationMs": 4.6690000000000005,
      "taskDurationMs": 781.655,
      "heapDeltaBytes": -5876308
    }
  ]
}

@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XS This PR changes 0-9 lines, ignoring generated files. labels Mar 7, 2026
@DrJKL DrJKL requested a review from AustinMroz March 7, 2026 22:51
@DrJKL DrJKL enabled auto-merge (squash) March 7, 2026 22:54
@DrJKL DrJKL merged commit 8a5bcde into main Mar 7, 2026
29 of 30 checks passed
@DrJKL DrJKL deleted the drjkl/why-are-they-buttons branch March 7, 2026 22:59
@DrJKL DrJKL added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch cloud/1.41 Backport PRs for cloud 1.41 labels Mar 7, 2026
github-actions bot pushed a commit that referenced this pull request Mar 7, 2026
…button widgets (#9542)

## Summary

Fix non-widget inputs on nested subgraphs appearing twice — once as
slots and once as unresolved button widgets.

## Changes

- **What**: Add `getTargetWidget()` guard in the `isSubgraphNode()`
branch of `resolveSubgraphInputTarget`, matching the existing check for
non-subgraph nodes. Non-widget inputs (e.g. AUDIO, IMAGE) now return
`undefined` instead of a bogus promotion entry.

## Review Focus

`resolveSubgraphInputTarget` had an asymmetry: the non-subgraph branch
checked `getTargetWidget()` before returning, but the `isSubgraphNode()`
branch returned unconditionally for every input. For nested subgraphs
where non-widget slots are linked through to inner SubgraphNode inputs,
this created `PromotedWidgetView` entries that failed `resolveDeepest()`
(falling back to `type: 'button'`), while the inputs also rendered as
normal slot circles since `input.widget` was never set by
`_resolveInputWidget` (which correctly skipped them).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9542-fix-prevent-non-widget-inputs-on-nested-subgraphs-from-appearing-as-button-widgets-31c6d73d3650816387c3f97f0385e762)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
@comfy-pr-bot
Copy link
Member

@DrJKL Successfully backported to #9544

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Mar 7, 2026
DrJKL added a commit that referenced this pull request Mar 7, 2026
…phs from appearing as button widgets (#9544)

Backport of #9542 to `cloud/1.41`

Automatically created by backport workflow.

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Amp <amp@ampcode.com>
@christian-byrne christian-byrne added core/1.41 Backport PRs for core 1.41 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch labels Mar 8, 2026
github-actions bot pushed a commit that referenced this pull request Mar 8, 2026
…button widgets (#9542)

## Summary

Fix non-widget inputs on nested subgraphs appearing twice — once as
slots and once as unresolved button widgets.

## Changes

- **What**: Add `getTargetWidget()` guard in the `isSubgraphNode()`
branch of `resolveSubgraphInputTarget`, matching the existing check for
non-subgraph nodes. Non-widget inputs (e.g. AUDIO, IMAGE) now return
`undefined` instead of a bogus promotion entry.

## Review Focus

`resolveSubgraphInputTarget` had an asymmetry: the non-subgraph branch
checked `getTargetWidget()` before returning, but the `isSubgraphNode()`
branch returned unconditionally for every input. For nested subgraphs
where non-widget slots are linked through to inner SubgraphNode inputs,
this created `PromotedWidgetView` entries that failed `resolveDeepest()`
(falling back to `type: 'button'`), while the inputs also rendered as
normal slot circles since `input.widget` was never set by
`_resolveInputWidget` (which correctly skipped them).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9542-fix-prevent-non-widget-inputs-on-nested-subgraphs-from-appearing-as-button-widgets-31c6d73d3650816387c3f97f0385e762)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
@github-actions
Copy link

github-actions bot commented Mar 8, 2026

⚠️ Backport to cloud/1.41 failed

Reason: Merge conflicts detected during cherry-pick of 8a5bcde

📄 Conflicting files

🤖 Prompt for AI Agents
Backport PR #9542 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/9542) to cloud/1.41.
Cherry-pick merge commit 8a5bcde168e2b3f7f72bf44850299ff47f78b38d onto new branch
backport-9542-to-cloud-1.41 from origin/cloud/1.41.
Resolve conflicts in: .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.41] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

github-actions bot pushed a commit that referenced this pull request Mar 8, 2026
…button widgets (#9542)

## Summary

Fix non-widget inputs on nested subgraphs appearing twice — once as
slots and once as unresolved button widgets.

## Changes

- **What**: Add `getTargetWidget()` guard in the `isSubgraphNode()`
branch of `resolveSubgraphInputTarget`, matching the existing check for
non-subgraph nodes. Non-widget inputs (e.g. AUDIO, IMAGE) now return
`undefined` instead of a bogus promotion entry.

## Review Focus

`resolveSubgraphInputTarget` had an asymmetry: the non-subgraph branch
checked `getTargetWidget()` before returning, but the `isSubgraphNode()`
branch returned unconditionally for every input. For nested subgraphs
where non-widget slots are linked through to inner SubgraphNode inputs,
this created `PromotedWidgetView` entries that failed `resolveDeepest()`
(falling back to `type: 'button'`), while the inputs also rendered as
normal slot circles since `input.widget` was never set by
`_resolveInputWidget` (which correctly skipped them).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9542-fix-prevent-non-widget-inputs-on-nested-subgraphs-from-appearing-as-button-widgets-31c6d73d3650816387c3f97f0385e762)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
@github-actions
Copy link

github-actions bot commented Mar 8, 2026

⚠️ Backport to cloud/1.41 failed

Reason: Merge conflicts detected during cherry-pick of 8a5bcde

📄 Conflicting files

🤖 Prompt for AI Agents
Backport PR #9542 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/9542) to cloud/1.41.
Cherry-pick merge commit 8a5bcde168e2b3f7f72bf44850299ff47f78b38d onto new branch
backport-9542-to-cloud-1.41 from origin/cloud/1.41.
Resolve conflicts in: .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.41] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

christian-byrne pushed a commit that referenced this pull request Mar 8, 2026
…button widgets (#9542)

## Summary

Fix non-widget inputs on nested subgraphs appearing twice — once as
slots and once as unresolved button widgets.

## Changes

- **What**: Add `getTargetWidget()` guard in the `isSubgraphNode()`
branch of `resolveSubgraphInputTarget`, matching the existing check for
non-subgraph nodes. Non-widget inputs (e.g. AUDIO, IMAGE) now return
`undefined` instead of a bogus promotion entry.

## Review Focus

`resolveSubgraphInputTarget` had an asymmetry: the non-subgraph branch
checked `getTargetWidget()` before returning, but the `isSubgraphNode()`
branch returned unconditionally for every input. For nested subgraphs
where non-widget slots are linked through to inner SubgraphNode inputs,
this created `PromotedWidgetView` entries that failed `resolveDeepest()`
(falling back to `type: 'button'`), while the inputs also rendered as
normal slot circles since `input.widget` was never set by
`_resolveInputWidget` (which correctly skipped them).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9542-fix-prevent-non-widget-inputs-on-nested-subgraphs-from-appearing-as-button-widgets-31c6d73d3650816387c3f97f0385e762)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
christian-byrne added a commit that referenced this pull request Mar 8, 2026
…hs from appearing as button widgets (#9542) (#9563)

Backport of #9542 to core/1.41.

Cherry-pick of merge commit 8a5bcde applied cleanly.

**Original PR:** #9542
**Pipeline ticket:** 15e1f241-efaa-4fe5-88ca-4ccc7bfb3345

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9563-backport-core-1-41-fix-prevent-non-widget-inputs-on-nested-subgraphs-from-appearing-as-31d6d73d36508154927fd4b7b55ea87f)
by [Unito](https://www.unito.io)

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Amp <amp@ampcode.com>
@christian-byrne christian-byrne added the core/1.40 Backport PRs for core 1.40 label Mar 8, 2026
@github-actions
Copy link

github-actions bot commented Mar 8, 2026

⚠️ Backport to core/1.40 failed

Reason: Merge conflicts detected during cherry-pick of 8a5bcde

📄 Conflicting files
src/core/graph/subgraph/resolveSubgraphInputTarget.ts
🤖 Prompt for AI Agents
Backport PR #9542 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/9542) to core/1.40.
Cherry-pick merge commit 8a5bcde168e2b3f7f72bf44850299ff47f78b38d onto new branch
backport-9542-to-core-1.40 from origin/core/1.40.
Resolve conflicts in: src/core/graph/subgraph/resolveSubgraphInputTarget.ts .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport core/1.40] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

@github-actions
Copy link

github-actions bot commented Mar 8, 2026

⚠️ Backport to core/1.41 failed

Reason: Merge conflicts detected during cherry-pick of 8a5bcde

📄 Conflicting files

🤖 Prompt for AI Agents
Backport PR #9542 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/9542) to core/1.41.
Cherry-pick merge commit 8a5bcde168e2b3f7f72bf44850299ff47f78b38d onto new branch
backport-9542-to-core-1.41 from origin/core/1.41.
Resolve conflicts in: .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport core/1.41] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

@github-actions
Copy link

github-actions bot commented Mar 8, 2026

⚠️ Backport to cloud/1.41 failed

Reason: Merge conflicts detected during cherry-pick of 8a5bcde

📄 Conflicting files

🤖 Prompt for AI Agents
Backport PR #9542 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/9542) to cloud/1.41.
Cherry-pick merge commit 8a5bcde168e2b3f7f72bf44850299ff47f78b38d onto new branch
backport-9542-to-cloud-1.41 from origin/cloud/1.41.
Resolve conflicts in: .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.41] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

christian-byrne pushed a commit that referenced this pull request Mar 8, 2026
…button widgets (#9542)

Fix non-widget inputs on nested subgraphs appearing twice — once as
slots and once as unresolved button widgets.

- **What**: Add `getTargetWidget()` guard in the `isSubgraphNode()`
branch of `resolveSubgraphInputTarget`, matching the existing check for
non-subgraph nodes. Non-widget inputs (e.g. AUDIO, IMAGE) now return
`undefined` instead of a bogus promotion entry.

`resolveSubgraphInputTarget` had an asymmetry: the non-subgraph branch
checked `getTargetWidget()` before returning, but the `isSubgraphNode()`
branch returned unconditionally for every input. For nested subgraphs
where non-widget slots are linked through to inner SubgraphNode inputs,
this created `PromotedWidgetView` entries that failed `resolveDeepest()`
(falling back to `type: 'button'`), while the inputs also rendered as
normal slot circles since `input.widget` was never set by
`_resolveInputWidget` (which correctly skipped them).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9542-fix-prevent-non-widget-inputs-on-nested-subgraphs-from-appearing-as-button-widgets-31c6d73d3650816387c3f97f0385e762)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
christian-byrne added a commit that referenced this pull request Mar 8, 2026
…hs from appearing as button widgets (#9542) (#9581)

Backport of #9542 to core/1.40.

Conflict: resolveSubgraphInputTarget.ts was modify/delete — kept as new
file (the fix).

**Original PR:** #9542
**Pipeline ticket:** 15e1f241-efaa-4fe5-88ca-4ccc7bfb3345

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Amp <amp@ampcode.com>
christian-byrne added a commit that referenced this pull request Mar 8, 2026
…esolution (#9282) (#9616)

Backport of #9282 to core/1.40. MUST — user-facing subgraph widget
resolution bug.

12 conflict files resolved:
- 8 modify/delete: new files introduced by the PR (kept as new)
- 1 add/add: resolveSubgraphInputTarget.ts (merged with existing from
#9542 backport)
- 3 content: accepted incoming changes

**Original PR:** #9282
**Pipeline ticket:** 15e1f241-efaa-4fe5-88ca-4ccc7bfb3345

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: GitHub Action <action@github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.41 Backport PRs for cloud 1.41 core/1.40 Backport PRs for core 1.40 core/1.41 Backport PRs for core 1.41 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants