Comfy-Org / Comfy-Org/ComfyUI_frontend

Run (on change) still re-queues when orbiting the Load3D preview camera

Open
#14,453 2 comments 1 reaction 2 assignees Claimed by @jtydhr88 View on GitHub
area:previews Potential Bug
Dominant language
TypeScript
Stars
2k
Forks
699
Avg merge
1d 7h
Merged PRs (30d)
490

Description

Follow-up to #14041 (merged). This was the one review item from that PR that did not land.

## Problem / Goal

`nonExecutionNodeProperties` in `src/scripts/changeTracker.ts` omits `pos`, `size`, `flags`, `order`, `color`, `bgcolor`, `boxcolor`, `shape`, `showAdvanced` and `title` — but not `properties`, which is where ComfyUI nodes persist per-node UI state.

`src/composables/useLoad3d.ts:534` writes `nodeRef.value.properties['Camera Config']`, including the camera `state`. Orbiting the 3D preview camera therefore mutates `properties`, the execution-graph projection sees a diff, `executionGraphChanged` fires, and the workflow re-queues.

That is exactly the bug class #14041 was written to fix (presentation-only edits triggering execution), still live for a node shipped in this repo. No third-party node required.

**Repro**

1. Enable Run (on change)
2. Add a Preview3D / Load3D node
3. Orbit the preview camera without touching any widget
4. A prompt is queued

**Second-order case:** `useLoad3d.ts:987` performs the same write during serialization, so in change mode: queue → camera state written into `properties` → next capture sees a `properties` diff → queue again. Same family as the `control_after_generate` loop documented as out of scope in #14041.

## Proposed Solution

Adding `properties` to the omission set wholesale would be wrong. It carries genuinely prompt-relevant keys — `Node name for S&R`, `cnr_id`, `aux_id`, `ver`, `models` — so stripping all of it creates false negatives, where a real execution-relevant change silently fails to queue. That is worse than the current false positive.

Two workable shapes:

- omit the known-presentational keys *within* `properties`, mirroring how slots are handled via `nonExecutionSlotProperties`; or
- invert to an allowlist of the schema-declared prompt-relevant keys

## Acceptance Criteria

- [ ] Orbiting the Load3D / Preview3D camera with Run (on change) enabled does not queue a prompt
- [ ] Changing a prompt-relevant key under `properties` (e.g. `Node name for S&R`, `models`) still queues a prompt
- [ ] The serialization-time write at `useLoad3d.ts:987` does not produce a self-triggering queue loop in change mode
- [ ] Negative and positive test cases added to the `changeTracker` projection suite, in the style of the slot/boundary omission tests added by #14041

---
Raised in review of #14041 (rounds 2 through 4) and confirmed still present on merged `main`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.