Skip to content

feat: gate node replacement loading on server feature flag#8750

Merged
DrJKL merged 3 commits intomainfrom
jk/node-replace-feature-flag
Feb 17, 2026
Merged

feat: gate node replacement loading on server feature flag#8750
DrJKL merged 3 commits intomainfrom
jk/node-replace-feature-flag

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Feb 9, 2026

Summary

Gates the node replacement store's load() call behind the node_replacements server feature flag, so the frontend only calls /api/node_replacements when the backend advertises support.

Changes

  • Added NODE_REPLACEMENTS = 'node_replacements' to ServerFeatureFlag enum
  • Added nodeReplacementsEnabled getter to useFeatureFlags()
  • Added api.serverSupportsFeature('node_replacements') guard in useNodeReplacementStore.load()

Context

Without this guard, the frontend would attempt to fetch node replacements from backends that don't support the endpoint, causing 404 errors.

Companion backend PR: Comfy-Org/ComfyUI#12362

┆Issue is synchronized with this Notion page by Unito

@christian-byrne christian-byrne requested review from a team as code owners February 9, 2026 00:32
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 9, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 9, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉


📝 Walkthrough

Walkthrough

Adds a new server feature flag NODE_REPLACEMENTS and a public getter nodeReplacementsEnabled; node replacement store now consults that flag and aborts load when the flag is false. Tests updated to mock and assert behavior when the feature flag is disabled.

Changes

Cohort / File(s) Summary
Feature flag definition
src/composables/useFeatureFlags.ts
Added NODE_REPLACEMENTS = 'node_replacements' to ServerFeatureFlag and a nodeReplacementsEnabled getter that reads the server feature with default false.
Feature gate implementation
src/platform/nodeReplacement/nodeReplacementStore.ts
Imported useFeatureFlags and added an early-return in load() to skip initialization when nodeReplacementsEnabled is false.
Tests
src/platform/nodeReplacement/nodeReplacementStore.test.ts
Added mocking for useFeatureFlags and test coverage for the disabled flag case; updated test helpers to accept a feature flag parameter and ensured default flag reset in setup.

Sequence Diagram(s)

sequenceDiagram
    participant Store as NodeReplacementStore
    participant Flags as useFeatureFlags
    participant Server as Server/API

    Store->>Flags: request nodeReplacementsEnabled
    Flags-->>Store: returns boolean
    alt flag enabled
        Store->>Server: fetch node replacements / initialize
        Server-->>Store: data / success
    else flag disabled
        Store-->>Store: abort load (early return)
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 A little flag in fields of code,
"node_replacements" now lights the road.
The store asks gently, "May I proceed?"
If granted — we dance; if not — we heed. 🥕✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 54.55% 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 title accurately summarizes the primary change: gating node replacement loading on a server feature flag, which is the core objective of this PR.
Description check ✅ Passed The description covers all required template sections: Summary explains the change and rationale, Changes lists the three key modifications, and context clarifies the problem being solved.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch jk/node-replace-feature-flag

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@src/locales/en/main.json`:
- Around line 2813-2815: The current message replacedAllNodes uses "(s)" for
pluralization; change it to use the i18n pluralization system for
replacedAllNodes (e.g., define singular and plural forms via the i18n plural
syntax) and update any callers of replacedAllNodes to pass the numeric count
variable so the i18n system can select the correct form; ensure replacedNode and
replaceFailed remain unchanged and that the key replacedAllNodes follows the
existing locale plural pattern used elsewhere in the codebase.

In `@src/scripts/app.ts`:
- Around line 1145-1150: Remove the noisy debug console.log call that prints
replacement data: locate the console.log('[MissingNode]', n.type, {
isReplaceable: replacement !== null, replacement, allReplacements:
nodeReplacementStore.replacements }) in src/scripts/app.ts and either delete it
or replace it with a gated debug log (e.g., use a debug/logger.debug call or
wrap it with a conditional like if (DEBUG) { ... }) so the sensitive/dump data
is not emitted in production; ensure the replacement uses the existing logging
facility or a feature flag rather than console.log.
🧹 Nitpick comments (1)
src/services/dialogService.ts (1)

99-108: Prefer function declarations for the replace handlers.

These are plain helpers and can be declared as functions for consistency with repo conventions.

♻️ Suggested refactor
-    const handleReplace = async (nodeType: string) => {
-      await replaceNode(nodeType)
-    }
-
-    const handleReplaceAll = async () => {
-      await replaceAllNodes(props.missingNodeTypes as MissingNodeType[])
-      dialogStore.closeDialog({ key: 'global-missing-nodes' })
-    }
+    async function handleReplace(nodeType: string) {
+      await replaceNode(nodeType)
+    }
+
+    async function handleReplaceAll() {
+      await replaceAllNodes(props.missingNodeTypes as MissingNodeType[])
+      dialogStore.closeDialog({ key: 'global-missing-nodes' })
+    }

As per coding guidelines: "Do not use function expressions if it's possible to use function declarations instead".

Comment on lines 2813 to 2815
"replacedNode": "Replaced node: {nodeType}",
"replacedAllNodes": "Replaced {count} node type(s)",
"replaceFailed": "Failed to replace nodes"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use i18n pluralization instead of “(s)”.
Please switch to a pluralized string form for replacedAllNodes.

💡 Suggested update
-    "replacedAllNodes": "Replaced {count} node type(s)",
+    "replacedAllNodes": "Replaced {count} node types | Replaced {count} node type | Replaced {count} node types",

As per coding guidelines: "use the plurals system in i18n instead of hardcoding pluralization".

🤖 Prompt for AI Agents
In `@src/locales/en/main.json` around lines 2813 - 2815, The current message
replacedAllNodes uses "(s)" for pluralization; change it to use the i18n
pluralization system for replacedAllNodes (e.g., define singular and plural
forms via the i18n plural syntax) and update any callers of replacedAllNodes to
pass the numeric count variable so the i18n system can select the correct form;
ensure replacedNode and replaceFailed remain unchanged and that the key
replacedAllNodes follows the existing locale plural pattern used elsewhere in
the codebase.

Comment on lines 1145 to 1150
// TODO: Remove debug log
console.log('[MissingNode]', n.type, {
isReplaceable: replacement !== null,
replacement,
allReplacements: nodeReplacementStore.replacements
})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Remove the debug console log before release.

This log is noisy and dumps replacement data; it should be removed or gated behind a debug flag.

🧹 Proposed cleanup
-          // TODO: Remove debug log
-          console.log('[MissingNode]', n.type, {
-            isReplaceable: replacement !== null,
-            replacement,
-            allReplacements: nodeReplacementStore.replacements
-          })
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// TODO: Remove debug log
console.log('[MissingNode]', n.type, {
isReplaceable: replacement !== null,
replacement,
allReplacements: nodeReplacementStore.replacements
})
🤖 Prompt for AI Agents
In `@src/scripts/app.ts` around lines 1145 - 1150, Remove the noisy debug
console.log call that prints replacement data: locate the
console.log('[MissingNode]', n.type, { isReplaceable: replacement !== null,
replacement, allReplacements: nodeReplacementStore.replacements }) in
src/scripts/app.ts and either delete it or replace it with a gated debug log
(e.g., use a debug/logger.debug call or wrap it with a conditional like if
(DEBUG) { ... }) so the sensitive/dump data is not emitted in production; ensure
the replacement uses the existing logging facility or a feature flag rather than
console.log.

@github-actions
Copy link

github-actions bot commented Feb 17, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/17/2026, 07:30:18 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Feb 17, 2026

Playwright: ✅ 520 passed, 0 failed · 3 flaky

📊 Browser Reports
  • chromium: View Report (✅ 508 / ❌ 0 / ⚠️ 3 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

viva-jinyi
viva-jinyi previously approved these changes Feb 17, 2026
Copy link
Member

@viva-jinyi viva-jinyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/dialog/content/MissingNodesContent.vue`:
- Line 230: The import of StatusBadge (import StatusBadge from
'@/components/common/StatusBadge.vue') in MissingNodesContent.vue is unused and
causing lint/TS failures; remove that import statement or register and use
StatusBadge in the component (e.g., add it to the components object and include
it in the template). Update the components registration (if you choose to use
it) or simply delete the StatusBadge import to resolve the CI errors.

<script setup lang="ts">
import { computed, ref } from 'vue'

import StatusBadge from '@/components/common/StatusBadge.vue'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Remove unused StatusBadge import to unblock CI.

Lint/TS errors and multiple pipeline failures are caused by this unused import. Remove it or wire the component into the template.

✅ Suggested fix
-import StatusBadge from '@/components/common/StatusBadge.vue'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import StatusBadge from '@/components/common/StatusBadge.vue'
🧰 Tools
🪛 ESLint

[error] 230-230: 'StatusBadge' is defined but never used.

(unused-imports/no-unused-imports)

🪛 GitHub Actions: CI: Dist Telemetry Scan

[error] 230-230: TS6133: 'StatusBadge' is declared but its value is never read.

🪛 GitHub Actions: CI: Size Data

[error] 230-230: TS6133: 'StatusBadge' is declared but its value is never read.

🪛 GitHub Actions: CI: Tests E2E

[error] 230-230: TS6133: 'StatusBadge' is declared but its value is never read.

🪛 GitHub Check: collect

[failure] 230-230:
'StatusBadge' is declared but its value is never read.

🪛 GitHub Check: scan

[failure] 230-230:
'StatusBadge' is declared but its value is never read.

🪛 GitHub Check: setup

[failure] 230-230:
'StatusBadge' is declared but its value is never read.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/dialog/content/MissingNodesContent.vue` at line 230, The
import of StatusBadge (import StatusBadge from
'@/components/common/StatusBadge.vue') in MissingNodesContent.vue is unused and
causing lint/TS failures; remove that import statement or register and use
StatusBadge in the component (e.g., add it to the components object and include
it in the template). Update the components registration (if you choose to use
it) or simply delete the StatusBadge import to resolve the CI errors.

@viva-jinyi viva-jinyi force-pushed the jk/node-replace-feature-flag branch from d2d04f8 to 7b778bd Compare February 17, 2026 12:52
@dosubot dosubot bot added size:XS This PR changes 0-9 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Feb 17, 2026
@github-actions
Copy link

github-actions bot commented Feb 17, 2026

Bundle Size Report

Summary

  • Raw size: 19.9 MB baseline 19.9 MB — 🔴 +262 B
  • Gzip: 4.25 MB baseline 4.25 MB — 🔴 +20 B
  • Brotli: 3.3 MB baseline 3.3 MB — 🔴 +54 B
  • Bundles: 231 current • 231 baseline • 109 added / 109 removed

Category Glance
Utilities & Hooks 🔴 +178 B (237 kB) · Data & Services 🔴 +84 B (2.16 MB) · Vendor & Third-Party ⚪ 0 B (8.69 MB) · Other ⚪ 0 B (7.36 MB) · Graph Workspace ⚪ 0 B (887 kB) · Panels & Settings ⚪ 0 B (427 kB) · + 5 more

Per-category breakdown
App Entry Points — 21.7 kB (baseline 21.7 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-C3pa6wgo.js (new) 21.7 kB 🔴 +21.7 kB 🔴 +7.03 kB 🔴 +6.11 kB
assets/index-CuR1Z37d.js (removed) 21.7 kB 🟢 -21.7 kB 🟢 -7.02 kB 🟢 -6.13 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-CjJWN_C6.js (removed) 887 kB 🟢 -887 kB 🟢 -191 kB 🟢 -146 kB
assets/GraphView-DoAs1euY.js (new) 887 kB 🔴 +887 kB 🔴 +191 kB 🔴 +146 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-D4aYOEJg.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.31 kB 🟢 -2.81 kB
assets/CloudSurveyView-zl9FXOvE.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudLoginView-Blv4Jkzu.js (new) 10.1 kB 🔴 +10.1 kB 🔴 +2.94 kB 🔴 +2.58 kB
assets/CloudLoginView-ZjTtgPDu.js (removed) 10.1 kB 🟢 -10.1 kB 🟢 -2.94 kB 🟢 -2.58 kB
assets/UserCheckView-Bh0v4ToO.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.95 kB
assets/UserCheckView-CkDZiafN.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.23 kB 🔴 +1.95 kB
assets/CloudSignupView-De3cvDUn.js (new) 7.46 kB 🔴 +7.46 kB 🔴 +2.34 kB 🔴 +2.06 kB
assets/CloudSignupView-TA427c0q.js (removed) 7.46 kB 🟢 -7.46 kB 🟢 -2.34 kB 🟢 -2.05 kB
assets/CloudLayoutView-BFXHOI41.js (removed) 6.48 kB 🟢 -6.48 kB 🟢 -2.12 kB 🟢 -1.84 kB
assets/CloudLayoutView-CCNjc5YY.js (new) 6.48 kB 🔴 +6.48 kB 🔴 +2.12 kB 🔴 +1.84 kB
assets/CloudForgotPasswordView-BdnMdBn-.js (new) 5.61 kB 🔴 +5.61 kB 🔴 +1.95 kB 🔴 +1.72 kB
assets/CloudForgotPasswordView-DGtvIbUf.js (removed) 5.61 kB 🟢 -5.61 kB 🟢 -1.95 kB 🟢 -1.74 kB
assets/CloudAuthTimeoutView-B2lvPdey.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.78 kB 🔴 +1.58 kB
assets/CloudAuthTimeoutView-DNjqI8Qm.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-Br4QiDau.js (removed) 4.76 kB 🟢 -4.76 kB 🟢 -1.79 kB 🟢 -1.58 kB
assets/CloudSubscriptionRedirectView-CFYBZI3Y.js (new) 4.76 kB 🔴 +4.76 kB 🔴 +1.8 kB 🔴 +1.59 kB
assets/UserSelectView-CZ9MvUvf.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.47 kB
assets/UserSelectView-Dsszal_5.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.46 kB
assets/CloudSorryContactSupportView-C7v00oYe.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-Dw2vG5GB.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-CkqOXcVR.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.3 kB 🟢 -4.65 kB
assets/SecretsPanel-DYSuCXGD.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.65 kB
assets/LegacyCreditsPanel-3SU0uTCH.js (removed) 20.7 kB 🟢 -20.7 kB 🟢 -5.58 kB 🟢 -4.92 kB
assets/LegacyCreditsPanel-C-gY4fea.js (new) 20.7 kB 🔴 +20.7 kB 🔴 +5.58 kB 🔴 +4.91 kB
assets/SubscriptionPanel-iUfyPmHn.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.73 kB 🔴 +4.18 kB
assets/SubscriptionPanel-YrGuuxQm.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.74 kB 🟢 -4.17 kB
assets/KeybindingPanel-Brmuivph.js (new) 12.4 kB 🔴 +12.4 kB 🔴 +3.58 kB 🔴 +3.17 kB
assets/KeybindingPanel-DfI_9jRD.js (removed) 12.4 kB 🟢 -12.4 kB 🟢 -3.58 kB 🟢 -3.18 kB
assets/ExtensionPanel-BTawccpz.js (new) 9.43 kB 🔴 +9.43 kB 🔴 +2.67 kB 🔴 +2.37 kB
assets/ExtensionPanel-NXK4fhnl.js (removed) 9.43 kB 🟢 -9.43 kB 🟢 -2.67 kB 🟢 -2.37 kB
assets/AboutPanel-CDBfhhwD.js (removed) 8.53 kB 🟢 -8.53 kB 🟢 -2.44 kB 🟢 -2.19 kB
assets/AboutPanel-ChlmsnaN.js (new) 8.53 kB 🔴 +8.53 kB 🔴 +2.44 kB 🔴 +2.19 kB
assets/ServerConfigPanel-B7jp5wnr.js (removed) 6.5 kB 🟢 -6.5 kB 🟢 -2.13 kB 🟢 -1.93 kB
assets/ServerConfigPanel-C2cUhEtB.js (new) 6.5 kB 🔴 +6.5 kB 🔴 +2.13 kB 🔴 +1.9 kB
assets/UserPanel-ChY4wF5f.js (removed) 6.21 kB 🟢 -6.21 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/UserPanel-D1umAzZD.js (new) 6.21 kB 🔴 +6.21 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/cloudRemoteConfig-BoZ2HpY2.js (removed) 1.49 kB 🟢 -1.49 kB 🟢 -726 B 🟢 -628 B
assets/cloudRemoteConfig-xBunDPuN.js (new) 1.49 kB 🔴 +1.49 kB 🔴 +725 B 🔴 +628 B
assets/refreshRemoteConfig-BmtMk9Pp.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +518 B 🔴 +470 B
assets/refreshRemoteConfig-Bv3WnNVk.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -519 B 🟢 -472 B
assets/config-CPqNkkC7.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B4dcbqqW.js 28 kB 28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B9H-S_7S.js 37.6 kB 37.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcvZAWH9.js 27.1 kB 27.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCDmBSaS.js 29.8 kB 29.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CjFyTs4c.js 23.3 kB 23.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-COYfq8TF.js 28.1 kB 28.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Czm8M4DT.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D_4IUqgy.js 31.6 kB 31.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DSKCF1uG.js 27.3 kB 27.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-t36S0PpX.js 33.3 kB 33.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-ZdQ8OYkR.js 29.2 kB 29.2 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-BlIVglBX.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +991 B
assets/auth-C6kepzdg.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -986 B
assets/SignUpForm-Chu93klM.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/SignUpForm-DEKBxveo.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.1 kB
assets/UpdatePasswordContent-CP1Lo7ei.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.08 kB 🔴 +956 B
assets/UpdatePasswordContent-DzVX1GkL.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.08 kB 🟢 -958 B
assets/firebaseAuthStore-DlThSf5H.js (new) 837 B 🔴 +837 B 🔴 +404 B 🔴 +361 B
assets/firebaseAuthStore-zjPGgtwT.js (removed) 837 B 🟢 -837 B 🟢 -403 B 🟢 -360 B
assets/auth-CCnvZVf_.js (removed) 357 B 🟢 -357 B 🟢 -223 B 🟢 -193 B
assets/auth-CZxBaF99.js (new) 357 B 🔴 +357 B 🔴 +224 B 🔴 +193 B
assets/PasswordFields-PRmvmozX.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-DoQNteEy.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 785 B (baseline 785 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BolKzsf4.js (new) 785 B 🔴 +785 B 🔴 +396 B 🔴 +343 B
assets/useSubscriptionDialog-DX5rDymi.js (removed) 785 B 🟢 -785 B 🟢 -395 B 🟢 -342 B

Status: 1 added / 1 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-BF4Gmtup.js (new) 9.89 kB 🔴 +9.89 kB 🔴 +3.42 kB 🔴 +3.01 kB
assets/useTerminalTabs-D0Lhf396.js (removed) 9.89 kB 🟢 -9.89 kB 🟢 -3.42 kB 🟢 -3 kB
assets/ComfyQueueButton-DvbjPrJR.js (new) 7.17 kB 🔴 +7.17 kB 🔴 +2.31 kB 🔴 +2.07 kB
assets/ComfyQueueButton-u7hN0oDS.js (removed) 7.17 kB 🟢 -7.17 kB 🟢 -2.31 kB 🟢 -2.07 kB
assets/SubscribeButton-8bPzKwMq.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -886 B
assets/SubscribeButton-A5hj3kB1.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +889 B
assets/cloudFeedbackTopbarButton-5RVS-EBP.js (removed) 1.64 kB 🟢 -1.64 kB 🟢 -873 B 🟢 -780 B
assets/cloudFeedbackTopbarButton-Dq7qePLq.js (new) 1.64 kB 🔴 +1.64 kB 🔴 +873 B 🔴 +766 B
assets/ComfyQueueButton-CY-kK2xb.js (new) 842 B 🔴 +842 B 🔴 +411 B 🔴 +370 B
assets/ComfyQueueButton-DfRV3ist.js (removed) 842 B 🟢 -842 B 🟢 -410 B 🟢 -362 B
assets/Button-BSbVSHEC.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-DUOHulIZ.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-DY3yZGiM.js 7.45 kB 7.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-BG_h7fX0.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-C-W7fvtO.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.16 MB (baseline 2.16 MB) • 🔴 +84 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-DLDX24e2.js (new) 1.38 MB 🔴 +1.38 MB 🔴 +310 kB 🔴 +239 kB
assets/dialogService-BaxVoH-u.js (removed) 1.38 MB 🟢 -1.38 MB 🟢 -310 kB 🟢 -239 kB
assets/api-BLCiFnW-.js (new) 647 kB 🔴 +647 kB 🔴 +146 kB 🔴 +117 kB
assets/api-BLCOfDAe.js (removed) 647 kB 🟢 -647 kB 🟢 -146 kB 🟢 -117 kB
assets/load3dService-Bq3L7_nk.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/load3dService-DFqnRwB2.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/systemStatsStore-B_c-Td-r.js (new) 12.2 kB 🔴 +12.2 kB 🔴 +4.26 kB 🔴 +3.74 kB
assets/systemStatsStore-BrOB-gbc.js (removed) 12.2 kB 🟢 -12.2 kB 🟢 -4.26 kB 🟢 -3.74 kB
assets/releaseStore-Bnk94cd-.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-CwT0dW0e.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/keybindingService-BMnTvCRW.js (removed) 6.57 kB 🟢 -6.57 kB 🟢 -1.72 kB 🟢 -1.49 kB
assets/keybindingService-CXh-FBY6.js (new) 6.57 kB 🔴 +6.57 kB 🔴 +1.72 kB 🔴 +1.49 kB
assets/bootstrapStore-B3gJCllk.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -871 B 🟢 -794 B
assets/bootstrapStore-CUwZVtla.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +874 B 🔴 +795 B
assets/userStore-BAmLpfgR.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +717 B 🔴 +667 B
assets/userStore-BxS3QcVr.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -718 B 🟢 -631 B
assets/audioService-Vd1d-mse.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +844 B 🔴 +723 B
assets/audioService-YgDlFFNR.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -846 B 🟢 -728 B
assets/releaseStore-0nulhKiI.js (removed) 809 B 🟢 -809 B 🟢 -400 B 🟢 -355 B
assets/releaseStore-DJXXnVRk.js (new) 809 B 🔴 +809 B 🔴 +403 B 🔴 +357 B
assets/settingStore-B7CG6Uwe.js (new) 793 B 🔴 +793 B 🔴 +403 B 🔴 +353 B
assets/settingStore-CSqULAKq.js (removed) 793 B 🟢 -793 B 🟢 -402 B 🟢 -354 B
assets/workflowDraftStore-CSHSfX2j.js (removed) 785 B 🟢 -785 B 🟢 -396 B 🟢 -351 B
assets/workflowDraftStore-Ol43TIEc.js (new) 785 B 🔴 +785 B 🔴 +397 B 🔴 +350 B
assets/dialogService-Cob88cG3.js (new) 774 B 🔴 +774 B 🔴 +388 B 🔴 +345 B
assets/dialogService-q5tvU9xn.js (removed) 774 B 🟢 -774 B 🟢 -388 B 🟢 -343 B
assets/dialogStore-DqEczCra.js 4.1 kB 4.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-DQj3s_QB.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Utilities & Hooks — 237 kB (baseline 237 kB) • 🔴 +178 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-BFLdOXlF.js (new) 178 kB 🔴 +178 kB 🔴 +39.4 kB 🔴 +32.8 kB
assets/useConflictDetection-DvtjAgT3.js (removed) 178 kB 🟢 -178 kB 🟢 -39.4 kB 🟢 -32.7 kB
assets/useLoad3d-BiuYhnO_.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-CCOLWv0S.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-C10P9NuO.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-D4wDVyQI.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.79 kB
assets/useFeatureFlags-BXrshjJa.js (new) 3.5 kB 🔴 +3.5 kB 🔴 +1.08 kB 🔴 +926 B
assets/useFeatureFlags-Bzi5siIm.js (removed) 3.32 kB 🟢 -3.32 kB 🟢 -1.04 kB 🟢 -896 B
assets/useWorkspaceUI-7oxnzeMr.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -701 B
assets/useWorkspaceUI-DdgVJH2V.js (new) 3 kB 🔴 +3 kB 🔴 +822 B 🔴 +707 B
assets/useSubscriptionCredits-BC2dpY9l.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +900 B
assets/useSubscriptionCredits-CeWtkCqL.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -893 B
assets/subscriptionCheckoutUtil-DWtayouY.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -942 B
assets/subscriptionCheckoutUtil-u0D47qM7.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +955 B
assets/useErrorHandling-C-Cg8SgR.js (new) 1.47 kB 🔴 +1.47 kB 🔴 +609 B 🔴 +518 B
assets/useErrorHandling-VwbBOGk1.js (removed) 1.47 kB 🟢 -1.47 kB 🟢 -612 B 🟢 -517 B
assets/useWorkspaceSwitch-CMTXi1Ii.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -542 B 🟢 -478 B
assets/useWorkspaceSwitch-DIbOkRWv.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +545 B 🔴 +482 B
assets/useLoad3d-BgLtA-DA.js (removed) 908 B 🟢 -908 B 🟢 -441 B 🟢 -397 B
assets/useLoad3d-BuF1Wtjz.js (new) 908 B 🔴 +908 B 🔴 +443 B 🔴 +396 B
assets/useLoad3dViewer-BfBp__Am.js (removed) 887 B 🟢 -887 B 🟢 -426 B 🟢 -383 B
assets/useLoad3dViewer-DrnxGGgy.js (new) 887 B 🔴 +887 B 🔴 +427 B 🔴 +384 B
assets/audioUtils-Bil4401k.js (removed) 858 B 🟢 -858 B 🟢 -500 B 🟢 -413 B
assets/audioUtils-CxYWvGPF.js (new) 858 B 🔴 +858 B 🔴 +500 B 🔴 +403 B
assets/useCurrentUser-CkHtBw7y.js (removed) 771 B 🟢 -771 B 🟢 -391 B 🟢 -344 B
assets/useCurrentUser-UUmRKkog.js (new) 771 B 🔴 +771 B 🔴 +392 B 🔴 +343 B
assets/_plugin-vue_export-helper-BYZQdlgo.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-CZQOOTdR.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-C9Y4v_FL.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Dct6u2-O.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-CsnHjXS0.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-pSEG-wjK.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-CUwtb5js.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Vendor & Third-Party — 8.69 MB (baseline 8.69 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-C4mPrLmU.js 70.3 kB 70.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-l-KY-tZQ.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-cR3vmlFu.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-oliHT-H5.js 102 kB 102 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-DIFkoP9Z.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-DbhsokLF.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DAi_xVZa.js 255 kB 255 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-ueviNA60.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-DN5cees9.js 625 kB 625 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-BjA-tjXK.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-DcEOrMQz.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-DO-SJi0U.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 — 7.36 MB (baseline 7.36 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-6M9y6OvZ.js (removed) 72.5 kB 🟢 -72.5 kB 🟢 -18.7 kB 🟢 -16 kB
assets/core-Dcxa-9k3.js (new) 72.5 kB 🔴 +72.5 kB 🔴 +18.7 kB 🔴 +16 kB
assets/groupNode-BLSw0yFw.js (removed) 72.1 kB 🟢 -72.1 kB 🟢 -17.7 kB 🟢 -15.6 kB
assets/groupNode-BUEbtv72.js (new) 72.1 kB 🔴 +72.1 kB 🔴 +17.8 kB 🔴 +15.6 kB
assets/WidgetSelect-BOzQRBBK.js (new) 57.8 kB 🔴 +57.8 kB 🔴 +12.3 kB 🔴 +10.6 kB
assets/WidgetSelect-CaGs4Bcq.js (removed) 57.8 kB 🟢 -57.8 kB 🟢 -12.3 kB 🟢 -10.6 kB
assets/SubscriptionRequiredDialogContentWorkspace-BZXI98SX.js (removed) 45.9 kB 🟢 -45.9 kB 🟢 -8.58 kB 🟢 -7.42 kB
assets/SubscriptionRequiredDialogContentWorkspace-CIfu3i9d.js (new) 45.9 kB 🔴 +45.9 kB 🔴 +8.58 kB 🔴 +7.42 kB
assets/Load3DControls-B-y9MxXj.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/Load3DControls-Bz4vqwMy.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.66 kB
assets/WorkspacePanelContent-Bm5J0ryK.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.12 kB 🔴 +5.39 kB
assets/WorkspacePanelContent-GcViv9DE.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.12 kB 🟢 -5.38 kB
assets/SubscriptionRequiredDialogContent-CLw7mAED.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.58 kB 🔴 +5.8 kB
assets/SubscriptionRequiredDialogContent-XRO8EpCL.js (removed) 26.2 kB 🟢 -26.2 kB 🟢 -6.59 kB 🟢 -5.8 kB
assets/Load3dViewerContent-Bt1NU4kI.js (new) 23.1 kB 🔴 +23.1 kB 🔴 +5.19 kB 🔴 +4.5 kB
assets/Load3dViewerContent-BVHAoCve.js (removed) 23.1 kB 🟢 -23.1 kB 🟢 -5.19 kB 🟢 -4.5 kB
assets/WidgetImageCrop-Ccx5RGux.js (removed) 22.4 kB 🟢 -22.4 kB 🟢 -5.53 kB 🟢 -4.86 kB
assets/WidgetImageCrop-CP2YVpFO.js (new) 22.4 kB 🔴 +22.4 kB 🔴 +5.53 kB 🔴 +4.87 kB
assets/MissingNodesContent-CucWct0_.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.76 kB 🟢 -5.11 kB
assets/MissingNodesContent-DPTFK6er.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.76 kB 🔴 +5.1 kB
assets/SubscriptionPanelContentWorkspace-105TJQIf.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.02 kB 🔴 +4.43 kB
assets/SubscriptionPanelContentWorkspace-CT0WIUdz.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.02 kB 🟢 -4.43 kB
assets/CurrentUserPopoverWorkspace-BxpDiTLl.js (removed) 19.9 kB 🟢 -19.9 kB 🟢 -4.88 kB 🟢 -4.35 kB
assets/CurrentUserPopoverWorkspace-DDFoqSAn.js (new) 19.9 kB 🔴 +19.9 kB 🔴 +4.88 kB 🔴 +4.35 kB
assets/SignInContent-CXYiXSDy.js (removed) 19 kB 🟢 -19 kB 🟢 -4.81 kB 🟢 -4.23 kB
assets/SignInContent-DuWOpTH9.js (new) 19 kB 🔴 +19 kB 🔴 +4.81 kB 🔴 +4.2 kB
assets/WidgetRecordAudio-Cuynq--W.js (removed) 17.4 kB 🟢 -17.4 kB 🟢 -4.96 kB 🟢 -4.45 kB
assets/WidgetRecordAudio-CyfYcrE5.js (new) 17.4 kB 🔴 +17.4 kB 🔴 +4.96 kB 🔴 +4.43 kB
assets/MissingModelsWarning-CqnkwmtL.js (removed) 17.2 kB 🟢 -17.2 kB 🟢 -4.7 kB 🟢 -4.17 kB
assets/MissingModelsWarning-D_7VvD9b.js (new) 17.2 kB 🔴 +17.2 kB 🔴 +4.69 kB 🔴 +4.17 kB
assets/Load3D-BMFwo7i3.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.04 kB 🔴 +3.53 kB
assets/Load3D-DwqfQA4i.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.04 kB 🟢 -3.53 kB
assets/WidgetInputNumber-4m4C8ZwR.js (new) 15.8 kB 🔴 +15.8 kB 🔴 +4.26 kB 🔴 +3.8 kB
assets/WidgetInputNumber-DOAbw_8k.js (removed) 15.8 kB 🟢 -15.8 kB 🟢 -4.26 kB 🟢 -3.8 kB
assets/load3d-CU3ZB6WZ.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.21 kB 🟢 -3.65 kB
assets/load3d-DrDg0hAu.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.2 kB 🔴 +3.64 kB
assets/AudioPreviewPlayer-ClMI1OjX.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.21 kB 🔴 +2.87 kB
assets/AudioPreviewPlayer-Yw7I3W_n.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.21 kB 🟢 -2.87 kB
assets/NodeConflictDialogContent-CgN5zIw-.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.36 kB 🔴 +2.08 kB
assets/NodeConflictDialogContent-CP_Vm12m.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.36 kB 🟢 -2.1 kB
assets/changeTracker-9iKIM1O4.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.55 kB
assets/changeTracker-HZr0cD_E.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.89 kB 🟢 -2.54 kB
assets/nodeTemplates-6jnDvM9z.js (removed) 9.35 kB 🟢 -9.35 kB 🟢 -3.28 kB 🟢 -2.87 kB
assets/nodeTemplates-DFEZCBdN.js (new) 9.35 kB 🔴 +9.35 kB 🔴 +3.27 kB 🔴 +2.87 kB
assets/MissingNodesFooter-Iwdng0NZ.js (new) 7.54 kB 🔴 +7.54 kB 🔴 +2.46 kB 🔴 +2.2 kB
assets/MissingNodesFooter-lCLTk3Ak.js (removed) 7.54 kB 🟢 -7.54 kB 🟢 -2.47 kB 🟢 -2.2 kB
assets/InviteMemberDialogContent-Br2Nrvqo.js (new) 7.44 kB 🔴 +7.44 kB 🔴 +2.3 kB 🔴 +2.01 kB
assets/InviteMemberDialogContent-COk1_2bK.js (removed) 7.44 kB 🟢 -7.44 kB 🟢 -2.3 kB 🟢 -2.02 kB
assets/WidgetWithControl-BKjBsPHf.js (new) 7.08 kB 🔴 +7.08 kB 🔴 +2.65 kB 🔴 +2.36 kB
assets/WidgetWithControl-UgXHY-YS.js (removed) 7.08 kB 🟢 -7.08 kB 🟢 -2.65 kB 🟢 -2.36 kB
assets/Load3DConfiguration-BOHh53qY.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-BUydiN97.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-_6S2mrxg.js (new) 5.58 kB 🔴 +5.58 kB 🔴 +2 kB 🔴 +1.75 kB
assets/CreateWorkspaceDialogContent-10zGcW5H.js (removed) 5.58 kB 🟢 -5.58 kB 🟢 -2 kB 🟢 -1.74 kB
assets/EditWorkspaceDialogContent-BP0AuY33.js (removed) 5.38 kB 🟢 -5.38 kB 🟢 -1.96 kB 🟢 -1.71 kB
assets/EditWorkspaceDialogContent-D4_XnC-T.js (new) 5.38 kB 🔴 +5.38 kB 🔴 +1.96 kB 🔴 +1.71 kB
assets/ValueControlPopover-CzVVgPH1.js (removed) 4.97 kB 🟢 -4.97 kB 🟢 -1.78 kB 🟢 -1.59 kB
assets/ValueControlPopover-DHsh1ze_.js (new) 4.97 kB 🔴 +4.97 kB 🔴 +1.78 kB 🔴 +1.59 kB
assets/Preview3d-Cze7jL_f.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.58 kB 🟢 -1.39 kB
assets/Preview3d-DskgaXVA.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.58 kB 🔴 +1.39 kB
assets/CancelSubscriptionDialogContent-Cb0aPXhi.js (new) 4.85 kB 🔴 +4.85 kB 🔴 +1.79 kB 🔴 +1.57 kB
assets/CancelSubscriptionDialogContent-CTPzauf5.js (removed) 4.85 kB 🟢 -4.85 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/DeleteWorkspaceDialogContent-BOmdaNX2.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.65 kB 🔴 +1.43 kB
assets/DeleteWorkspaceDialogContent-xEYy0vVZ.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.65 kB 🟢 -1.43 kB
assets/LeaveWorkspaceDialogContent-D4FQHl0B.js (removed) 4.12 kB 🟢 -4.12 kB 🟢 -1.59 kB 🟢 -1.38 kB
assets/LeaveWorkspaceDialogContent-pepTRCrc.js (new) 4.12 kB 🔴 +4.12 kB 🔴 +1.59 kB 🔴 +1.38 kB
assets/RemoveMemberDialogContent-DMIJ0Yrw.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.54 kB 🔴 +1.34 kB
assets/RemoveMemberDialogContent-sPUjkcGw.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.54 kB 🟢 -1.34 kB
assets/RevokeInviteDialogContent-B4QBOuz7.js (removed) 4.01 kB 🟢 -4.01 kB 🟢 -1.56 kB 🟢 -1.37 kB
assets/RevokeInviteDialogContent-DBQkP8-H.js (new) 4.01 kB 🔴 +4.01 kB 🔴 +1.56 kB 🔴 +1.37 kB
assets/InviteMemberUpsellDialogContent-Bp5lfzP5.js (removed) 3.88 kB 🟢 -3.88 kB 🟢 -1.42 kB 🟢 -1.25 kB
assets/InviteMemberUpsellDialogContent-DtHvfN14.js (new) 3.88 kB 🔴 +3.88 kB 🔴 +1.42 kB 🔴 +1.24 kB
assets/saveMesh-5g7jUgnI.js (new) 3.43 kB 🔴 +3.43 kB 🔴 +1.48 kB 🔴 +1.3 kB
assets/saveMesh-CggZOwyp.js (removed) 3.43 kB 🟢 -3.43 kB 🟢 -1.48 kB 🟢 -1.31 kB
assets/cloudSessionCookie-2GlCpHpD.js (new) 3.15 kB 🔴 +3.15 kB 🔴 +1.1 kB 🔴 +1 kB
assets/cloudSessionCookie-D9LBqgui.js (removed) 3.15 kB 🟢 -3.15 kB 🟢 -1.1 kB 🟢 -961 B
assets/GlobalToast-auaztPaF.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.02 kB
assets/GlobalToast-DVBsINuF.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/SubscribeToRun-BBa6bEsj.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -891 B
assets/SubscribeToRun-C1EtXpx7.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +892 B
assets/CloudRunButtonWrapper-CfOanvJz.js (new) 1.72 kB 🔴 +1.72 kB 🔴 +798 B 🔴 +709 B
assets/CloudRunButtonWrapper-Cr2IjGnN.js (removed) 1.72 kB 🟢 -1.72 kB 🟢 -801 B 🟢 -728 B
assets/cloudBadges--_9z84my.js (removed) 1.42 kB 🟢 -1.42 kB 🟢 -723 B 🟢 -621 B
assets/cloudBadges-u6dCdCm1.js (new) 1.42 kB 🔴 +1.42 kB 🔴 +723 B 🔴 +618 B
assets/cloudSubscription-BxIUjnZp.js (new) 1.38 kB 🔴 +1.38 kB 🔴 +675 B 🔴 +579 B
assets/cloudSubscription-D0hxZ655.js (removed) 1.38 kB 🟢 -1.38 kB 🟢 -675 B 🟢 -582 B
assets/Load3D-BmKFVu8f.js (removed) 1.12 kB 🟢 -1.12 kB 🟢 -515 B 🟢 -457 B
assets/Load3D-Bo1jOMd9.js (new) 1.12 kB 🔴 +1.12 kB 🔴 +516 B 🔴 +455 B
assets/nightlyBadges-DG-7KLnc.js (removed) 1.05 kB 🟢 -1.05 kB 🟢 -551 B 🟢 -489 B
assets/nightlyBadges-DGKGWbU9.js (new) 1.05 kB 🔴 +1.05 kB 🔴 +552 B 🔴 +489 B
assets/Load3dViewerContent-CQIsZsPe.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -485 B 🟢 -435 B
assets/Load3dViewerContent-CYEBfw0a.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +487 B 🔴 +434 B
assets/SubscriptionPanelContentWorkspace-BFxXh4Kn.js (new) 979 B 🔴 +979 B 🔴 +455 B 🔴 +398 B
assets/SubscriptionPanelContentWorkspace-Cmj0dAWW.js (removed) 979 B 🟢 -979 B 🟢 -450 B 🟢 -395 B
assets/changeTracker-DsmlR_vb.js (new) 806 B 🔴 +806 B 🔴 +403 B 🔴 +357 B
assets/changeTracker-qvOsG4jf.js (removed) 806 B 🟢 -806 B 🟢 -401 B 🟢 -355 B
assets/WidgetLegacy-CkLxlliE.js (new) 794 B 🔴 +794 B 🔴 +403 B 🔴 +348 B
assets/WidgetLegacy-DdF_MsNP.js (removed) 794 B 🟢 -794 B 🟢 -402 B 🟢 -354 B
assets/graphHasMissingNodes-DuWcaMaf.js (new) 761 B 🔴 +761 B 🔴 +370 B 🔴 +318 B
assets/graphHasMissingNodes-rcLVUKnZ.js (removed) 761 B 🟢 -761 B 🟢 -371 B 🟢 -321 B
assets/WidgetInputNumber-DIcmyjX0.js (removed) 392 B 🟢 -392 B 🟢 -232 B 🟢 -210 B
assets/WidgetInputNumber-DzIJtfQQ.js (new) 392 B 🔴 +392 B 🔴 +232 B 🔴 +220 B
assets/AnimationControls-CGPD_cLU.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-Cmhiic4-.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-Bt3L7FBS.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-BQXZlAql.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-CzGozBag.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-Gbby8E71.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B-pgsvFR.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BVMMhDLS.js 16.6 kB 16.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CF_CtN5R.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cgae_Kmu.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D3k2h7MU.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D6S8WS13.js 15.8 kB 15.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-OSpDi1he.js 18.4 kB 18.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-r2j_2QLb.js 15.7 kB 15.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-xCwqbbnl.js 15.8 kB 15.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-z76J85Ox.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-ZBYN9Ax-.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-C75NYR8_.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-CkrIz8pJ.js 499 kB 499 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-DJv4yBaY.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeContent-Cbt6jZyc.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeFooter-C20fMJOK.js 1.88 kB 1.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeHeader-C52A0tqP.js 1.08 kB 1.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-DSlFyohh.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BBXjgHHJ.js 168 kB 168 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BSGI6X8n.js 142 kB 142 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BwbuHOeJ.js 188 kB 188 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BxbexJ_X.js 134 kB 134 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CEa_DitW.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CfPoug-D.js 119 kB 119 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CoZyXKuL.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DFiYtvBS.js 162 kB 162 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DpjpFJ7n.js 118 kB 118 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DxYYQN6q.js 137 kB 137 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-jNX02YKC.js 135 kB 135 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop--6APVhDO.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-D379ygrS.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BvzP3-4M.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-BEu1PWK1.js 2.23 kB 2.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MissingNodesHeader-JfpleXg9.js 1.09 kB 1.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/NodeConflictFooter-khTOzN36.js 2.37 kB 2.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/NodeConflictHeader-DgbhznVf.js 1.09 kB 1.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-AB7CPb5Z.js 371 kB 371 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B0nnzBKi.js 341 kB 341 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B4dyiuYa.js 417 kB 417 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CD2Wfp1K.js 375 kB 375 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cq7Zu3pU.js 371 kB 371 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CsjIs0Oo.js 338 kB 338 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dg5aovqV.js 364 kB 364 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-H67grW1L.js 386 kB 386 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-NGc5lgvJ.js 368 kB 368 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-UkCFzPva.js 456 kB 456 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-yIrLktj4.js 418 kB 418 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CnDV7A3d.js 665 B 665 B ⚪ 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-BLaUzhId.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-CSnPYFxr.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-BhcBhVMn.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-D5pbLGY2.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-DMPeCuhp.js 3.91 kB 3.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-F8leYtSX.js 131 B 131 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-BDCRAbXS.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-DfUBpgxw.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-7qXE9PZk.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-CeaLzXAr.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-BQ_QzI-O.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-CvLvf7SF.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-wIs8y1Ja.js 2.88 kB 2.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-C9FcIgiN.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-DurObIpO.js 3.18 kB 3.18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-D4M7QPIz.js 2.5 kB 2.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-DhbPR9pT.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 51 added / 51 removed

@dosubot dosubot bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:XS This PR changes 0-9 lines, ignoring generated files. labels Feb 17, 2026
The PR added a feature flag check using useFeatureFlags() which wasn't
being mocked in tests. This caused load() tests to fail because
flags.nodeReplacementsEnabled defaults to false when not mocked.

- Added vi.mock for @/composables/useFeatureFlags
- Used vi.hoisted to allow per-test control of the mock value
- Added test case for when server feature flag is disabled

https://claude.ai/code/session_01FQBAU6qx93aq5dyZne8cyr

Co-authored-by: Claude <noreply@anthropic.com>
@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Feb 17, 2026
@DrJKL DrJKL merged commit e83e396 into main Feb 17, 2026
33 checks passed
@DrJKL DrJKL deleted the jk/node-replace-feature-flag branch February 17, 2026 19:39
@christian-byrne christian-byrne added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.39 Backport PRs for core 1.39 cloud/1.39 Backport PRs for cloud 1.39 labels Feb 17, 2026
github-actions bot pushed a commit that referenced this pull request Feb 17, 2026
## Summary

Gates the node replacement store's `load()` call behind the
`node_replacements` server feature flag, so the frontend only calls
`/api/node_replacements` when the backend advertises support.

## Changes

- Added `NODE_REPLACEMENTS = 'node_replacements'` to `ServerFeatureFlag`
enum
- Added `nodeReplacementsEnabled` getter to `useFeatureFlags()`
- Added `api.serverSupportsFeature('node_replacements')` guard in
`useNodeReplacementStore.load()`

## Context

Without this guard, the frontend would attempt to fetch node
replacements from backends that don't support the endpoint, causing 404
errors.

Companion backend PR: Comfy-Org/ComfyUI#12362

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8750-feat-gate-node-replacement-loading-on-server-feature-flag-3026d73d365081ec9246d77ad88f5bdc)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
github-actions bot pushed a commit that referenced this pull request Feb 17, 2026
## Summary

Gates the node replacement store's `load()` call behind the
`node_replacements` server feature flag, so the frontend only calls
`/api/node_replacements` when the backend advertises support.

## Changes

- Added `NODE_REPLACEMENTS = 'node_replacements'` to `ServerFeatureFlag`
enum
- Added `nodeReplacementsEnabled` getter to `useFeatureFlags()`
- Added `api.serverSupportsFeature('node_replacements')` guard in
`useNodeReplacementStore.load()`

## Context

Without this guard, the frontend would attempt to fetch node
replacements from backends that don't support the endpoint, causing 404
errors.

Companion backend PR: Comfy-Org/ComfyUI#12362

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8750-feat-gate-node-replacement-loading-on-server-feature-flag-3026d73d365081ec9246d77ad88f5bdc)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
@comfy-pr-bot
Copy link
Member

@christian-byrne Successfully backported to #8940

@comfy-pr-bot
Copy link
Member

@christian-byrne Successfully backported to #8941

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Feb 17, 2026
christian-byrne added a commit that referenced this pull request Feb 17, 2026
…eature flag (#8941)

Backport of #8750 to `cloud/1.39`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8941-backport-cloud-1-39-feat-gate-node-replacement-loading-on-server-feature-flag-30a6d73d36508141923bdcbf614dd917)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
christian-byrne added a commit that referenced this pull request Feb 17, 2026
…ature flag (#8940)

Backport of #8750 to `core/1.39`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8940-backport-core-1-39-feat-gate-node-replacement-loading-on-server-feature-flag-30a6d73d365081f48ddefa075b8bbf7d)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.39 Backport PRs for cloud 1.39 core/1.39 Backport PRs for core 1.39 size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants