- 
                Notifications
    You must be signed in to change notification settings 
- Fork 393
[refactor] refactor load3d #5765
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
| 🎭 Playwright Test Results⏰ Completed at: 10/30/2025, 03:32:04 AM UTC 📈 Summary
 📊 Test Reports by Browser
 🎉 Click on the links above to view detailed test results for each browser configuration. | 
5b73fbc    to
    40f4e5d      
    Compare
  
    …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)
| Could you fix the merge conflict then rebase with  | 
40f4e5d    to
    61da21c      
    Compare
  
    | 🎨 Storybook Build Status✅ Build completed successfully! ⏰ Completed at: 10/30/2025, 03:18:15 AM UTC 🔗 Links🎉 Your Storybook is ready for review! | 
61da21c    to
    8ed52a5      
    Compare
  
    ## 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)
8ed52a5    to
    13c8a5b      
    Compare
  
    …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)
## 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)
…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)
## 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)
7bff100    to
    8fb9751      
    Compare
  
    | 🔧 Auto-fixes AppliedThis PR has been automatically updated to fix linting and formatting issues. 
 Changes made:
 | 
There was a problem hiding this 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) => { | 
There was a problem hiding this comment.
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.
| 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) | ||
| } | ||
| } | 
There was a problem hiding this comment.
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
5587e4f    to
    2577068      
    Compare
  
    | Bundle Size ReportSummary 
 Category Glance Per-category breakdownApp Entry Points — 3.25 MB (baseline 3.31 MB) • 🟢 -63.1 kBMain entry bundles and manifests 
 Status: 2 added / 2 removed Graph Workspace — 716 kB (baseline 716 kB) • 🔴 +41 BGraph editor runtime, canvas, workflow orchestration 
 Status: 1 added / 1 removed Views & Navigation — 8.18 kB (baseline 8.14 kB) • 🔴 +37 BTop-level views, pages, and routed surfaces 
 Status: 1 added / 1 removed Panels & Settings — 295 kB (baseline 294 kB) • 🔴 +222 BConfiguration panels, inspectors, and settings screens 
 Status: 6 added / 6 removed UI Components — 12.3 kB (baseline 12.3 kB) • 🔴 +37 BReusable component library chunks 
 Status: 1 added / 1 removed Data & Services — 10 kB (baseline 10 kB) • ⚪ 0 BStores, services, APIs, and repositories 
 Status: 2 added / 2 removed Utilities & Hooks — 1.07 kB (baseline 1.07 kB) • ⚪ 0 BHelpers, composables, and utility bundles 
 Vendor & Third-Party — 5.32 MB (baseline 5.36 MB) • 🟢 -36.9 kBExternal libraries and shared vendor chunks 
 Status: 4 added / 4 removed Other — 2.55 MB (baseline 2.55 MB) • ⚪ 0 BBundles that do not match a named category 
 | 
2577068    to
    f099c15      
    Compare
  
    f099c15    to
    28b4c38      
    Compare
  
    28b4c38    to
    51742aa      
    Compare
  
    
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
management
PreviewManager.ts)
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