Skip to content

[backport cloud/1.41] fix: prevent non-widget inputs on nested subgraphs from appearing as button widgets#9544

Merged
DrJKL merged 1 commit intocloud/1.41from
backport-9542-to-cloud-1.41
Mar 7, 2026
Merged

[backport cloud/1.41] fix: prevent non-widget inputs on nested subgraphs from appearing as button widgets#9544
DrJKL merged 1 commit intocloud/1.41from
backport-9542-to-cloud-1.41

Conversation

@comfy-pr-bot
Copy link
Member

@comfy-pr-bot comfy-pr-bot commented Mar 7, 2026

Backport of #9542 to cloud/1.41

Automatically created by backport workflow.

┆Issue is synchronized with this Notion page by Unito

…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 comfy-pr-bot requested a review from a team as a code owner March 7, 2026 23:00
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Mar 7, 2026
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Mar 7, 2026
@github-actions
Copy link

github-actions bot commented Mar 7, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/07/2026, 11:01:57 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

🎭 Playwright: ✅ 560 passed, 0 failed

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

@DrJKL DrJKL enabled auto-merge (squash) March 7, 2026 23:01
@github-actions
Copy link

github-actions bot commented Mar 7, 2026

⚡ Performance Report

No baseline found — showing absolute values.

Metric Value
canvas-idle: style recalcs 124
canvas-idle: layouts 0
canvas-idle: task duration 389ms
canvas-idle: heap delta -3.9 MB
canvas-mouse-sweep: style recalcs 173
canvas-mouse-sweep: layouts 12
canvas-mouse-sweep: task duration 851ms
canvas-mouse-sweep: heap delta -3.0 MB
dom-widget-clipping: style recalcs 42
dom-widget-clipping: layouts 0
dom-widget-clipping: task duration 358ms
dom-widget-clipping: heap delta 7.6 MB
subgraph-dom-widget-clipping: style recalcs 73
subgraph-dom-widget-clipping: layouts 0
subgraph-dom-widget-clipping: task duration 406ms
subgraph-dom-widget-clipping: heap delta 14.4 MB
subgraph-idle: style recalcs 121
subgraph-idle: layouts 0
subgraph-idle: task duration 371ms
subgraph-idle: heap delta -3.6 MB
subgraph-mouse-sweep: style recalcs 161
subgraph-mouse-sweep: layouts 16
subgraph-mouse-sweep: task duration 793ms
subgraph-mouse-sweep: heap delta -5.2 MB
Raw data
{
  "timestamp": "2026-03-07T23:05:15.435Z",
  "gitSha": "274a9ca73e5b4d16f4e4b28d89844c79d0362c5f",
  "branch": "backport-9542-to-cloud-1.41",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2038.4480000000167,
      "styleRecalcs": 125,
      "styleRecalcDurationMs": 18.326999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 419.854,
      "heapDeltaBytes": -3723836
    },
    {
      "name": "canvas-idle",
      "durationMs": 2047.7070000000026,
      "styleRecalcs": 125,
      "styleRecalcDurationMs": 18.855,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 379.43499999999995,
      "heapDeltaBytes": -3985644
    },
    {
      "name": "canvas-idle",
      "durationMs": 2007.190000000037,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 15.740999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 368.5849999999999,
      "heapDeltaBytes": -4442728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2063.4509999999864,
      "styleRecalcs": 182,
      "styleRecalcDurationMs": 47.848,
      "layouts": 12,
      "layoutDurationMs": 3.082,
      "taskDurationMs": 987.3770000000001,
      "heapDeltaBytes": -3311140
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1827.2610000000213,
      "styleRecalcs": 167,
      "styleRecalcDurationMs": 45.769000000000005,
      "layouts": 12,
      "layoutDurationMs": 3.07,
      "taskDurationMs": 791.606,
      "heapDeltaBytes": -3240164
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1862.181000000021,
      "styleRecalcs": 169,
      "styleRecalcDurationMs": 44.974,
      "layouts": 12,
      "layoutDurationMs": 3.54,
      "taskDurationMs": 773.6279999999999,
      "heapDeltaBytes": -2898644
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 552.1650000000022,
      "styleRecalcs": 39,
      "styleRecalcDurationMs": 11.687,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 355.24999999999994,
      "heapDeltaBytes": 7917388
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 589.5269999999755,
      "styleRecalcs": 45,
      "styleRecalcDurationMs": 15.574000000000002,
      "layouts": 1,
      "layoutDurationMs": 0.2710000000000001,
      "taskDurationMs": 358.021,
      "heapDeltaBytes": 8291472
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 583.5890000000177,
      "styleRecalcs": 43,
      "styleRecalcDurationMs": 12.398,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 361.78,
      "heapDeltaBytes": 7682704
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 621.3260000000105,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 18.446,
      "layouts": 1,
      "layoutDurationMs": 0.22400000000000003,
      "taskDurationMs": 419.594,
      "heapDeltaBytes": 16387708
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 567.7469999999971,
      "styleRecalcs": 71,
      "styleRecalcDurationMs": 14.309000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 386.614,
      "heapDeltaBytes": 14379940
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 579.4530000000009,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 15.288000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 412.272,
      "heapDeltaBytes": 14382884
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1990.402999999958,
      "styleRecalcs": 120,
      "styleRecalcDurationMs": 18.016000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 368.52799999999996,
      "heapDeltaBytes": -3523536
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2012.954000000036,
      "styleRecalcs": 122,
      "styleRecalcDurationMs": 18.378999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 371.98400000000004,
      "heapDeltaBytes": -4309408
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1996.752000000015,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 18.481,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 372.56600000000003,
      "heapDeltaBytes": -3539900
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1708.024000000023,
      "styleRecalcs": 155,
      "styleRecalcDurationMs": 41.660000000000004,
      "layouts": 16,
      "layoutDurationMs": 3.9509999999999996,
      "taskDurationMs": 703.6329999999999,
      "heapDeltaBytes": -6130724
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1696.7989999999986,
      "styleRecalcs": 155,
      "styleRecalcDurationMs": 44.083,
      "layouts": 16,
      "layoutDurationMs": 4.177999999999999,
      "taskDurationMs": 728.189,
      "heapDeltaBytes": -5198328
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 2005.5360000000064,
      "styleRecalcs": 173,
      "styleRecalcDurationMs": 49.774,
      "layouts": 16,
      "layoutDurationMs": 4.264,
      "taskDurationMs": 946.5189999999999,
      "heapDeltaBytes": -5110068
    }
  ]
}

@DrJKL DrJKL merged commit 4448160 into cloud/1.41 Mar 7, 2026
38 checks passed
@DrJKL DrJKL deleted the backport-9542-to-cloud-1.41 branch March 7, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport Backporting a PR onto a release candidate size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants