Skip to content

Conversation

@jtydhr88
Copy link
Collaborator

@jtydhr88 jtydhr88 commented Sep 25, 2025

Summary

Fully Refactored the Load3D module to improve architecture and maintainability by consolidating functionality into a
centralized composable pattern and simplifying component structure. and support VueNodes system

Changes

  • Architecture: Introduced new useLoad3d composable to centralize 3D loading logic and state
    management
  • Component Simplification: Removed redundant components (Load3DAnimation.vue, Load3DAnimationScene.vue,
    PreviewManager.ts)
  • Support VueNodes
  • improve config store
  • remove lineart output due Animation doesnot support it, may add it back later
  • remove Preview screen and keep scene in fixed ratio in load3d (not affect preview3d)
  • improve record video feature which will already record video by same ratio as scene
    Need BE change Merge 3d animation node comfyanonymous/ComfyUI#10025
2025-09-25.22-33-36.mp4

┆Issue is synchronized with this Notion page by Unito

@jtydhr88 jtydhr88 marked this pull request as draft September 25, 2025 01:57
@dosubot dosubot bot added the size:XXL This PR changes 1000+ lines, ignoring generated files. label Sep 25, 2025
@github-actions
Copy link

github-actions bot commented Sep 25, 2025

🎭 Playwright Test Results

⚠️ Tests passed with flaky tests

⏰ Completed at: 10/30/2025, 03:32:04 AM UTC

