Skip to content

[backport core/1.41] Always use interior nodeId for app mode#9674

Merged
AustinMroz merged 1 commit intocore/1.41from
backport-9669-to-core-1.41
Mar 9, 2026
Merged

[backport core/1.41] Always use interior nodeId for app mode#9674
AustinMroz merged 1 commit intocore/1.41from
backport-9669-to-core-1.41

Conversation

@comfy-pr-bot
Copy link
Member

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

Backport of #9669 to core/1.41

Automatically created by backport workflow.

┆Issue is synchronized with this Notion page by Unito

App mode stores the state of selected widgets as a tuple of `[NodeId,
WidgetName]`. With recent subgraph changes, for a given node,
`widget.name` will no longer uniquely resolve to a single widget.

- From both Vue and Litegraph, selecting an input for display in App
mode will now resolve the NodeId of the node which owns the widget
instead of the selected node.
- When displaying selections in litegraph, if the NodeId does not exist
in the current graph, instead of resolving the actual node the rootGraph
is searched for any subgraphNode which contains a view matching the
`[NodeId, WidgetName]` pair.
- When displaying widgets in App mode, the widget is always set as being
a view of the real widget (This means that they will not display a
purple promotion border.

Known Issue:
- These same subgraph changes made it so that a widget can be linked
without being disabled. This PR makes it so widgets which have been
linked instead display normally under the assumption that they are
incorrectly marked as disabled. As disabled widgets can not be selected
as inputs, this should handle normal usage fine, but a better solution
is being investigated

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9669-Always-use-interior-nodeId-for-app-mode-31e6d73d365081f8a918d0e43cb659ee)
by [Unito](https://www.unito.io)
@comfy-pr-bot comfy-pr-bot requested a review from a team as a code owner March 9, 2026 20:16
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Mar 9, 2026
@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Mar 9, 2026
@github-actions
Copy link

github-actions bot commented Mar 9, 2026

🎭 Playwright: ✅ 556 passed, 0 failed · 2 flaky

📊 Browser Reports
  • chromium: View Report (✅ 543 / ❌ 0 / ⚠️ 2 / ⏭️ 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 9, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/09/2026, 08:18:24 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 9, 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 126 +2%
canvas-idle: layouts 0 0
canvas-idle: task duration 429ms 440ms +2%
canvas-mouse-sweep: style recalcs 171 182 +6%
canvas-mouse-sweep: layouts 12 12 -3%
canvas-mouse-sweep: task duration 902ms 1035ms +15%
dom-widget-clipping: style recalcs 43 43 -1%
dom-widget-clipping: layouts 0 0
dom-widget-clipping: task duration 367ms 368ms +0%
subgraph-dom-widget-clipping: style recalcs 75 75 -1%
subgraph-dom-widget-clipping: layouts 0 0 +0%
subgraph-dom-widget-clipping: task duration 424ms 438ms +3%
subgraph-idle: style recalcs 121 121 -0%
subgraph-idle: layouts 0 0 +0%
subgraph-idle: task duration 387ms 418ms +8%
subgraph-mouse-sweep: style recalcs 162 160 -1%
subgraph-mouse-sweep: layouts 16 16 -2%
subgraph-mouse-sweep: task duration 817ms 835ms +2%
Raw data
{
  "timestamp": "2026-03-09T20:21:48.804Z",
  "gitSha": "48a1a1d01da210b84babdc7dbb87e1d078198833",
  "branch": "backport-9669-to-core-1.41",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2065.2410000000145,
      "styleRecalcs": 126,
      "styleRecalcDurationMs": 25.603,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 458.70700000000005,
      "heapDeltaBytes": -3374668
    },
    {
      "name": "canvas-idle",
      "durationMs": 2048.9130000000273,
      "styleRecalcs": 127,
      "styleRecalcDurationMs": 28.168,
      "layouts": 1,
      "layoutDurationMs": 0.24399999999999997,
      "taskDurationMs": 454.98900000000003,
      "heapDeltaBytes": -3442388
    },
    {
      "name": "canvas-idle",
      "durationMs": 2058.4069999999883,
      "styleRecalcs": 126,
      "styleRecalcDurationMs": 23.52,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 406.169,
      "heapDeltaBytes": -3591980
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2122.598000000011,
      "styleRecalcs": 190,
      "styleRecalcDurationMs": 63.36600000000001,
      "layouts": 12,
      "layoutDurationMs": 3.503,
      "taskDurationMs": 1202.647,
      "heapDeltaBytes": -2739912
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2081.6520000000196,
      "styleRecalcs": 184,
      "styleRecalcDurationMs": 57.664,
      "layouts": 12,
      "layoutDurationMs": 3.4499999999999997,
      "taskDurationMs": 1067.627,
      "heapDeltaBytes": -3361356
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1892.3460000000318,
      "styleRecalcs": 173,
      "styleRecalcDurationMs": 49.578,
      "layouts": 12,
      "layoutDurationMs": 3.5420000000000003,
      "taskDurationMs": 833.2299999999999,
      "heapDeltaBytes": -3912816
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 587.050000000005,
      "styleRecalcs": 42,
      "styleRecalcDurationMs": 13.839,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 371.91599999999994,
      "heapDeltaBytes": 7432076
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 575.1000000000204,
      "styleRecalcs": 44,
      "styleRecalcDurationMs": 16.730999999999998,
      "layouts": 1,
      "layoutDurationMs": 0.268,
      "taskDurationMs": 364.12699999999995,
      "heapDeltaBytes": 8268516
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 591.8360000000007,
      "styleRecalcs": 42,
      "styleRecalcDurationMs": 13.725999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 367.11899999999997,
      "heapDeltaBytes": 6522492
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 614.0059999999607,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 19.632,
      "layouts": 1,
      "layoutDurationMs": 0.17900000000000013,
      "taskDurationMs": 443.195,
      "heapDeltaBytes": -8320308
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 617.1829999999545,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 16.503000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 436.04,
      "heapDeltaBytes": -8885400
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 612.7450000000181,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 16.717999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 433.47600000000006,
      "heapDeltaBytes": 15568984
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2007.758999999993,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 25.801,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 409.87800000000004,
      "heapDeltaBytes": -3436208
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2010.4910000000018,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 24.676999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 431.589,
      "heapDeltaBytes": -3705376
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2010.4550000000359,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 23.269,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 413.845,
      "heapDeltaBytes": -4337136
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1692.8369999999973,
      "styleRecalcs": 154,
      "styleRecalcDurationMs": 46.425999999999995,
      "layouts": 16,
      "layoutDurationMs": 4.087,
      "taskDurationMs": 763.688,
      "heapDeltaBytes": -5157400
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1992.5039999999967,
      "styleRecalcs": 172,
      "styleRecalcDurationMs": 56.056000000000004,
      "layouts": 16,
      "layoutDurationMs": 4.252000000000001,
      "taskDurationMs": 991.6539999999999,
      "heapDeltaBytes": -5141412
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1708.0180000000382,
      "styleRecalcs": 155,
      "styleRecalcDurationMs": 47.019,
      "layouts": 16,
      "layoutDurationMs": 4.64,
      "taskDurationMs": 748.3340000000001,
      "heapDeltaBytes": -6389104
    }
  ]
}

@AustinMroz AustinMroz merged commit bca61c7 into core/1.41 Mar 9, 2026
39 checks passed
@AustinMroz AustinMroz deleted the backport-9669-to-core-1.41 branch March 9, 2026 20:25
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:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants