Skip to content

[backport cloud/1.41] Always use interior nodeId for app mode#9675

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

[backport cloud/1.41] Always use interior nodeId for app mode#9675
AustinMroz merged 1 commit intocloud/1.41from
backport-9669-to-cloud-1.41

Conversation

@comfy-pr-bot
Copy link
Member

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

Backport of #9669 to cloud/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 added the backport Backporting a PR onto a release candidate label Mar 9, 2026
@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

🎨 Storybook: ✅ Built — View Storybook

Details

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

Links

@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

⚡ Performance Report

No baseline found — showing absolute values.

Metric Value
canvas-idle: style recalcs 124
canvas-idle: layouts 0
canvas-idle: task duration 377ms
canvas-idle: heap delta -3.5 MB
canvas-mouse-sweep: style recalcs 166
canvas-mouse-sweep: layouts 12
canvas-mouse-sweep: task duration 798ms
canvas-mouse-sweep: heap delta -3.1 MB
dom-widget-clipping: style recalcs 42
dom-widget-clipping: layouts 0
dom-widget-clipping: task duration 348ms
dom-widget-clipping: heap delta 7.1 MB
subgraph-dom-widget-clipping: style recalcs 73
subgraph-dom-widget-clipping: layouts 0
subgraph-dom-widget-clipping: task duration 407ms
subgraph-dom-widget-clipping: heap delta -834.1 KB
subgraph-idle: style recalcs 121
subgraph-idle: layouts 0
subgraph-idle: task duration 368ms
subgraph-idle: heap delta -3.6 MB
subgraph-mouse-sweep: style recalcs 169
subgraph-mouse-sweep: layouts 16
subgraph-mouse-sweep: task duration 873ms
subgraph-mouse-sweep: heap delta -3.1 MB
Raw data
{
  "timestamp": "2026-03-09T20:21:38.549Z",
  "gitSha": "49f38ecbab86d1e7a4f82fda089f0655f189da16",
  "branch": "backport-9669-to-cloud-1.41",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2035.8620000000087,
      "styleRecalcs": 126,
      "styleRecalcDurationMs": 21.255999999999997,
      "layouts": 1,
      "layoutDurationMs": 0.3040000000000001,
      "taskDurationMs": 392.67999999999995,
      "heapDeltaBytes": -2604720
    },
    {
      "name": "canvas-idle",
      "durationMs": 2020.7259999999678,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 17.748,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 367.91400000000004,
      "heapDeltaBytes": -3842976
    },
    {
      "name": "canvas-idle",
      "durationMs": 2035.841000000005,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 15.681000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 371.07499999999993,
      "heapDeltaBytes": -4689008
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1918.6129999999935,
      "styleRecalcs": 176,
      "styleRecalcDurationMs": 45.64,
      "layouts": 12,
      "layoutDurationMs": 3.7520000000000002,
      "taskDurationMs": 847.208,
      "heapDeltaBytes": -3116452
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1768.5579999999845,
      "styleRecalcs": 157,
      "styleRecalcDurationMs": 43.17,
      "layouts": 12,
      "layoutDurationMs": 2.8769999999999993,
      "taskDurationMs": 770.678,
      "heapDeltaBytes": -4158584
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1804.0599999999927,
      "styleRecalcs": 166,
      "styleRecalcDurationMs": 44.945,
      "layouts": 13,
      "layoutDurationMs": 3.645,
      "taskDurationMs": 776.937,
      "heapDeltaBytes": -2365168
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 600.2229999999997,
      "styleRecalcs": 44,
      "styleRecalcDurationMs": 11.729999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 352.688,
      "heapDeltaBytes": 7437496
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 545.7929999999465,
      "styleRecalcs": 39,
      "styleRecalcDurationMs": 12.052,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 336.49999999999994,
      "heapDeltaBytes": 7434492
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 575.6410000000187,
      "styleRecalcs": 43,
      "styleRecalcDurationMs": 15.472999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 354.65999999999997,
      "heapDeltaBytes": 7513548
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 595.4069999999945,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 13.432999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 407.8010000000001,
      "heapDeltaBytes": -8840812
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 582.569000000035,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 13.565000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 409.49800000000005,
      "heapDeltaBytes": -8893748
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 603.0309999999872,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 19.875999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 402.788,
      "heapDeltaBytes": 15172276
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2018.002999999993,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 22.162000000000003,
      "layouts": 1,
      "layoutDurationMs": 0.2760000000000001,
      "taskDurationMs": 382.14,
      "heapDeltaBytes": -3317448
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1995.713999999964,
      "styleRecalcs": 120,
      "styleRecalcDurationMs": 16.822999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 355.959,
      "heapDeltaBytes": -3989200
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1994.2139999999995,
      "styleRecalcs": 120,
      "styleRecalcDurationMs": 18.113999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 365.004,
      "heapDeltaBytes": -4096796
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 2007.456999999988,
      "styleRecalcs": 173,
      "styleRecalcDurationMs": 48.606,
      "layouts": 16,
      "layoutDurationMs": 4.3790000000000004,
      "taskDurationMs": 942.6469999999999,
      "heapDeltaBytes": -5133428
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 2060.0709999999935,
      "styleRecalcs": 178,
      "styleRecalcDurationMs": 54.303999999999995,
      "layouts": 17,
      "layoutDurationMs": 4.325,
      "taskDurationMs": 1000.8940000000001,
      "heapDeltaBytes": 1298448
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1708.3850000000211,
      "styleRecalcs": 155,
      "styleRecalcDurationMs": 39.598,
      "layouts": 16,
      "layoutDurationMs": 3.799,
      "taskDurationMs": 674.742,
      "heapDeltaBytes": -5822496
    }
  ]
}

@AustinMroz AustinMroz merged commit 64e1983 into cloud/1.41 Mar 9, 2026
44 checks passed
@AustinMroz AustinMroz deleted the backport-9669-to-cloud-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