Skip to content

fix: Refactor: Use Galleria lightbox for 'Open Image' instead of new tab (#9156)#9492

Draft
Myestery wants to merge 1 commit intomainfrom
fix/coderabbit-issue-9156
Draft

fix: Refactor: Use Galleria lightbox for 'Open Image' instead of new tab (#9156)#9492
Myestery wants to merge 1 commit intomainfrom
fix/coderabbit-issue-9156

Conversation

@Myestery
Copy link
Contributor

@Myestery Myestery commented Mar 6, 2026

Closes #9156

Summary

The "Open Image" context menu action on graph nodes previously opened images in a new browser tab using openFileInNewTab. This was inconsistent with how images are viewed elsewhere in the app (e.g., the Assets sidebar), which uses the Galleria lightbox overlay. This change replaces the new-tab behavior with the existing Galleria lightbox component for a more consistent and integrated UX.

Changes

  • src/platform/assets/composables/useMediaAssetGalleryStore.ts: Added openUrl(url) method that creates a ResultItemImpl with an overridden URL getter, enabling the gallery to display an image from any URL
  • src/composables/graph/useImageMenuOptions.ts: Replaced openFileInNewTab with useMediaAssetGalleryStore().openUrl() in the openImage function; changed icon from external-link to maximize
  • src/services/litegraphService.ts: Same replacement of openFileInNewTab with useMediaAssetGalleryStore().openUrl() for the litegraph "Open Image" callback
  • src/views/GraphView.vue: Added ResultGallery component wired to mediaAssetGalleryStore so the lightbox renders at the top-level view
  • src/platform/assets/composables/useMediaAssetGalleryStore.test.ts: Added tests for the new openUrl method

Automated by coderabbit-fixer

┆Issue is synchronized with this Notion page by Unito

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 6, 2026

📝 Walkthrough

Walkthrough

This PR refactors the "Open Image" functionality to use a Galleria lightbox component instead of opening images in a new browser tab. A new openUrl method is added to the media asset gallery store, enabling images to be displayed in a modal gallery component.

Changes

Cohort / File(s) Summary
Image Menu & Service Integration
src/composables/graph/useImageMenuOptions.ts, src/services/litegraphService.ts
Replaced openFileInNewTab with useMediaAssetGalleryStore().openUrl for opening images. Updated icon from external-link to maximize in the "Open Image" menu option.
Gallery Store Enhancement
src/platform/assets/composables/useMediaAssetGalleryStore.ts, src/platform/assets/composables/useMediaAssetGalleryStore.test.ts
Added new openUrl(url: string) method that constructs a gallery item from a URL, with comprehensive test coverage including edge cases for URLs without filenames.
UI Component Integration
src/views/GraphView.vue
Integrated ResultGallery component with two-way binding to mediaAssetGalleryStore for active index and gallery items display.

Sequence Diagram

sequenceDiagram
    participant User
    participant ImageMenu as Image Menu Option
    participant GalleryStore as Media Asset Gallery Store
    participant GalleryComponent as ResultGallery Component
    
    User->>ImageMenu: Click "Open Image"
    ImageMenu->>GalleryStore: openUrl(url)
    GalleryStore->>GalleryStore: Create ResultItemImpl with URL
    GalleryStore->>GalleryStore: Update items & activeIndex
    GalleryStore->>GalleryComponent: Notify state change
    GalleryComponent->>GalleryComponent: Display lightbox with image
    GalleryComponent->>User: Render gallery view
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A new gallery lightbox hops into view,
No more tabs scattered, just images true,
From click to display in lightbox delight,
The UI flow gleams, consistent and bright!
Maximize button shines where links used to be,
Open Image now works—as it should be! 📸

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly summarizes the main change: replacing new-tab image opening with Galleria lightbox, directly addressing the core objective.
Description check ✅ Passed The description comprehensively covers all changes using a clear structure aligned with the template, including What, Why, and detailed breakdown of all modified files.
Linked Issues check ✅ Passed All code changes fully satisfy #9156 requirements: Galleria lightbox replaces new-tab behavior, consistent UX achieved, and all suggested implementation updates completed.
Out of Scope Changes check ✅ Passed All changes are tightly scoped to the #9156 objective; no out-of-scope modifications detected beyond the lightbox refactoring.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/coderabbit-issue-9156

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions
Copy link

github-actions bot commented Mar 6, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/06/2026, 05:04:45 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 6, 2026

🎭 Playwright: ❌ 553 passed, 1 failed · 2 flaky

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 540 / ❌ 1 / ⚠️ 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 6, 2026

📦 Bundle: 4.53 MB gzip 🔴 +203 B

Details

Summary

  • Raw size: 21.2 MB baseline 21.2 MB — 🔴 +904 B
  • Gzip: 4.53 MB baseline 4.53 MB — 🔴 +203 B
  • Brotli: 3.5 MB baseline 3.5 MB — 🟢 -33 B
  • Bundles: 233 current • 233 baseline • 109 added / 109 removed

Category Glance
Data & Services 🔴 +466 B (2.75 MB) · Graph Workspace 🔴 +438 B (935 kB) · Vendor & Third-Party ⚪ 0 B (8.88 MB) · Other ⚪ 0 B (7.93 MB) · Panels & Settings ⚪ 0 B (436 kB) · Editors & Dialogs ⚪ 0 B (76.6 kB) · + 5 more

App Entry Points — 28.9 kB (baseline 28.9 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BrkXV6He.js (removed) 28.9 kB 🟢 -28.9 kB 🟢 -11.4 kB 🟢 -9.35 kB
assets/index-D_0zuQmK.js (new) 28.9 kB 🔴 +28.9 kB 🔴 +11.4 kB 🔴 +9.33 kB

Status: 1 added / 1 removed

Graph Workspace — 935 kB (baseline 935 kB) • 🔴 +438 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BYo9XNLv.js (new) 935 kB 🔴 +935 kB 🔴 +198 kB 🔴 +150 kB
assets/GraphView-BcWAP0jR.js (removed) 935 kB 🟢 -935 kB 🟢 -197 kB 🟢 -150 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BRmKD4MB.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-BzIKbHrw.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.83 kB
assets/CloudLoginView-Bnsd46Ke.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.2 kB 🟢 -2.84 kB
assets/CloudLoginView-C4KF7QqZ.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.21 kB 🔴 +2.84 kB
assets/CloudSignupView-CBCNzceW.js (new) 9.41 kB 🔴 +9.41 kB 🔴 +2.71 kB 🔴 +2.38 kB
assets/CloudSignupView-DrOMn4BL.js (removed) 9.41 kB 🟢 -9.41 kB 🟢 -2.71 kB 🟢 -2.38 kB
assets/UserCheckView-DaLq6odA.js (removed) 8.42 kB 🟢 -8.42 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/UserCheckView-DaYF_4sg.js (new) 8.42 kB 🔴 +8.42 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/CloudLayoutView-8M-faSwo.js (removed) 6.47 kB 🟢 -6.47 kB 🟢 -2.12 kB 🟢 -1.85 kB
assets/CloudLayoutView-dFLDobA4.js (new) 6.47 kB 🔴 +6.47 kB 🔴 +2.12 kB 🔴 +1.84 kB
assets/CloudForgotPasswordView-DM_UYNWa.js (new) 5.59 kB 🔴 +5.59 kB 🔴 +1.95 kB 🔴 +1.72 kB
assets/CloudForgotPasswordView-gfop8yx7.js (removed) 5.59 kB 🟢 -5.59 kB 🟢 -1.95 kB 🟢 -1.77 kB
assets/CloudAuthTimeoutView-DJBXGQBk.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.79 kB 🔴 +1.57 kB
assets/CloudAuthTimeoutView-xSCjFNKU.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-BaKM8h3a.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.8 kB 🔴 +1.59 kB
assets/CloudSubscriptionRedirectView-H7KETGMx.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.8 kB 🟢 -1.6 kB
assets/UserSelectView-BCQls1Rn.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/UserSelectView-C1QX5qta.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.47 kB
assets/CloudSorryContactSupportView-kf2atGXo.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-C7XcDoLd.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BC6QaqOh.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.67 kB
assets/SecretsPanel-Cxd3Y76z.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.3 kB 🟢 -4.66 kB
assets/LegacyCreditsPanel-BC3i6-KK.js (new) 20.7 kB 🔴 +20.7 kB 🔴 +5.58 kB 🔴 +4.93 kB
assets/LegacyCreditsPanel-JODl_MAG.js (removed) 20.7 kB 🟢 -20.7 kB 🟢 -5.58 kB 🟢 -4.92 kB
assets/SubscriptionPanel-Bwr39s1X.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.76 kB 🟢 -4.18 kB
assets/SubscriptionPanel-CUY5Js6C.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.76 kB 🔴 +4.19 kB
assets/KeybindingPanel-CSdAOxMd.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.54 kB 🟢 -3.13 kB
assets/KeybindingPanel-Du8SgDHK.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.54 kB 🔴 +3.15 kB
assets/AboutPanel-BDE4uu1e.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.45 kB
assets/AboutPanel-DM6exJdr.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.46 kB
assets/ExtensionPanel-Cojg7ddk.js (removed) 9.42 kB 🟢 -9.42 kB 🟢 -2.67 kB 🟢 -2.38 kB
assets/ExtensionPanel-u0HcyEFR.js (new) 9.42 kB 🔴 +9.42 kB 🔴 +2.67 kB 🔴 +2.37 kB
assets/ServerConfigPanel-b60cImRj.js (removed) 6.49 kB 🟢 -6.49 kB 🟢 -2.13 kB 🟢 -1.91 kB
assets/ServerConfigPanel-CZwBMW_D.js (new) 6.49 kB 🔴 +6.49 kB 🔴 +2.13 kB 🔴 +1.91 kB
assets/UserPanel-BeM0P-9f.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/UserPanel-BuiVZMeH.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/cloudRemoteConfig-Di05eNVl.js (removed) 1.48 kB 🟢 -1.48 kB 🟢 -725 B 🟢 -628 B
assets/cloudRemoteConfig-mXNjZAfs.js (new) 1.48 kB 🔴 +1.48 kB 🔴 +721 B 🔴 +627 B
assets/refreshRemoteConfig-C7Lqbedn.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +521 B 🔴 +445 B
assets/refreshRemoteConfig-CW9VIdO5.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -522 B 🟢 -465 B
assets/config-CH_cdA2N.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-71sPPmDw.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B4se7HWo.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B7IP4XTb.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BntF-aiB.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BnWq3fMI.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BsTYoQcE.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Bwt_U2hc.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CFCCJ6bh.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CiXfim_M.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DKOsOORk.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-LhJVbur1.js 28.7 kB 28.7 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-BU6tlE7d.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +988 B
assets/auth-o3zUFIYh.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -988 B
assets/SignUpForm-CdY58Fqp.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.1 kB
assets/SignUpForm-V0Op_pP0.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/UpdatePasswordContent-C5i3Bgdd.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1.09 kB 🟢 -962 B
assets/UpdatePasswordContent-DNhpC1pJ.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +1.09 kB 🔴 +958 B
assets/firebaseAuthStore-BD8LsUOx.js (removed) 831 B 🟢 -831 B 🟢 -407 B 🟢 -364 B
assets/firebaseAuthStore-BMdq-6fs.js (new) 831 B 🔴 +831 B 🔴 +406 B 🔴 +363 B
assets/auth-CQrEH_G3.js (new) 357 B 🔴 +357 B 🔴 +223 B 🔴 +210 B
assets/auth-vebBtJX1.js (removed) 357 B 🟢 -357 B 🟢 -225 B 🟢 -191 B
assets/PasswordFields-B4903XLX.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-CssIUQnt.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 76.6 kB (baseline 76.6 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useShareDialog-BGiXFg6I.js (new) 75.8 kB 🔴 +75.8 kB 🔴 +16.1 kB 🔴 +13.8 kB
assets/useShareDialog-Ch3WO_hN.js (removed) 75.8 kB 🟢 -75.8 kB 🟢 -16.1 kB 🟢 -13.8 kB
assets/useSubscriptionDialog-C7v1P7TW.js (removed) 779 B 🟢 -779 B 🟢 -397 B 🟢 -343 B
assets/useSubscriptionDialog-DGSl25t6.js (new) 779 B 🔴 +779 B 🔴 +396 B 🔴 +338 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-_uGMJLKC.js (new) 9.87 kB 🔴 +9.87 kB 🔴 +3.41 kB 🔴 +3.01 kB
assets/useTerminalTabs-2m5rgLWa.js (removed) 9.87 kB 🟢 -9.87 kB 🟢 -3.41 kB 🟢 -3.01 kB
assets/ComfyQueueButton-BpGfvG1U.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.22 kB
assets/ComfyQueueButton-s2B1e4ag.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.22 kB
assets/SubscribeButton-BcPyhA_a.js (new) 2.34 kB 🔴 +2.34 kB 🔴 +1.01 kB 🔴 +884 B
assets/SubscribeButton-mKuAF55w.js (removed) 2.34 kB 🟢 -2.34 kB 🟢 -1.01 kB 🟢 -884 B
assets/cloudFeedbackTopbarButton-B242Mhps.js (new) 1.64 kB 🔴 +1.64 kB 🔴 +868 B 🔴 +750 B
assets/cloudFeedbackTopbarButton-BfOfhubX.js (removed) 1.64 kB 🟢 -1.64 kB 🟢 -872 B 🟢 -771 B
assets/ComfyQueueButton-BHPsfnXt.js (removed) 836 B 🟢 -836 B 🟢 -412 B 🟢 -366 B
assets/ComfyQueueButton-BWF6ZUQx.js (new) 836 B 🔴 +836 B 🔴 +410 B 🔴 +363 B
assets/Button-N_vwQyKM.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-CXz10wN-.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-CCyXrnmF.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-Cy9Nq-C_.js 5.95 kB 5.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/toggle-group-C6BH2eSy.js 3.83 kB 3.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-CEVxj-GC.js 7.39 kB 7.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-B9_AHnQI.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-CaR97ZzR.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.75 MB (baseline 2.75 MB) • 🔴 +466 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-D6A4hwCI.js (new) 1.92 MB 🔴 +1.92 MB 🔴 +430 kB 🔴 +323 kB
assets/dialogService-iMb-lc2b.js (removed) 1.92 MB 🟢 -1.92 MB 🟢 -430 kB 🟢 -323 kB
assets/api-CvzsMHcD.js (removed) 690 kB 🟢 -690 kB 🟢 -156 kB 🟢 -124 kB
assets/api-vYKZy6PG.js (new) 690 kB 🔴 +690 kB 🔴 +156 kB 🔴 +124 kB
assets/load3dService-CpzOn44V.js (removed) 91.1 kB 🟢 -91.1 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/load3dService-Dgqf9AhP.js (new) 91.1 kB 🔴 +91.1 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/extensionStore-BObTUm0U.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -4.63 kB 🟢 -4.1 kB
assets/extensionStore-BvbapRd4.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +4.63 kB 🔴 +4.11 kB
assets/workflowShareService-BwR6KXVg.js (new) 13.1 kB 🔴 +13.1 kB 🔴 +4.01 kB 🔴 +3.55 kB
assets/workflowShareService-DsVjcpP6.js (removed) 13.1 kB 🟢 -13.1 kB 🟢 -4 kB 🟢 -3.55 kB
assets/releaseStore-DFOfrGdw.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-vvokBrI9.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/keybindingService-CJL12G6Y.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.48 kB
assets/keybindingService-CklBsIko.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.7 kB 🟢 -1.47 kB
assets/bootstrapStore-C5o0k2lG.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +874 B 🔴 +795 B
assets/bootstrapStore-Ds1-ty7-.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -874 B 🟢 -794 B
assets/userStore-D1in3btH.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +721 B 🔴 +675 B
assets/userStore-G2QcDVUl.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -719 B 🟢 -636 B
assets/audioService-CGwF67Oi.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +850 B 🔴 +726 B
assets/audioService-CQKJx8oH.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -848 B 🟢 -724 B
assets/releaseStore-Dbe82vXA.js (removed) 803 B 🟢 -803 B 🟢 -403 B 🟢 -354 B
assets/releaseStore-Dyb2ptTa.js (new) 803 B 🔴 +803 B 🔴 +401 B 🔴 +357 B
assets/settingStore-HRw6f9NM.js (new) 787 B 🔴 +787 B 🔴 +404 B 🔴 +355 B
assets/settingStore-Ut2NrK0J.js (removed) 787 B 🟢 -787 B 🟢 -405 B 🟢 -354 B
assets/workflowDraftStore-BKZW-LFj.js (removed) 779 B 🟢 -779 B 🟢 -397 B 🟢 -343 B
assets/workflowDraftStore-BQu3uRrJ.js (new) 779 B 🔴 +779 B 🔴 +396 B 🔴 +344 B
assets/dialogService-CfTo6pUy.js (removed) 768 B 🟢 -768 B 🟢 -389 B 🟢 -342 B
assets/dialogService-CK8SDfI-.js (new) 768 B 🔴 +768 B 🔴 +387 B 🔴 +345 B
assets/serverConfigStore-gMFb9Bxl.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 14 added / 14 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-BQ2plcWN.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.64 kB 🔴 +3.23 kB
assets/useLoad3d-ruz_5Trf.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-C8vUR2en.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useLoad3dViewer-TinhBc2I.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useFeatureFlags-BMa2Rfmk.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.37 kB 🔴 +1.17 kB
assets/useFeatureFlags-CzeKoZbN.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.37 kB 🟢 -1.17 kB
assets/useWorkspaceUI-BhUWt4Pa.js (removed) 3 kB 🟢 -3 kB 🟢 -820 B 🟢 -701 B
assets/useWorkspaceUI-UomsF5Sb.js (new) 3 kB 🔴 +3 kB 🔴 +822 B 🔴 +704 B
assets/subscriptionCheckoutUtil-B5W6TxSf.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -958 B
assets/subscriptionCheckoutUtil-D54Gvt-_.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +958 B
assets/useErrorHandling-B9I9eQ39.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +633 B 🔴 +534 B
assets/useErrorHandling-NVBI8nTt.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -630 B 🟢 -534 B
assets/useWorkspaceSwitch-C-d-UA4M.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +541 B 🔴 +485 B
assets/useWorkspaceSwitch-CnhVbkCM.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -540 B 🟢 -478 B
assets/useLoad3d-Bv3l5HrB.js (removed) 902 B 🟢 -902 B 🟢 -441 B 🟢 -391 B
assets/useLoad3d-DAh_H-Rj.js (new) 902 B 🔴 +902 B 🔴 +441 B 🔴 +392 B
assets/useLoad3dViewer-BcVBlKc7.js (removed) 881 B 🟢 -881 B 🟢 -428 B 🟢 -381 B
assets/useLoad3dViewer-C9HzTGiO.js (new) 881 B 🔴 +881 B 🔴 +425 B 🔴 +381 B
assets/audioUtils-Cn2edzVw.js (new) 858 B 🔴 +858 B 🔴 +500 B 🔴 +403 B
assets/audioUtils-LP8Jg7qk.js (removed) 858 B 🟢 -858 B 🟢 -500 B 🟢 -418 B
assets/useCurrentUser-Bv5hJ1qv.js (removed) 765 B 🟢 -765 B 🟢 -392 B 🟢 -342 B
assets/useCurrentUser-DC9lblWn.js (new) 765 B 🔴 +765 B 🔴 +390 B 🔴 +345 B
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-DskRKiYG.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-CC-l-L9z.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DOdPeMQc.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-udjgEG1T.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-DrVe0AO9.js 944 B 944 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-D9a2-Oy0.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 11 added / 11 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-D1OJsayB.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-DccD0mxo.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-CHuqBC10.js 1.54 MB 1.54 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-CKBhLh4j.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-C-tDe-KL.js 399 kB 399 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-fZJTFMbU.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-DTO2QA4Q.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-CH_Hqnyl.js 124 kB 124 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-CWHPCody.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.93 MB (baseline 7.93 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-CRTsl6tT.js (removed) 73.8 kB 🟢 -73.8 kB 🟢 -19 kB 🟢 -16.3 kB
assets/core-DO3vJHJ1.js (new) 73.8 kB 🔴 +73.8 kB 🔴 +19 kB 🔴 +16.3 kB
assets/groupNode-BJjF9Tc6.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.6 kB
assets/groupNode-C6u8dsXW.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.5 kB
assets/WidgetSelect-C1KuqJn3.js (removed) 58.3 kB 🟢 -58.3 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/WidgetSelect-Dsh2u8iM.js (new) 58.3 kB 🔴 +58.3 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-BxPGE0XL.js (removed) 46.3 kB 🟢 -46.3 kB 🟢 -8.66 kB 🟢 -7.49 kB
assets/SubscriptionRequiredDialogContentWorkspace-DZFLEule.js (new) 46.3 kB 🔴 +46.3 kB 🔴 +8.65 kB 🔴 +7.5 kB
assets/WidgetPainter-BvDy2YSz.js (new) 32.9 kB 🔴 +32.9 kB 🔴 +7.97 kB 🔴 +7.06 kB
assets/WidgetPainter-Die3EsqT.js (removed) 32.9 kB 🟢 -32.9 kB 🟢 -7.97 kB 🟢 -7.07 kB
assets/Load3DControls-BSRJDxjE.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.65 kB
assets/Load3DControls-DgBvYywp.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/WorkspacePanelContent-CPLzRLrx.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.16 kB 🔴 +5.43 kB
assets/WorkspacePanelContent-DbvNcsey.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.16 kB 🟢 -5.4 kB
assets/SubscriptionRequiredDialogContent-DV1EpnIe.js (new) 25.6 kB 🔴 +25.6 kB 🔴 +6.56 kB 🔴 +5.79 kB
assets/SubscriptionRequiredDialogContent-LUjLwB6-.js (removed) 25.6 kB 🟢 -25.6 kB 🟢 -6.56 kB 🟢 -5.78 kB
assets/Load3dViewerContent-CYRx86AO.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/Load3dViewerContent-DqH_C4-E.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.5 kB
assets/WidgetImageCrop-BRw4FYw-.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.52 kB 🟢 -4.84 kB
assets/WidgetImageCrop-DSgeW527.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.52 kB 🔴 +4.86 kB
assets/SubscriptionPanelContentWorkspace-55DEl2j6.js (removed) 22 kB 🟢 -22 kB 🟢 -5.11 kB 🟢 -4.5 kB
assets/SubscriptionPanelContentWorkspace-CXjvSfaO.js (new) 22 kB 🔴 +22 kB 🔴 +5.11 kB 🔴 +4.5 kB
assets/CurrentUserPopoverWorkspace-B57VMAGP.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +4.95 kB 🔴 +4.41 kB
assets/CurrentUserPopoverWorkspace-CE7B9DTq.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.95 kB 🟢 -4.43 kB
assets/SignInContent-C4dtxa0l.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.77 kB 🔴 +4.17 kB
assets/SignInContent-potqu11q.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.78 kB 🟢 -4.18 kB
assets/WidgetInputNumber-C4zHfDMX.js (removed) 18.8 kB 🟢 -18.8 kB 🟢 -4.79 kB 🟢 -4.26 kB
assets/WidgetInputNumber-wd_b25KC.js (new) 18.8 kB 🔴 +18.8 kB 🔴 +4.79 kB 🔴 +4.26 kB
assets/WidgetRecordAudio-BM6VBKNW.js (removed) 17.4 kB 🟢 -17.4 kB 🟢 -5.02 kB 🟢 -4.48 kB
assets/WidgetRecordAudio-CJ0fX0uE.js (new) 17.4 kB 🔴 +17.4 kB 🔴 +5.02 kB 🔴 +4.48 kB
assets/Load3D-Bco36WnX.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.02 kB 🟢 -3.51 kB
assets/Load3D-FfvQsa7P.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.02 kB 🔴 +3.51 kB
assets/load3d-BSB4uVz_.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.21 kB 🔴 +3.65 kB
assets/load3d-CwZy6pNf.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.21 kB 🟢 -3.65 kB
assets/AudioPreviewPlayer-B5g6se1U.js (new) 11 kB 🔴 +11 kB 🔴 +3.26 kB 🔴 +2.92 kB
assets/AudioPreviewPlayer-CgtNCHXz.js (removed) 11 kB 🟢 -11 kB 🟢 -3.26 kB 🟢 -2.91 kB
assets/changeTracker-BPUlJ74g.js (removed) 9.44 kB 🟢 -9.44 kB 🟢 -2.91 kB 🟢 -2.56 kB
assets/changeTracker-z6uM5acO.js (new) 9.44 kB 🔴 +9.44 kB 🔴 +2.91 kB 🔴 +2.57 kB
assets/nodeTemplates-CoEde6A0.js (removed) 9.34 kB 🟢 -9.34 kB 🟢 -3.27 kB 🟢 -2.88 kB
assets/nodeTemplates-ESaR3COh.js (new) 9.34 kB 🔴 +9.34 kB 🔴 +3.27 kB 🔴 +2.87 kB
assets/InviteMemberDialogContent-BXoUK6Xy.js (removed) 7.41 kB 🟢 -7.41 kB 🟢 -2.31 kB 🟢 -2.01 kB
assets/InviteMemberDialogContent-DZKhPwEK.js (new) 7.41 kB 🔴 +7.41 kB 🔴 +2.31 kB 🔴 +2.02 kB
assets/Load3DConfiguration-BKXEGayl.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-DW36b5aw.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.92 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-DUIAJjEK.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/CreateWorkspaceDialogContent-Tf-RPOKj.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/onboardingCloudRoutes-B3N5v8KL.js (removed) 5.51 kB 🟢 -5.51 kB 🟢 -1.88 kB 🟢 -1.64 kB
assets/onboardingCloudRoutes-D0A3-F_s.js (new) 5.51 kB 🔴 +5.51 kB 🔴 +1.87 kB 🔴 +1.63 kB
assets/FreeTierDialogContent-CaoJ9lZy.js (removed) 5.42 kB 🟢 -5.42 kB 🟢 -1.91 kB 🟢 -1.69 kB
assets/FreeTierDialogContent-wvnpbFaT.js (new) 5.42 kB 🔴 +5.42 kB 🔴 +1.91 kB 🔴 +1.69 kB
assets/EditWorkspaceDialogContent-D_NpmOFv.js (new) 5.36 kB 🔴 +5.36 kB 🔴 +1.96 kB 🔴 +1.72 kB
assets/EditWorkspaceDialogContent-DXSknP_v.js (removed) 5.36 kB 🟢 -5.36 kB 🟢 -1.96 kB 🟢 -1.72 kB
assets/ValueControlPopover-BNoGTYYC.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.77 kB 🔴 +1.59 kB
assets/ValueControlPopover-DRnKHzvj.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.77 kB 🟢 -1.59 kB
assets/Preview3d-rhlAeXho.js (new) 4.89 kB 🔴 +4.89 kB 🔴 +1.61 kB 🔴 +1.4 kB
assets/Preview3d-vXagTopS.js (removed) 4.89 kB 🟢 -4.89 kB 🟢 -1.61 kB 🟢 -1.4 kB
assets/CancelSubscriptionDialogContent-9kEf0NMS.js (removed) 4.83 kB 🟢 -4.83 kB 🟢 -1.8 kB 🟢 -1.58 kB
assets/CancelSubscriptionDialogContent-BX6xmNvJ.js (new) 4.83 kB 🔴 +4.83 kB 🔴 +1.8 kB 🔴 +1.58 kB
assets/DeleteWorkspaceDialogContent-CvLg6yim.js (new) 4.26 kB 🔴 +4.26 kB 🔴 +1.65 kB 🔴 +1.44 kB
assets/DeleteWorkspaceDialogContent-eJAXGY3Y.js (removed) 4.26 kB 🟢 -4.26 kB 🟢 -1.65 kB 🟢 -1.44 kB
assets/WidgetWithControl-D-mAd0_t.js (removed) 4.17 kB 🟢 -4.17 kB 🟢 -1.82 kB 🟢 -1.62 kB
assets/WidgetWithControl-DRVQdZe0.js (new) 4.17 kB 🔴 +4.17 kB 🔴 +1.81 kB 🔴 +1.62 kB
assets/LeaveWorkspaceDialogContent-ChaOLKHa.js (new) 4.09 kB 🔴 +4.09 kB 🔴 +1.6 kB 🔴 +1.39 kB
assets/LeaveWorkspaceDialogContent-CwEHlSSw.js (removed) 4.09 kB 🟢 -4.09 kB 🟢 -1.6 kB 🟢 -1.39 kB
assets/RemoveMemberDialogContent-CBCvgbqM.js (new) 4.08 kB 🔴 +4.08 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/RemoveMemberDialogContent-DbXxWFPI.js (removed) 4.08 kB 🟢 -4.08 kB 🟢 -1.55 kB 🟢 -1.35 kB
assets/RevokeInviteDialogContent-Dqkhr7d3.js (new) 3.99 kB 🔴 +3.99 kB 🔴 +1.56 kB 🔴 +1.38 kB
assets/RevokeInviteDialogContent-hBUjLEph.js (removed) 3.99 kB 🟢 -3.99 kB 🟢 -1.56 kB 🟢 -1.37 kB
assets/InviteMemberUpsellDialogContent-C5lFpxuB.js (new) 3.86 kB 🔴 +3.86 kB 🔴 +1.42 kB 🔴 +1.25 kB
assets/InviteMemberUpsellDialogContent-CkXNvIOB.js (removed) 3.86 kB 🟢 -3.86 kB 🟢 -1.42 kB 🟢 -1.24 kB
assets/tierBenefits-CfH4FNzk.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.3 kB 🔴 +1.16 kB
assets/tierBenefits-v5dKeT3N.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.3 kB 🟢 -1.18 kB
assets/saveMesh-Bru0yYQf.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -1.47 kB 🟢 -1.31 kB
assets/saveMesh-Ck57QoZQ.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +1.48 kB 🔴 +1.31 kB
assets/cloudSessionCookie-3tU3V8yi.js (removed) 3.14 kB 🟢 -3.14 kB 🟢 -1.11 kB 🟢 -986 B
assets/cloudSessionCookie-Bu4fdkeh.js (new) 3.14 kB 🔴 +3.14 kB 🔴 +1.1 kB 🔴 +994 B
assets/GlobalToast-COhpAT9W.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.22 kB 🔴 +1.06 kB
assets/GlobalToast-RIDwGmez.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/SubscribeToRun-D-iP0-wp.js (removed) 2.06 kB 🟢 -2.06 kB 🟢 -947 B 🟢 -827 B
assets/SubscribeToRun-DohWU5-f.js (new) 2.06 kB 🔴 +2.06 kB 🔴 +950 B 🔴 +829 B
assets/CloudRunButtonWrapper-CZNjQogw.js (new) 1.72 kB 🔴 +1.72 kB 🔴 +805 B 🔴 +714 B
assets/CloudRunButtonWrapper-DzpPenfA.js (removed) 1.72 kB 🟢 -1.72 kB 🟢 -804 B 🟢 -727 B
assets/cloudBadges-C4jwILg7.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +725 B 🔴 +622 B
assets/cloudBadges-CXEhl2rH.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -725 B 🟢 -626 B
assets/previousFullPath-Bd00RLKy.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +652 B 🔴 +583 B
assets/previousFullPath-DzOz-ss-.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -648 B 🟢 -578 B
assets/cloudSubscription-CbVPiw9d.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +674 B 🔴 +584 B
assets/cloudSubscription-DwoR0sMk.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -673 B 🟢 -582 B
assets/Load3D-BC2Zi8P0.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +516 B 🔴 +455 B
assets/Load3D-CglHzEfR.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -517 B 🟢 -455 B
assets/nightlyBadges-BkSfJi6m.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +546 B 🔴 +490 B
assets/nightlyBadges-xxFEAK-C.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -548 B 🟢 -490 B
assets/Load3dViewerContent-BOiBL41D.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -487 B 🟢 -430 B
assets/Load3dViewerContent-CXswkbkI.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +484 B 🔴 +426 B
assets/SubscriptionPanelContentWorkspace-BzLVEWHT.js (removed) 963 B 🟢 -963 B 🟢 -457 B 🟢 -396 B
assets/SubscriptionPanelContentWorkspace-Co5bK3t6.js (new) 963 B 🔴 +963 B 🔴 +456 B 🔴 +393 B
assets/changeTracker-Btpj-XVh.js (removed) 800 B 🟢 -800 B 🟢 -404 B 🟢 -353 B
assets/changeTracker-CYiD2fcr.js (new) 800 B 🔴 +800 B 🔴 +401 B 🔴 +349 B
assets/WidgetLegacy-Bl6JbdmS.js (removed) 787 B 🟢 -787 B 🟢 -403 B 🟢 -349 B
assets/WidgetLegacy-CyiD6hvK.js (new) 787 B 🔴 +787 B 🔴 +401 B 🔴 +348 B
assets/graphHasMissingNodes-DpICZzVJ.js (new) 761 B 🔴 +761 B 🔴 +376 B 🔴 +326 B
assets/graphHasMissingNodes-XPA0pNJQ.js (removed) 761 B 🟢 -761 B 🟢 -374 B 🟢 -332 B
assets/AnimationControls-MMe3SVlD.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-2oqasSbp.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-Mr7ZnDOO.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-6VJcY26s.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-C9H6LVPO.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-BiqY9Lcy.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BbyDu2gv.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BEB4P0rH.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bfucg9mP.js 17.7 kB 17.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BMLsYxKd.js 19 kB 19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CAkQMSj_.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CCml88sK.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CXLXD2h2.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DbC3OFpW.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DSqCRthz.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DstS1-8g.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DZFUlDVf.js 17.7 kB 17.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-Cl4K4L4H.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-0qXzwKxL.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-CHqjEJQ0.js 542 kB 542 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Loader-CW1-OX64.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BBaUZnpF.js 181 kB 181 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BdDSvujx.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BgdDDyHY.js 211 kB 211 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CBswMsc-.js 150 kB 150 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CYHSDXJ3.js 188 kB 188 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DA1wOx7a.js 156 kB 156 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DxMfC0Xk.js 132 kB 132 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DXtzF5oy.js 159 kB 159 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-HANZ9FZw.js 153 kB 153 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Ivx1LSmO.js 173 kB 173 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-k8ICB470.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-0x8HaYIi.js 1.83 kB 1.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-Cg7hEqmq.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-CsGpbloy.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-BnLYn-y9.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-lRCQfO0C.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-GUUbKzSN.js 2.78 kB 2.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-3ypc2-io.js 397 kB 397 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B8OsAZ59.js 450 kB 450 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bv39sqP1.js 451 kB 451 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CJPZB8jl.js 400 kB 400 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Ck_RbOds.js 492 kB 492 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Ct4I98dt.js 400 kB 400 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D1QSnvAe.js 416 kB 416 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DK4i8jfV.js 404 kB 404 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DRNH3qAO.js 364 kB 364 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DWeE5stC.js 368 kB 368 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-mLZFEWZZ.js 392 kB 392 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BAz5icrP.js 3.65 kB 3.65 kB ⚪ 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-DTlZN9Iz.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-D0TCJ6S6.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-Da9q2um5.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-LCL7cak3.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-D1DueXTw.js 2.01 kB 2.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Textarea-h5LgL2vk.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-BciYDrIq.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DIRwAHBY.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CdlYdKQ5.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-OlRrWaNc.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-BiI2RQCJ.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-DPuMBxG1.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-CcAQLD_P.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-Do6cgqtI.js 3.6 kB 3.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-jY2-DHmF.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-CTH3BU4p.js 2.89 kB 2.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BZhqi3N7.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-CFDJ6vK7.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DWqMK-RY.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-BHMV12ZJ.js 4.26 kB 4.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-B_kNaRoH.js 3.54 kB 3.54 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-DYLaC2lj.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 51 added / 51 removed

@github-actions
Copy link

github-actions bot commented Mar 6, 2026

⚡ Performance Report

ℹ️ Collecting baseline variance data (0/5 runs). Significance will appear after 2 main branch runs.

Metric Baseline PR Δ
canvas-idle: style recalcs 124 124 +0%
canvas-idle: layouts 0 0 +0%
canvas-idle: task duration 398ms 390ms -2%
canvas-mouse-sweep: style recalcs 185 171 -8%
canvas-mouse-sweep: layouts 12 12 -3%
canvas-mouse-sweep: task duration 1080ms 856ms -21%
dom-widget-clipping: style recalcs 44 39 -11%
dom-widget-clipping: layouts 1 0 -100%
dom-widget-clipping: task duration 380ms 337ms -11%
subgraph-dom-widget-clipping: style recalcs 74 73 -0%
subgraph-dom-widget-clipping: layouts 0 0 +0%
subgraph-dom-widget-clipping: task duration 416ms 410ms -1%
subgraph-idle: style recalcs 122 123 +1%
subgraph-idle: layouts 0 1 +100%
subgraph-idle: task duration 387ms 386ms -0%
subgraph-mouse-sweep: style recalcs 155 160 +3%
subgraph-mouse-sweep: layouts 16 16 -2%
subgraph-mouse-sweep: task duration 718ms 765ms +7%
Raw data
{
  "timestamp": "2026-03-06T17:08:18.035Z",
  "gitSha": "2152f5aed71c006d66f69e28032339d353215953",
  "branch": "fix/coderabbit-issue-9156",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2034.0039999999817,
      "styleRecalcs": 126,
      "styleRecalcDurationMs": 23.323999999999998,
      "layouts": 1,
      "layoutDurationMs": 0.29600000000000004,
      "taskDurationMs": 403.73,
      "heapDeltaBytes": -1847176
    },
    {
      "name": "canvas-idle",
      "durationMs": 2020.0709999999162,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 17.787,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 381.34000000000003,
      "heapDeltaBytes": -1713860
    },
    {
      "name": "canvas-idle",
      "durationMs": 2024.8699999999644,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 18.009999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 384.791,
      "heapDeltaBytes": -1311028
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2040.2599999999893,
      "styleRecalcs": 183,
      "styleRecalcDurationMs": 51.52,
      "layouts": 12,
      "layoutDurationMs": 3.57,
      "taskDurationMs": 1053.232,
      "heapDeltaBytes": -2474012
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1861.14699999996,
      "styleRecalcs": 170,
      "styleRecalcDurationMs": 43.356,
      "layouts": 12,
      "layoutDurationMs": 3.18,
      "taskDurationMs": 772.313,
      "heapDeltaBytes": -2236208
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1785.1080000000366,
      "styleRecalcs": 160,
      "styleRecalcDurationMs": 39.354,
      "layouts": 12,
      "layoutDurationMs": 3.166,
      "taskDurationMs": 741.752,
      "heapDeltaBytes": -1278436
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 553.4959999999955,
      "styleRecalcs": 40,
      "styleRecalcDurationMs": 11.730999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 330.90999999999997,
      "heapDeltaBytes": 6566192
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 533.7110000000393,
      "styleRecalcs": 38,
      "styleRecalcDurationMs": 12.24,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 342.762,
      "heapDeltaBytes": 8341088
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 533.2889999999679,
      "styleRecalcs": 39,
      "styleRecalcDurationMs": 11.971999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 336.318,
      "heapDeltaBytes": 6803456
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 609.1119999999819,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 13.585999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 414.446,
      "heapDeltaBytes": -9189220
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 596.3660000001028,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 14.206,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 410.313,
      "heapDeltaBytes": -7697020
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 597.0120000000634,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 13.994,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 405.772,
      "heapDeltaBytes": -9170732
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2023.8870000000588,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 22.979,
      "layouts": 1,
      "layoutDurationMs": 0.25599999999999995,
      "taskDurationMs": 391.259,
      "heapDeltaBytes": -2224560
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2026.004999999941,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 23.111,
      "layouts": 1,
      "layoutDurationMs": 0.272,
      "taskDurationMs": 397.31899999999996,
      "heapDeltaBytes": -766136
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2005.174000000011,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 18.088,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 369.00100000000003,
      "heapDeltaBytes": -1390276
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1680.8529999999564,
      "styleRecalcs": 153,
      "styleRecalcDurationMs": 40.236000000000004,
      "layouts": 16,
      "layoutDurationMs": 3.9290000000000003,
      "taskDurationMs": 667.384,
      "heapDeltaBytes": -4855036
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1680.1470000000336,
      "styleRecalcs": 154,
      "styleRecalcDurationMs": 42.096000000000004,
      "layouts": 16,
      "layoutDurationMs": 4.188,
      "taskDurationMs": 681.057,
      "heapDeltaBytes": -4953992
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1994.7409999999763,
      "styleRecalcs": 172,
      "styleRecalcDurationMs": 54.05199999999999,
      "layouts": 16,
      "layoutDurationMs": 3.874,
      "taskDurationMs": 946.318,
      "heapDeltaBytes": -3115080
    }
  ]
}

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/platform/assets/composables/useMediaAssetGalleryStore.ts`:
- Around line 40-47: The openUrl function currently constructs a ResultItemImpl
using filename: url.split('/').pop(), which fails for query-style Comfy URLs
like /view?filename=node-image.png&type=output; update openUrl to parse the URL
properly (use the URL constructor or URLSearchParams) to extract filename from
the query param "filename" first and fall back to the pathname basename if
absent, then pass that clean filename into new ResultItemImpl; also add a
regression test that calls openUrl (or the gallery-creation flow) with
"/view?filename=node-image.png&type=output" and asserts the stored
ResultItemImpl.filename equals "node-image.png".

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b14cdd30-812b-4b1a-8d07-525b234e868c

📥 Commits

Reviewing files that changed from the base of the PR and between 7cb07f9 and cf399a5.

📒 Files selected for processing (5)
  • src/composables/graph/useImageMenuOptions.ts
  • src/platform/assets/composables/useMediaAssetGalleryStore.test.ts
  • src/platform/assets/composables/useMediaAssetGalleryStore.ts
  • src/services/litegraphService.ts
  • src/views/GraphView.vue

Comment on lines +40 to +47
const openUrl = (url: string) => {
const resultItem = new ResultItemImpl({
filename: url.split('/').pop() ?? '',
subfolder: '',
type: 'output',
nodeId: '0',
mediaType: 'images'
})
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

Parse the filename from the URL instead of splitting the raw string.

Line 42 breaks for the real callers added in this PR: they pass Comfy /view?filename=... URLs, so the stored filename becomes something like view?filename=foo.png&type=output instead of foo.png. That leaks into ResultGallery as the image alt text and any other filename-based UI.

Suggested fix
     const openUrl = (url: string) => {
+      const parsedUrl = new URL(url, window.location.origin)
+      const filenameFromPath =
+        decodeURIComponent(parsedUrl.pathname.split('/').pop() ?? '')
+
       const resultItem = new ResultItemImpl({
-        filename: url.split('/').pop() ?? '',
+        filename:
+          parsedUrl.searchParams.get('filename') ?? filenameFromPath,
         subfolder: '',
         type: 'output',
         nodeId: '0',
         mediaType: 'images'
       })

Please also add a regression test for a URL shaped like /view?filename=node-image.png&type=output.

📝 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
const openUrl = (url: string) => {
const resultItem = new ResultItemImpl({
filename: url.split('/').pop() ?? '',
subfolder: '',
type: 'output',
nodeId: '0',
mediaType: 'images'
})
const openUrl = (url: string) => {
const parsedUrl = new URL(url, window.location.origin)
const filenameFromPath =
decodeURIComponent(parsedUrl.pathname.split('/').pop() ?? '')
const resultItem = new ResultItemImpl({
filename:
parsedUrl.searchParams.get('filename') ?? filenameFromPath,
subfolder: '',
type: 'output',
nodeId: '0',
mediaType: 'images'
})
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/assets/composables/useMediaAssetGalleryStore.ts` around lines 40
- 47, The openUrl function currently constructs a ResultItemImpl using filename:
url.split('/').pop(), which fails for query-style Comfy URLs like
/view?filename=node-image.png&type=output; update openUrl to parse the URL
properly (use the URL constructor or URLSearchParams) to extract filename from
the query param "filename" first and fall back to the pathname basename if
absent, then pass that clean filename into new ResultItemImpl; also add a
regression test that calls openUrl (or the gallery-creation flow) with
"/view?filename=node-image.png&type=output" and asserts the stored
ResultItemImpl.filename equals "node-image.png".

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: Use Galleria lightbox for 'Open Image' instead of new tab

1 participant