📈 Summary

  • Total Tests: 499
  • Passed: 466 ✅
  • Failed: 0
  • Flaky: 3 ⚠️
  • Skipped: 30 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 457 / ❌ 0 / ⚠️ 3 / ⏭️ 30
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 6 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@jtydhr88 jtydhr88 force-pushed the refactor-load3d-2 branch 3 times, most recently from 5b73fbc to 40f4e5d Compare September 26, 2025 02:36
@jtydhr88 jtydhr88 marked this pull request as ready for review September 26, 2025 02:42
christian-byrne pushed a commit that referenced this pull request Sep 30, 2025
…el events (#5821)

## Summary

Add generic wheel event capture mechanism for interactive widgets in
vueNodes system to prevent event bubbling to canvas.

  ## Changes

- What: Add event handling logic in LGraphNode.vue and GraphCanvas.vue
that checks for data-capture-wheel attribute to determine whether wheel
events should be forwarded to the canvas
- How it works: Components that need to capture wheel events (like
Three.js scenes) can add data-capture-wheel="true" attribute to prevent
wheel events from bubbling up to the canvas zoom handler

prerequirist for #5765

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-5821-Check-if-the-wheel-event-is-from-an-element-that-wants-to-capture-wheel-events-27b6d73d3650812493b5f13849147e6c)
by [Unito](https://www.unito.io)
@christian-byrne christian-byrne added claude-review Add to trigger a PR code review from Claude Code and removed claude-review Add to trigger a PR code review from Claude Code labels Sep 30, 2025
@christian-byrne
Copy link
Contributor

Could you fix the merge conflict then rebase with main?

@github-actions
Copy link

github-actions bot commented Sep 30, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 10/30/2025, 03:18:15 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@christian-byrne christian-byrne added the claude-review Add to trigger a PR code review from Claude Code label Oct 1, 2025
claude[bot]

This comment was marked as outdated.

christian-byrne pushed a commit that referenced this pull request Oct 6, 2025
…el events (#5821)

## Summary

Add generic wheel event capture mechanism for interactive widgets in
vueNodes system to prevent event bubbling to canvas.

  ## Changes

- What: Add event handling logic in LGraphNode.vue and GraphCanvas.vue
that checks for data-capture-wheel attribute to determine whether wheel
events should be forwarded to the canvas
- How it works: Components that need to capture wheel events (like
Three.js scenes) can add data-capture-wheel="true" attribute to prevent
wheel events from bubbling up to the canvas zoom handler

prerequirist for #5765

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-5821-Check-if-the-wheel-event-is-from-an-element-that-wants-to-capture-wheel-events-27b6d73d3650812493b5f13849147e6c)
by [Unito](https://www.unito.io)
christian-byrne pushed a commit that referenced this pull request Oct 6, 2025
## Summary

pass nodeId to widget component, which is a prerequirist for
#5765

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-5853-pass-nodeData-to-widget-component-27e6d73d3650811e9e48ceb7c3a00545)
by [Unito](https://www.unito.io)
arjansingh pushed a commit that referenced this pull request Oct 7, 2025
…el events (#5821)

## Summary

Add generic wheel event capture mechanism for interactive widgets in
vueNodes system to prevent event bubbling to canvas.

  ## Changes

- What: Add event handling logic in LGraphNode.vue and GraphCanvas.vue
that checks for data-capture-wheel attribute to determine whether wheel
events should be forwarded to the canvas
- How it works: Components that need to capture wheel events (like
Three.js scenes) can add data-capture-wheel="true" attribute to prevent
wheel events from bubbling up to the canvas zoom handler

prerequirist for #5765

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-5821-Check-if-the-wheel-event-is-from-an-element-that-wants-to-capture-wheel-events-27b6d73d3650812493b5f13849147e6c)
by [Unito](https://www.unito.io)
arjansingh pushed a commit that referenced this pull request Oct 7, 2025
## Summary

pass nodeId to widget component, which is a prerequirist for
#5765

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-5853-pass-nodeData-to-widget-component-27e6d73d3650811e9e48ceb7c3a00545)
by [Unito](https://www.unito.io)
@github-actions
Copy link

github-actions bot commented Oct 8, 2025

🔧 Auto-fixes Applied

This PR has been automatically updated to fix linting and formatting issues.

⚠️ Important: Your local branch is now behind. Run git pull before making additional changes to avoid conflicts.

Changes made:

  • ESLint auto-fixes
  • Prettier formatting

Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

I have reviewed 14/42 files, taking a quick break.

}
}

const restoreConfigurationsFromNode = async (node: LGraphNode) => {
Copy link
Contributor

Choose a reason for hiding this comment

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

nit (non-blocking): all of the logic revolving around serialization, config management, config types, and restoring from configs can likely be moved to its own module.

Comment on lines +168 to +178
if (modelWidget?.value) {
const modelUrl = getModelUrl(modelWidget.value as string)
if (modelUrl) {
loading.value = true
loadingMessage.value = t('load3d.reloadingModel')
try {
await load3d.loadModel(modelUrl)

if (cameraStateToRestore) {
await nextTick()
load3d.setCameraState(cameraStateToRestore)
}
} catch (error) {
console.error('Failed to reload model:', error)
useToastStore().addAlert(t('toastMessages.failedToLoadModel'))
} finally {
loading.value = false
loadingMessage.value = ''
}
}
} else if (cameraStateToRestore) {
load3d.setCameraState(cameraStateToRestore)
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

nit (non-blocking, suggestion for future): We should consider whether this needs to be blocking setup. Currently, we are synchronously restoring the model config, get the url, loading the model, setting the camera state - and everything else must wait on this to happen. I believe we could refactor a bit and have this happen in the background like with useAsyncState

@github-actions
Copy link

github-actions bot commented Oct 22, 2025

Bundle Size Report

Summary

  • Raw size: 12.2 MB baseline 12.3 MB — 🟢 -99.6 kB
  • Gzip: 2.47 MB baseline 2.49 MB — 🟢 -16 kB
  • Brotli: 1.95 MB baseline 1.96 MB — 🟢 -13.3 kB
  • Bundles: 57 current • 57 baseline • 17 added / 17 removed

Category Glance
App Entry Points 🟢 -63.1 kB (3.25 MB) · Vendor & Third-Party 🟢 -36.9 kB (5.32 MB) · Panels & Settings 🔴 +222 B (295 kB) · Graph Workspace 🔴 +41 B (716 kB) · UI Components 🔴 +37 B (12.3 kB) · Views & Navigation 🔴 +37 B (8.18 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.25 MB (baseline 3.31 MB) • 🟢 -63.1 kB

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CjqDL0CT.js (new) 2.87 MB 🔴 +2.87 MB 🔴 +591 kB 🔴 +446 kB
assets/index-C8_n3lFI.js (removed) 2.69 MB 🟢 -2.69 MB 🟢 -561 kB 🟢 -425 kB
assets/index-BYfXancm.js (removed) 621 kB 🟢 -621 kB 🟢 -115 kB 🟢 -91.1 kB
assets/index-BdMGB6a4.js (new) 381 kB 🔴 +381 kB 🔴 +76.6 kB 🔴 +62 kB

Status: 2 added / 2 removed

Graph Workspace — 716 kB (baseline 716 kB) • 🔴 +41 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-de6Ii7ba.js (new) 716 kB 🔴 +716 kB 🔴 +140 kB 🔴 +108 kB
assets/GraphView-CI03rQLL.js (removed) 716 kB 🟢 -716 kB 🟢 -140 kB 🟢 -108 kB

Status: 1 added / 1 removed

Views & Navigation — 8.18 kB (baseline 8.14 kB) • 🔴 +37 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-By5a7Bms.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.48 kB 🔴 +2.17 kB
assets/UserSelectView-D5VLINtr.js (removed) 8.14 kB 🟢 -8.14 kB 🟢 -2.46 kB 🟢 -2.16 kB

Status: 1 added / 1 removed

Panels & Settings — 295 kB (baseline 294 kB) • 🔴 +222 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CreditsPanel-xgqlsF7W.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.29 kB 🔴 +4.63 kB
assets/CreditsPanel-DaHljmTi.js (removed) 22 kB 🟢 -22 kB 🟢 -5.28 kB 🟢 -4.62 kB
assets/KeybindingPanel-DUmARnkX.js (new) 15.3 kB 🔴 +15.3 kB 🔴 +3.78 kB 🔴 +3.32 kB
assets/KeybindingPanel-qbeGQPn0.js (removed) 15.2 kB 🟢 -15.2 kB 🟢 -3.76 kB 🟢 -3.31 kB
assets/ExtensionPanel-B-eUD9Dg.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +2.84 kB 🔴 +2.49 kB
assets/ExtensionPanel-qQUsFqwu.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -2.82 kB 🟢 -2.47 kB
assets/AboutPanel-D0aAMPKl.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +2.68 kB 🔴 +2.34 kB
assets/AboutPanel-DHyOWapi.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -2.66 kB 🟢 -2.33 kB
assets/ServerConfigPanel-DDwRfcXe.js (new) 8.23 kB 🔴 +8.23 kB 🔴 +2.18 kB 🔴 +1.91 kB
assets/ServerConfigPanel-B0ZCHkCr.js (removed) 8.2 kB 🟢 -8.2 kB 🟢 -2.16 kB 🟢 -1.9 kB
assets/UserPanel-C8ynKJDc.js (new) 7.94 kB 🔴 +7.94 kB 🔴 +2.07 kB 🔴 +1.81 kB
assets/UserPanel-4SzM2EXd.js (removed) 7.91 kB 🟢 -7.91 kB 🟢 -2.06 kB 🟢 -1.79 kB
assets/settings-B-df0dZe.js 20.7 kB 20.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CI6OKvJn.js 22.9 kB 22.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CXGVj_nD.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DfQ6dSJj.js 31.6 kB 31.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DJ2QgDzm.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRNLPMG6.js 23.7 kB 23.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DVVycxDc.js 19.9 kB 19.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-G6Dybj1b.js 24.1 kB 24.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-M6_GZccG.js 26 kB 26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

UI Components — 12.3 kB (baseline 12.3 kB) • 🔴 +37 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-DviUwiYo.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +2.77 kB 🔴 +2.46 kB
assets/ComfyQueueButton-C-bw2IJE.js (removed) 11.1 kB 🟢 -11.1 kB 🟢 -2.75 kB 🟢 -2.43 kB
assets/UserAvatar.vue_vue_type_script_setup_true_lang-C9bSkTC5.js 1.12 kB 1.12 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Data & Services — 10 kB (baseline 10 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-DeECCdPG.js (removed) 7.21 kB 🟢 -7.21 kB 🟢 -1.75 kB 🟢 -1.51 kB
assets/keybindingService-t_HzafiR.js (new) 7.21 kB 🔴 +7.21 kB 🔴 +1.75 kB 🔴 +1.5 kB
assets/serverConfigStore-a46y6iwm.js (removed) 2.79 kB 🟢 -2.79 kB 🟢 -889 B 🟢 -774 B
assets/serverConfigStore-BfidWlNb.js (new) 2.79 kB 🔴 +2.79 kB 🔴 +888 B 🔴 +774 B

Status: 2 added / 2 removed

Utilities & Hooks — 1.07 kB (baseline 1.07 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 5.32 MB (baseline 5.36 MB) • 🟢 -36.9 kB

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-DHXsOB4w.js (new) 3.22 MB 🔴 +3.22 MB 🔴 +685 kB 🔴 +549 kB
assets/vendor-other-BwM5763c.js (removed) 3.22 MB 🟢 -3.22 MB 🟢 -685 kB 🟢 -549 kB
assets/vendor-three-DjRIbjYR.js (removed) 1.41 MB 🟢 -1.41 MB 🟢 -269 kB 🟢 -210 kB
assets/vendor-three-JDoAqkQm.js (new) 1.37 MB 🔴 +1.37 MB 🔴 +260 kB 🔴 +204 kB
assets/vendor-tiptap-C12Rsk43.js (new) 232 kB 🔴 +232 kB 🔴 +45.7 kB 🔴 +37.7 kB
assets/vendor-tiptap-C6rhmSpC.js (removed) 232 kB 🟢 -232 kB 🟢 -45.7 kB 🟢 -37.7 kB
assets/vendor-vue-BHKgwmPl.js (new) 92.4 kB 🔴 +92.4 kB 🔴 +23.9 kB 🔴 +20.8 kB
assets/vendor-vue-Bze-dcMt.js (removed) 92.4 kB 🟢 -92.4 kB 🟢 -23.9 kB 🟢 -20.8 kB
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 4 added / 4 removed

Other — 2.55 MB (baseline 2.55 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/commands-B2KZRBmX.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bw-ckyga.js 13.9 kB 13.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_NmM85I.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CuozCW4W.js 14 kB 14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DGfVUJCR.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-dOJNDogK.js 14.5 kB 14.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwiE551e.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Fw7mvqSy.js 13.1 kB 13.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-FXnO1W4Q.js 13.2 kB 13.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bgu6_Hvd.js 59.5 kB 59.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bv0L0qvp.js 93 kB 93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C3Doz3n_.js 67.6 kB 67.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C7eBl607.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CHiV9ds2.js 76.4 kB 76.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CIc79Nts.js 68.5 kB 68.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DK5LmuBm.js 58.8 kB 58.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-J1nit7cj.js 66.3 kB 66.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-W97XgvAQ.js 80.4 kB 80.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-8Ef8lY1m.js 196 kB 196 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BdF8EiZl.js 200 kB 200 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bv9Y8Cvp.js 229 kB 229 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-cMdB_wHv.js 179 kB 179 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CvNWbbtX.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CwDWxzVz.js 215 kB 215 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CyPAVHpA.js 191 kB 191 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D6QTD6bJ.js 181 kB 181 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DKn6VmRJ.js 192 kB 192 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude-review Add to trigger a PR code review from Claude Code size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants