Skip to content

Use preview downscaling in fewer places#9678

Merged
AustinMroz merged 6 commits intomainfrom
austin/real-previews
Mar 9, 2026
Merged

Use preview downscaling in fewer places#9678
AustinMroz merged 6 commits intomainfrom
austin/real-previews

Conversation

@AustinMroz
Copy link
Collaborator

@AustinMroz AustinMroz commented Mar 9, 2026

Thumbnail downscaling is currently being used in more places than it should be.

  • Nodes which display images will display incorrect resolution indicators
    image image

    This is particularly confusing with output nodes, which claim the output is not of the intended resolution

  • The "Download Image" and "Open Image" context menu actions will incorrectly download the downscaled thumbnail.

  • The assets panel will incorrectly display the thumbnail resolution as the resolution of the output

  • The lightbox (zoom) of an image will incorrectly display a downscaled thumbnail.

This PR is a quick workaround to staunch the major problems

  • Nodes always display full previews.
  • Resolution downscaling is applied on the assert card, not on the assetItem itself
    • Due to implementation, this means that asset cards will still incorrectly show the resolution of the thumbnail instead of the size of the full image.

@AustinMroz AustinMroz requested a review from a team as a code owner March 9, 2026 21:22
@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Mar 9, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 9, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This change removes cloud preview parameter injection from the image URL construction pipeline and introduces a dual thumbnail/preview URL approach to the AssetItem schema. The appendCloudResParam logic is stripped from multiple files, while thumbnail_url and preview_url fields replace the single preview_url field across mappers, utilities, and components.

Changes

Cohort / File(s) Summary
Cloud Parameter Removal
src/extensions/core/imageCompare.ts, src/stores/nodeOutputStore.ts
Removed appendCloudResParam imports and conditional logic that augmented image URLs with cloud preview parameters; URLs now constructed without external parameter injection.
Asset Schema Extension
src/platform/assets/schemas/assetSchema.ts
Added optional thumbnail_url field to the zAsset schema, extending AssetItem public shape.
Asset Mapping Updates
src/platform/assets/composables/media/assetMappers.ts, src/platform/assets/utils/outputAssetUtil.ts
Replaced single preview_url field with dual thumbnail_url (from previewUrl/view URL) and preview_url (from url) across mapTaskOutputToAssetItem and mapInputFileToAssetItem functions.
Display Component
src/platform/assets/components/MediaAssetCard.vue
Updated adaptedAsset.src to prefer thumbnail_url over preview_url for media display fallback chain.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 A thumbnail and preview dance hand-in-hand,
Cloud params fade like pawprints in sand,
The AssetItem now wears two URLs with grace,
Where thumbnails lead and previews embrace!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 60.00% 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 'Use preview downscaling in fewer places' accurately summarizes the main objective of this PR, which is to reduce the scope of thumbnail downscaling and fix resolution indicator issues.
Description check ✅ Passed The PR description provides a clear summary of problems being addressed and the solution approach, covering what changed and why, though not all template sections are filled.

✏️ 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 austin/real-previews

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 9, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/09/2026, 10:57:37 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

🎭 Playwright: ✅ 556 passed, 0 failed · 2 flaky

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

📦 Bundle: 4.57 MB gzip 🔴 +11 B

Details

Summary

  • Raw size: 21.4 MB baseline 21.4 MB — 🔴 +11 B
  • Gzip: 4.57 MB baseline 4.57 MB — 🔴 +11 B
  • Brotli: 3.53 MB baseline 3.53 MB — 🔴 +80 B
  • Bundles: 232 current • 232 baseline • 108 added / 108 removed

Category Glance
Data & Services 🔴 +88 B (2.77 MB) · Other 🟢 -77 B (8.04 MB) · Vendor & Third-Party ⚪ 0 B (8.88 MB) · Graph Workspace ⚪ 0 B (967 kB) · Panels & Settings ⚪ 0 B (436 kB) · Editors & Dialogs ⚪ 0 B (77.5 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-BThAv1ng.js (removed) 28.9 kB 🟢 -28.9 kB 🟢 -11.4 kB 🟢 -9.33 kB
assets/index-Cb70RZUI.js (new) 28.9 kB 🔴 +28.9 kB 🔴 +11.4 kB 🔴 +9.33 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BUuS9ziw.js (new) 967 kB 🔴 +967 kB 🔴 +204 kB 🔴 +154 kB
assets/GraphView-DUVZGJ_2.js (removed) 967 kB 🟢 -967 kB 🟢 -204 kB 🟢 -154 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-DAwctDsa.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-DGzsRcPy.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudLoginView-DLdooJTT.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.21 kB 🔴 +2.84 kB
assets/CloudLoginView-hyGGFvTH.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.2 kB 🟢 -2.83 kB
assets/CloudSignupView-CFzlFdUi.js (removed) 9.41 kB 🟢 -9.41 kB 🟢 -2.71 kB 🟢 -2.38 kB
assets/CloudSignupView-CwQw-M9j.js (new) 9.41 kB 🔴 +9.41 kB 🔴 +2.72 kB 🔴 +2.39 kB
assets/UserCheckView-BwD0JHgE.js (new) 8.42 kB 🔴 +8.42 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/UserCheckView-l-BdqWjt.js (removed) 8.42 kB 🟢 -8.42 kB 🟢 -2.22 kB 🟢 -1.94 kB
assets/CloudLayoutView-DDbbF15l.js (removed) 6.47 kB 🟢 -6.47 kB 🟢 -2.12 kB 🟢 -1.85 kB
assets/CloudLayoutView-pPUdgi4e.js (new) 6.47 kB 🔴 +6.47 kB 🔴 +2.12 kB 🔴 +1.86 kB
assets/CloudForgotPasswordView-BPl3VX62.js (new) 5.59 kB 🔴 +5.59 kB 🔴 +1.95 kB 🔴 +1.73 kB
assets/CloudForgotPasswordView-C3p0IWOw.js (removed) 5.59 kB 🟢 -5.59 kB 🟢 -1.95 kB 🟢 -1.73 kB
assets/CloudAuthTimeoutView-DekPAVEv.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudAuthTimeoutView-Df26bv9r.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.79 kB 🔴 +1.58 kB
assets/CloudSubscriptionRedirectView-6Ld1HFeL.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.8 kB 🔴 +1.6 kB
assets/CloudSubscriptionRedirectView-C6yWOIJG.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.8 kB 🟢 -1.59 kB
assets/UserSelectView-CCuNhmgR.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.46 kB
assets/UserSelectView-DcuE-9sr.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.46 kB
assets/CloudSorryContactSupportView-Deer4x8G.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-BEfSPHAy.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-B7vvhzpp.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.29 kB 🟢 -4.64 kB
assets/SecretsPanel-CDbAKgj0.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.29 kB 🔴 +4.64 kB
assets/LegacyCreditsPanel-BY7zk_tK.js (removed) 20.7 kB 🟢 -20.7 kB 🟢 -5.59 kB 🟢 -4.92 kB
assets/LegacyCreditsPanel-D-7sfwi1.js (new) 20.7 kB 🔴 +20.7 kB 🔴 +5.58 kB 🔴 +4.91 kB
assets/SubscriptionPanel-BL09RmN7.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.76 kB 🔴 +4.19 kB
assets/SubscriptionPanel-C9WpUoYA.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.75 kB 🟢 -4.18 kB
assets/KeybindingPanel-Dx6P70Cz.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.54 kB 🟢 -3.14 kB
assets/KeybindingPanel-Dz_fkrsp.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.54 kB 🔴 +3.14 kB
assets/AboutPanel-B8_61ftj.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.46 kB
assets/AboutPanel-BnS3l4_u.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.47 kB
assets/ExtensionPanel-BiQdTVPG.js (new) 9.42 kB 🔴 +9.42 kB 🔴 +2.67 kB 🔴 +2.37 kB
assets/ExtensionPanel-derojrHP.js (removed) 9.42 kB 🟢 -9.42 kB 🟢 -2.66 kB 🟢 -2.39 kB
assets/ServerConfigPanel-BZlwPvm8.js (new) 6.49 kB 🔴 +6.49 kB 🔴 +2.13 kB 🔴 +1.94 kB
assets/ServerConfigPanel-ugQ6A-sa.js (removed) 6.49 kB 🟢 -6.49 kB 🟢 -2.13 kB 🟢 -1.91 kB
assets/UserPanel-DnvMVqSf.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -2.01 kB 🟢 -1.77 kB
assets/UserPanel-NQd2hG0g.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +2.01 kB 🔴 +1.77 kB
assets/cloudRemoteConfig-B68uWIBe.js (new) 1.48 kB 🔴 +1.48 kB 🔴 +726 B 🔴 +631 B
assets/cloudRemoteConfig-DvgTJ1Mr.js (removed) 1.48 kB 🟢 -1.48 kB 🟢 -725 B 🟢 -633 B
assets/refreshRemoteConfig-0nsJdC0n.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +520 B 🔴 +447 B
assets/refreshRemoteConfig-B70Dlk6B.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -520 B 🟢 -460 B
assets/config-DrIhAAj_.js 1.22 kB 1.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BH2NzvA8.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BlDXFCUy.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BPjNSOku.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BSfPhDgX.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CTDqwZOP.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CY1qXPWG.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D4yKfrVw.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DKN0RxMZ.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-hSQJdwwK.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-rqXXfmcr.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-So53ZGaK.js 38.5 kB 38.5 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-CHSDRWdi.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +986 B
assets/auth-DN6RmSjk.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -985 B
assets/SignUpForm-BKAb61Xa.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.1 kB
assets/SignUpForm-Bmg1EA-v.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/UpdatePasswordContent-CR1vNHTN.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +1.09 kB 🔴 +966 B
assets/UpdatePasswordContent-j89yh2gb.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1.09 kB 🟢 -965 B
assets/firebaseAuthStore-6vlkv2rd.js (removed) 831 B 🟢 -831 B 🟢 -411 B 🟢 -365 B
assets/firebaseAuthStore-CDmBnLFw.js (new) 831 B 🔴 +831 B 🔴 +409 B 🔴 +358 B
assets/auth-BImLfSZ7.js (removed) 357 B 🟢 -357 B 🟢 -225 B 🟢 -189 B
assets/auth-pmePovaZ.js (new) 357 B 🔴 +357 B 🔴 +226 B 🔴 +208 B
assets/PasswordFields-D5kX5MXM.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-BorJpYlL.js 1.59 kB 1.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useShareDialog-B8RRttcf.js (removed) 76.8 kB 🟢 -76.8 kB 🟢 -16.4 kB 🟢 -14.1 kB
assets/useShareDialog-fv4DZSfi.js (new) 76.8 kB 🔴 +76.8 kB 🔴 +16.4 kB 🔴 +14.1 kB
assets/useSubscriptionDialog-DmATyOfw.js (removed) 779 B 🟢 -779 B 🟢 -401 B 🟢 -345 B
assets/useSubscriptionDialog-f3N1bxTD.js (new) 779 B 🔴 +779 B 🔴 +401 B 🔴 +345 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-BbSNaTho.js (new) 13.8 kB 🔴 +13.8 kB 🔴 +3.9 kB 🔴 +3.48 kB
assets/ComfyQueueButton-qZ2AWFLM.js (removed) 13.8 kB 🟢 -13.8 kB 🟢 -3.91 kB 🟢 -3.49 kB
assets/useTerminalTabs-DtNK0loA.js (new) 9.87 kB 🔴 +9.87 kB 🔴 +3.41 kB 🔴 +3 kB
assets/useTerminalTabs-jryyVkGw.js (removed) 9.87 kB 🟢 -9.87 kB 🟢 -3.41 kB 🟢 -3.01 kB
assets/SubscribeButton-C2veTn_U.js (new) 2.34 kB 🔴 +2.34 kB 🔴 +1.01 kB 🔴 +878 B
assets/SubscribeButton-DK1X_G1W.js (removed) 2.34 kB 🟢 -2.34 kB 🟢 -1.01 kB 🟢 -880 B
assets/cloudFeedbackTopbarButton-BLE-Gmr1.js (removed) 1.42 kB 🟢 -1.42 kB 🟢 -747 B 🟢 -660 B
assets/cloudFeedbackTopbarButton-CBtwDZRf.js (new) 1.42 kB 🔴 +1.42 kB 🔴 +748 B 🔴 +665 B
assets/ComfyQueueButton-BL38EuLw.js (removed) 836 B 🟢 -836 B 🟢 -417 B 🟢 -367 B
assets/ComfyQueueButton-CInbilzc.js (new) 836 B 🔴 +836 B 🔴 +414 B 🔴 +369 B
assets/Button-C54TnyIk.js 3.2 kB 3.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-BJr1VDd1.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-DPNyHNXp.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-v3EfWwGB.js 5.95 kB 5.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/toggle-group-tF66I_um.js 3.83 kB 3.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-B95EAjGD.js 7.39 kB 7.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-xfn08Ppk.js 1.19 kB 1.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-CeVzA6qN.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.77 MB (baseline 2.77 MB) • 🔴 +88 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-C3sI9e7h.js (new) 1.93 MB 🔴 +1.93 MB 🔴 +434 kB 🔴 +325 kB
assets/dialogService-BBtsYEtx.js (removed) 1.93 MB 🟢 -1.93 MB 🟢 -434 kB 🟢 -325 kB
assets/api-2LN66uKD.js (removed) 693 kB 🟢 -693 kB 🟢 -156 kB 🟢 -124 kB
assets/api-DZTy2gBw.js (new) 693 kB 🔴 +693 kB 🔴 +156 kB 🔴 +124 kB
assets/load3dService-D4Rcz69a.js (removed) 91.1 kB 🟢 -91.1 kB 🟢 -19.1 kB 🟢 -16.5 kB
assets/load3dService-DHRGFYe8.js (new) 91.1 kB 🔴 +91.1 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/extensionStore-8UIPvRyK.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +4.63 kB 🔴 +4.1 kB
assets/extensionStore-BpFXwlyX.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -4.63 kB 🟢 -4.09 kB
assets/workflowShareService-CesDL11y.js (new) 13.3 kB 🔴 +13.3 kB 🔴 +4.1 kB 🔴 +3.63 kB
assets/workflowShareService-CqW-v3pB.js (removed) 13.3 kB 🟢 -13.3 kB 🟢 -4.1 kB 🟢 -3.63 kB
assets/releaseStore-C2ypipZu.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/releaseStore-RpAfQR7v.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/keybindingService-BY-j3rSC.js (removed) 7.16 kB 🟢 -7.16 kB 🟢 -1.72 kB 🟢 -1.48 kB
assets/keybindingService-uwlsM5VW.js (new) 7.16 kB 🔴 +7.16 kB 🔴 +1.72 kB 🔴 +1.48 kB
assets/bootstrapStore-BMcwrFah.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +871 B 🔴 +789 B
assets/bootstrapStore-DRRnz7O3.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -872 B 🟢 -792 B
assets/userStore-BcVSRxJK.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +721 B 🔴 +675 B
assets/userStore-CQHIRmAg.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -720 B 🟢 -638 B
assets/audioService-D7BLAwc3.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -848 B 🟢 -723 B
assets/audioService-um2iIeeX.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +846 B 🔴 +725 B
assets/releaseStore-DAFT1ook.js (removed) 803 B 🟢 -803 B 🟢 -408 B 🟢 -358 B
assets/releaseStore-DeDaR48V.js (new) 803 B 🔴 +803 B 🔴 +406 B 🔴 +356 B
assets/settingStore-CMqxnUvR.js (removed) 787 B 🟢 -787 B 🟢 -409 B 🟢 -359 B
assets/settingStore-lyFmDDda.js (new) 787 B 🔴 +787 B 🔴 +408 B 🔴 +357 B
assets/workflowDraftStore-BK-hjX1I.js (removed) 779 B 🟢 -779 B 🟢 -401 B 🟢 -353 B
assets/workflowDraftStore-BWSQtTpm.js (new) 779 B 🔴 +779 B 🔴 +400 B 🔴 +348 B
assets/dialogService-9n8HGdQE.js (new) 768 B 🔴 +768 B 🔴 +392 B 🔴 +344 B
assets/dialogService-BHA8qEGZ.js (removed) 768 B 🟢 -768 B 🟢 -393 B 🟢 -346 B
assets/serverConfigStore-Ze5zvB9a.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 14 added / 14 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-_H4FzlUq.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-CExgBkPq.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-BF06PEA_.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-jUxk-OF2.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useFeatureFlags-BMPLIrLo.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.37 kB 🟢 -1.17 kB
assets/useFeatureFlags-cJ5oe9Nq.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.37 kB 🔴 +1.17 kB
assets/useWorkspaceUI-Cuxy5Fm8.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -739 B
assets/useWorkspaceUI-D2XOVhu-.js (new) 3 kB 🔴 +3 kB 🔴 +821 B 🔴 +702 B
assets/subscriptionCheckoutUtil-AEo5gFTw.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +958 B
assets/subscriptionCheckoutUtil-Dwn8pWov.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -946 B
assets/useErrorHandling-9TmEUXXs.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +630 B 🔴 +531 B
assets/useErrorHandling-C0Ycr0-i.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -631 B 🟢 -533 B
assets/useLoad3d-Bc3NONbE.js (removed) 902 B 🟢 -902 B 🟢 -447 B 🟢 -396 B
assets/useLoad3d-CwOXttQ-.js (new) 902 B 🔴 +902 B 🔴 +445 B 🔴 +400 B
assets/useLoad3dViewer-Cfqepi7b.js (removed) 881 B 🟢 -881 B 🟢 -432 B 🟢 -387 B
assets/useLoad3dViewer-iqnXhWIl.js (new) 881 B 🔴 +881 B 🔴 +431 B 🔴 +385 B
assets/audioUtils-CNNNDCwo.js (new) 858 B 🔴 +858 B 🔴 +499 B 🔴 +406 B
assets/audioUtils-DMIoRwsb.js (removed) 858 B 🟢 -858 B 🟢 -500 B 🟢 -407 B
assets/useCurrentUser-B4TeZ0U6.js (new) 765 B 🔴 +765 B 🔴 +396 B 🔴 +344 B
assets/useCurrentUser-CR1uJ-dk.js (removed) 765 B 🟢 -765 B 🟢 -397 B 🟢 -345 B
assets/useWorkspaceSwitch-CKLenkPD.js (new) 688 B 🔴 +688 B 🔴 +350 B 🔴 +296 B
assets/useWorkspaceSwitch-Cvymn-pJ.js (removed) 688 B 🟢 -688 B 🟢 -350 B 🟢 -296 B
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-Bz3E3A2O.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-Cybe2l6l.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-DsiILYYo.js 944 B 944 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-DZeo_ZWQ.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-D82zUMvC.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-u14f4tgD.js 1.54 MB 1.54 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-prq_Rlnc.js 1.72 MB 1.72 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DAnHd-7G.js 413 kB 413 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-C69yBO64.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-BAp4Syx9.js 125 kB 125 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-Co8jWZ4q.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 — 8.04 MB (baseline 8.04 MB) • 🟢 -77 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-CQ9TTd-C.js (removed) 73.8 kB 🟢 -73.8 kB 🟢 -19 kB 🟢 -16.3 kB
assets/core-CvzI9kFg.js (new) 73.7 kB 🔴 +73.7 kB 🔴 +19 kB 🔴 +16.2 kB
assets/groupNode-BTMDETlN.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.6 kB
assets/groupNode-DBbnrH9j.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.6 kB
assets/WidgetSelect-D84xSIH5.js (removed) 57.8 kB 🟢 -57.8 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/WidgetSelect-Tk6vXONS.js (new) 57.8 kB 🔴 +57.8 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-BI8GnBqf.js (new) 46.2 kB 🔴 +46.2 kB 🔴 +8.65 kB 🔴 +7.52 kB
assets/SubscriptionRequiredDialogContentWorkspace-DnM2DtdZ.js (removed) 46.2 kB 🟢 -46.2 kB 🟢 -8.65 kB 🟢 -7.54 kB
assets/WidgetPainter--I6l8xNJ.js (removed) 32.9 kB 🟢 -32.9 kB 🟢 -7.97 kB 🟢 -7.07 kB
assets/WidgetPainter-CYRUAfuo.js (new) 32.9 kB 🔴 +32.9 kB 🔴 +7.97 kB 🔴 +7.06 kB
assets/Load3DControls-BuAeg9um.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.33 kB 🔴 +4.65 kB
assets/Load3DControls-DD3GfkGS.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.64 kB
assets/WorkspacePanelContent-DWltVXIO.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.16 kB 🔴 +5.42 kB
assets/WorkspacePanelContent-shRvKJoT.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.16 kB 🟢 -5.41 kB
assets/SubscriptionRequiredDialogContent-91wTCQmz.js (removed) 25.6 kB 🟢 -25.6 kB 🟢 -6.56 kB 🟢 -5.78 kB
assets/SubscriptionRequiredDialogContent-DAI3djn3.js (new) 25.6 kB 🔴 +25.6 kB 🔴 +6.57 kB 🔴 +5.78 kB
assets/Load3dViewerContent-DM02AB_u.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.51 kB
assets/Load3dViewerContent-NoBpLLSB.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/WidgetImageCrop-BblHoz17.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.52 kB 🔴 +4.85 kB
assets/WidgetImageCrop-CzQ8lRJV.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.51 kB 🟢 -4.87 kB
assets/SubscriptionPanelContentWorkspace-CshEraHc.js (removed) 22 kB 🟢 -22 kB 🟢 -5.11 kB 🟢 -4.49 kB
assets/SubscriptionPanelContentWorkspace-DXqE6RIq.js (new) 22 kB 🔴 +22 kB 🔴 +5.11 kB 🔴 +4.5 kB
assets/CurrentUserPopoverWorkspace-D901Hg5y.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.95 kB 🟢 -4.41 kB
assets/CurrentUserPopoverWorkspace-DgS00le3.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +4.94 kB 🔴 +4.41 kB
assets/SignInContent-BHidX3z8.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.77 kB 🟢 -4.17 kB
assets/SignInContent-ewVqYZBw.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.77 kB 🔴 +4.17 kB
assets/WidgetInputNumber-Cohf-RBz.js (removed) 18.8 kB 🟢 -18.8 kB 🟢 -4.78 kB 🟢 -4.25 kB
assets/WidgetInputNumber-Dyy34iiw.js (new) 18.8 kB 🔴 +18.8 kB 🔴 +4.79 kB 🔴 +4.26 kB
assets/WidgetRecordAudio-BqOihwCS.js (removed) 17.4 kB 🟢 -17.4 kB 🟢 -5.01 kB 🟢 -4.48 kB
assets/WidgetRecordAudio-CZ7XYTwc.js (new) 17.4 kB 🔴 +17.4 kB 🔴 +5.02 kB 🔴 +4.48 kB
assets/Load3D-Cj_tzH2E.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.02 kB 🔴 +3.51 kB
assets/Load3D-Gogo5KVW.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.5 kB
assets/load3d-BfmLAZmE.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.22 kB 🔴 +3.65 kB
assets/load3d-D_PwcADP.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.21 kB 🟢 -3.65 kB
assets/AudioPreviewPlayer-D4wpqmgP.js (removed) 11 kB 🟢 -11 kB 🟢 -3.25 kB 🟢 -2.94 kB
assets/AudioPreviewPlayer-HrEYR5IV.js (new) 11 kB 🔴 +11 kB 🔴 +3.25 kB 🔴 +2.93 kB
assets/nodeTemplates-CeD7JeyT.js (new) 9.34 kB 🔴 +9.34 kB 🔴 +3.27 kB 🔴 +2.88 kB
assets/nodeTemplates-D6L_bkdw.js (removed) 9.34 kB 🟢 -9.34 kB 🟢 -3.27 kB 🟢 -2.88 kB
assets/InviteMemberDialogContent-4BStNRVH.js (new) 7.37 kB 🔴 +7.37 kB 🔴 +2.31 kB 🔴 +2.02 kB
assets/InviteMemberDialogContent-DSYMkRE2.js (removed) 7.37 kB 🟢 -7.37 kB 🟢 -2.31 kB 🟢 -2.01 kB
assets/Load3DConfiguration-B-eK8iGr.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.92 kB 🟢 -1.68 kB
assets/Load3DConfiguration-Cyzw0RV3.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.92 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-C7cY2TgP.js (new) 5.54 kB 🔴 +5.54 kB 🔴 +2 kB 🔴 +1.75 kB
assets/CreateWorkspaceDialogContent-Dep7aPJU.js (removed) 5.54 kB 🟢 -5.54 kB 🟢 -2 kB 🟢 -1.74 kB
assets/onboardingCloudRoutes-COd2lSFd.js (new) 5.51 kB 🔴 +5.51 kB 🔴 +1.87 kB 🔴 +1.65 kB
assets/onboardingCloudRoutes-DjLB1iRd.js (removed) 5.51 kB 🟢 -5.51 kB 🟢 -1.88 kB 🟢 -1.63 kB
assets/FreeTierDialogContent-CqJ1e3Eg.js (new) 5.42 kB 🔴 +5.42 kB 🔴 +1.91 kB 🔴 +1.7 kB
assets/FreeTierDialogContent-D2lj5D1F.js (removed) 5.42 kB 🟢 -5.42 kB 🟢 -1.91 kB 🟢 -1.7 kB
assets/EditWorkspaceDialogContent-D3AtEXOv.js (new) 5.35 kB 🔴 +5.35 kB 🔴 +1.97 kB 🔴 +1.72 kB
assets/EditWorkspaceDialogContent-l-RLY71x.js (removed) 5.35 kB 🟢 -5.35 kB 🟢 -1.97 kB 🟢 -1.72 kB
assets/ValueControlPopover-BcbyeCHl.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.77 kB 🔴 +1.6 kB
assets/ValueControlPopover-j7UwVePF.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.77 kB 🟢 -1.6 kB
assets/Preview3d-C3-7SsQP.js (removed) 4.89 kB 🟢 -4.89 kB 🟢 -1.61 kB 🟢 -1.41 kB
assets/Preview3d-CUIzYlpV.js (new) 4.89 kB 🔴 +4.89 kB 🔴 +1.61 kB 🔴 +1.4 kB
assets/CancelSubscriptionDialogContent-DyGiSrkK.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.8 kB 🔴 +1.59 kB
assets/CancelSubscriptionDialogContent-nNWh0HS5.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.8 kB 🟢 -1.59 kB
assets/DeleteWorkspaceDialogContent-BoSvXBWV.js (removed) 4.25 kB 🟢 -4.25 kB 🟢 -1.65 kB 🟢 -1.44 kB
assets/DeleteWorkspaceDialogContent-ZXOUOycu.js (new) 4.25 kB 🔴 +4.25 kB 🔴 +1.65 kB 🔴 +1.43 kB
assets/WidgetWithControl-6nWUXEnK.js (new) 4.17 kB 🔴 +4.17 kB 🔴 +1.82 kB 🔴 +1.63 kB
assets/WidgetWithControl-DifaKTar.js (removed) 4.17 kB 🟢 -4.17 kB 🟢 -1.82 kB 🟢 -1.63 kB
assets/LeaveWorkspaceDialogContent-A_vqHy49.js (new) 4.08 kB 🔴 +4.08 kB 🔴 +1.59 kB 🔴 +1.38 kB
assets/LeaveWorkspaceDialogContent-D8WwzmKE.js (removed) 4.08 kB 🟢 -4.08 kB 🟢 -1.59 kB 🟢 -1.39 kB
assets/RemoveMemberDialogContent-CrkB67xd.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/RemoveMemberDialogContent-qVLKM5-X.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/RevokeInviteDialogContent-DAFDisCl.js (new) 3.97 kB 🔴 +3.97 kB 🔴 +1.55 kB 🔴 +1.37 kB
assets/RevokeInviteDialogContent-DtPJVF40.js (removed) 3.97 kB 🟢 -3.97 kB 🟢 -1.55 kB 🟢 -1.37 kB
assets/InviteMemberUpsellDialogContent-BH6OvA84.js (new) 3.86 kB 🔴 +3.86 kB 🔴 +1.43 kB 🔴 +1.26 kB
assets/InviteMemberUpsellDialogContent-BMy_oBV0.js (removed) 3.86 kB 🟢 -3.86 kB 🟢 -1.42 kB 🟢 -1.25 kB
assets/tierBenefits-DvHvVIvQ.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.3 kB 🟢 -1.17 kB
assets/tierBenefits-haoA-u4j.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.3 kB 🔴 +1.15 kB
assets/saveMesh-Aa4k3a1I.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +1.48 kB 🔴 +1.32 kB
assets/saveMesh-DHvPcIxC.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -1.48 kB 🟢 -1.31 kB
assets/cloudSessionCookie-C6ViAZUM.js (removed) 3.14 kB 🟢 -3.14 kB 🟢 -1.11 kB 🟢 -961 B
assets/cloudSessionCookie-DZpnEpfz.js (new) 3.14 kB 🔴 +3.14 kB 🔴 +1.11 kB 🔴 +965 B
assets/GlobalToast-BM7GRKtg.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/GlobalToast-BxU9RFs-.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/SubscribeToRun-Ck67b33J.js (new) 2.06 kB 🔴 +2.06 kB 🔴 +948 B 🔴 +839 B
assets/SubscribeToRun-Cv5vqjPf.js (removed) 2.06 kB 🟢 -2.06 kB 🟢 -948 B 🟢 -828 B
assets/CloudRunButtonWrapper-DWPfqaPB.js (removed) 1.72 kB 🟢 -1.72 kB 🟢 -808 B 🟢 -731 B
assets/CloudRunButtonWrapper-GWw5-Vve.js (new) 1.72 kB 🔴 +1.72 kB 🔴 +807 B 🔴 +746 B
assets/cloudBadges-Cd7e8DZr.js (new) 1.54 kB 🔴 +1.54 kB 🔴 +797 B 🔴 +697 B
assets/cloudBadges-CtVw4UMd.js (removed) 1.54 kB 🟢 -1.54 kB 🟢 -796 B 🟢 -695 B
assets/previousFullPath-CRvqATWg.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -648 B 🟢 -578 B
assets/previousFullPath-DKz5E-0c.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +651 B 🔴 +578 B
assets/cloudSubscription-biTOqe7n.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +679 B 🔴 +589 B
assets/cloudSubscription-D8cxPX28.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -677 B 🟢 -592 B
assets/Load3D-BhZULE2r.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -517 B 🟢 -461 B
assets/Load3D-BJzjfNhk.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +519 B 🔴 +459 B
assets/nightlyBadges-BSpJfmFm.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -552 B 🟢 -490 B
assets/nightlyBadges-zeRa64rK.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +551 B 🔴 +489 B
assets/Load3dViewerContent-B1I3i05M.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -489 B 🟢 -434 B
assets/Load3dViewerContent-h0z8GMAs.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +488 B 🔴 +430 B
assets/SubscriptionPanelContentWorkspace-ByLmQqT7.js (removed) 963 B 🟢 -963 B 🟢 -460 B 🟢 -397 B
assets/SubscriptionPanelContentWorkspace-V_TYaAhk.js (new) 963 B 🔴 +963 B 🔴 +458 B 🔴 +396 B
assets/WidgetLegacy-CChsVF3y.js (removed) 787 B 🟢 -787 B 🟢 -407 B 🟢 -351 B
assets/WidgetLegacy-DRoPFVv9.js (new) 787 B 🔴 +787 B 🔴 +405 B 🔴 +351 B
assets/changeTracker-Cq-f8Vrb.js (new) 763 B 🔴 +763 B 🔴 +395 B 🔴 +344 B
assets/changeTracker-DqKHwzQQ.js (removed) 763 B 🟢 -763 B 🟢 -396 B 🟢 -345 B
assets/graphHasMissingNodes-Dotfi0wT.js (new) 761 B 🔴 +761 B 🔴 +373 B 🔴 +324 B
assets/graphHasMissingNodes-DzvNeXEh.js (removed) 761 B 🟢 -761 B 🟢 -375 B 🟢 -318 B
assets/AnimationControls-Dqd5kQXM.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-KB6aDxFL.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-DaAGiCO7.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-D2Wl6A4b.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-BcOH_oP5.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CVUg6Znj.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-4Ex6JXL0.js 19.2 kB 19.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-4eY_jIIw.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B2u5OAt2.js 16.5 kB 16.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BAAf-WrY.js 16.4 kB 16.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BwgnbfCS.js 16.5 kB 16.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CMf3AlGU.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Db23kZm5.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DTom9f1s.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-uXFULtu8.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-y391QX3e.js 15.6 kB 15.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-ZTJwiV8a.js 17.3 kB 17.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-ogISyp4e.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-BNlrEPku.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Dfk52C9I.js 545 kB 545 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Loader-cdpDz0uu.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-4PccOdiO.js 199 kB 199 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-A9K8E17X.js 140 kB 140 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BERG8Y4E.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bo_nk-LH.js 167 kB 167 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BODcCr1I.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C9ucaZMP.js 158 kB 158 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CM3j3xAc.js 164 kB 164 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-cwloH2g5.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CZ_ZoKrz.js 190 kB 190 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-De96SAcR.js 222 kB 222 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-KB02fdvg.js 159 kB 159 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-CIss1NZp.js 1.83 kB 1.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CcX--__P.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BAvfKQcM.js 1.81 kB 1.81 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-FC1oe-E1.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-quKrqFV_.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-L08_iM14.js 2.78 kB 2.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B8HFl03z.js 406 kB 406 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bhwr0_qt.js 452 kB 452 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BnwYZsRe.js 494 kB 494 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BQQ7epXP.js 394 kB 394 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C4H2Yzrv.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Ci3336-6.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CVMvffJd.js 453 kB 453 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cxe4eF5X.js 402 kB 402 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D3rH0GXo.js 418 kB 418 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-LI1J_566.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ZRmGudls.js 402 kB 402 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-VXP92-HL.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-BR6SEI0c.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-yLg8Ua1p.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-BsMXunsY.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-BwR6vNpJ.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-J8f-bQt0.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-tnAz8KeU.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-BUItZo5F.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-6fIeENmI.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BzDU_tL5.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-DLkq0NID.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-L4hCPhOA.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-BZyvlEbQ.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-CyRqphmc.js 3.6 kB 3.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-C48Z80Vu.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-D0ea31DA.js 2.89 kB 2.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-Dq9_JfRn.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-BUuB6s0W.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-tYaGazrB.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-CngzXUeU.js 4.26 kB 4.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-DKi1iU_7.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: 50 added / 50 removed

@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 Mar 9, 2026
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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/platform/assets/components/MediaImageTop.vue (1)

6-11: ⚠️ Potential issue | 🟠 Major

Mismatch between preloaded URL and rendered img src.

useImage preloads the cloud-resized URL (appendCloudResUrl(asset.src)), but the actual <img> tag at line 8 uses the raw asset.src. This causes:

  1. Two separate network requests (resized preview + full original)
  2. The full-size image still loads in cloud mode, defeating the optimization
  3. Potential error state inconsistencies if one URL fails but not the other

The <img> src should use the same transformed URL as useImage.

🐛 Proposed fix
+<script setup lang="ts">
+import { computed } from 'vue'
+import { useImage, whenever } from '@vueuse/core'
+
+import { appendCloudResUrl } from '@/platform/distribution/cloudPreviewUtil'
+import type { AssetMeta } from '../schemas/mediaAssetSchema'
+
+const { asset } = defineProps<{
+  asset: AssetMeta
+}>()
+
+const emit = defineEmits<{
+  'image-loaded': [width: number, height: number]
+  view: []
+}>()
+
+const imageSrc = computed(() =>
+  asset.src ? appendCloudResUrl(asset.src) : ''
+)
+
+const { state, error, isReady } = useImage({
+  src: imageSrc.value,
+  alt: asset.display_name || asset.name
+})
+</script>

And in the template:

     <img
       v-if="!error"
-      :src="asset.src"
+      :src="imageSrc"
       :alt="asset.display_name || asset.name"

Also applies to: 36-39

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

In `@src/platform/assets/components/MediaImageTop.vue` around lines 6 - 11, The
template's <img> is using the raw asset.src while useImage preloads the
transformed URL via appendCloudResUrl(asset.src), causing duplicate requests and
mismatch; update the <img> src binding to use the same transformed URL produced
by useImage/appendCloudResUrl so the rendered image and preloaded image match
(refer to useImage, appendCloudResUrl, and the <img> element currently bound to
asset.src), and ensure the same change is applied for the second instance around
lines 36-39 so error state and caching are consistent.
🧹 Nitpick comments (2)
src/platform/distribution/cloudPreviewUtil.ts (2)

21-24: Note: No media type check unlike appendCloudResParam.

appendCloudResParam skips non-image files, but appendCloudResUrl appends res=512 unconditionally. This is fine since the function is only used in MediaImageTop.vue (image-specific), but the difference in behavior should be documented.

📝 Optional: Add clarifying JSDoc
+/**
+ * Appends `&res=512` to the given URL when in cloud mode.
+ * Unlike appendCloudResParam, this does not check media type -
+ * caller is responsible for ensuring this is only used for images.
+ */
 export function appendCloudResUrl(url: string): string {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/distribution/cloudPreviewUtil.ts` around lines 21 - 24, The
function appendCloudResUrl currently appends '&res=512' unconditionally while
appendCloudResParam skips non-image files; update appendCloudResUrl to either
perform the same image-type guard as appendCloudResParam or add a clarifying
JSDoc comment stating this function is image-only and intended to be used only
by image components (e.g., MediaImageTop.vue); reference appendCloudResUrl and
appendCloudResParam and ensure the chosen fix documents or enforces that
non-image URLs are not modified.

21-24: Consider more robust query string handling.

appendCloudResUrl unconditionally concatenates &res=512, which assumes the URL already contains query parameters. If a URL without query params is ever passed (e.g., /view), this produces an invalid URL (/view&res=512 instead of /view?res=512).

Current usage with mapper-constructed URLs is safe, but this could break if the function is reused elsewhere.

♻️ Suggested improvement for robustness
 export function appendCloudResUrl(url: string): string {
   if (!isCloud) return url
-  return url + '&res=512'
+  const separator = url.includes('?') ? '&' : '?'
+  return url + separator + 'res=512'
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/distribution/cloudPreviewUtil.ts` around lines 21 - 24,
appendCloudResUrl currently appends "&res=512" unconditionally which breaks URLs
without query strings; update the function (and usage around isCloud) to detect
whether the input url already has query parameters and prepend either "?" or "&"
accordingly (or use the URL/URLSearchParams API to set/replace the "res" param
robustly), ensuring existing res params are replaced if present.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@src/platform/assets/components/MediaImageTop.vue`:
- Around line 6-11: The template's <img> is using the raw asset.src while
useImage preloads the transformed URL via appendCloudResUrl(asset.src), causing
duplicate requests and mismatch; update the <img> src binding to use the same
transformed URL produced by useImage/appendCloudResUrl so the rendered image and
preloaded image match (refer to useImage, appendCloudResUrl, and the <img>
element currently bound to asset.src), and ensure the same change is applied for
the second instance around lines 36-39 so error state and caching are
consistent.

---

Nitpick comments:
In `@src/platform/distribution/cloudPreviewUtil.ts`:
- Around line 21-24: The function appendCloudResUrl currently appends '&res=512'
unconditionally while appendCloudResParam skips non-image files; update
appendCloudResUrl to either perform the same image-type guard as
appendCloudResParam or add a clarifying JSDoc comment stating this function is
image-only and intended to be used only by image components (e.g.,
MediaImageTop.vue); reference appendCloudResUrl and appendCloudResParam and
ensure the chosen fix documents or enforces that non-image URLs are not
modified.
- Around line 21-24: appendCloudResUrl currently appends "&res=512"
unconditionally which breaks URLs without query strings; update the function
(and usage around isCloud) to detect whether the input url already has query
parameters and prepend either "?" or "&" accordingly (or use the
URL/URLSearchParams API to set/replace the "res" param robustly), ensuring
existing res params are replaced if present.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c52710c7-6c9c-4967-8bf9-f63286c5b734

📥 Commits

Reviewing files that changed from the base of the PR and between 2ccfb82 and c99b2a1.

📒 Files selected for processing (6)
  • src/extensions/core/imageCompare.ts
  • src/platform/assets/components/MediaImageTop.vue
  • src/platform/assets/composables/media/assetMappers.ts
  • src/platform/assets/utils/outputAssetUtil.ts
  • src/platform/distribution/cloudPreviewUtil.ts
  • src/stores/nodeOutputStore.ts
💤 Files with no reviewable changes (2)
  • src/extensions/core/imageCompare.ts
  • src/stores/nodeOutputStore.ts

@github-actions
Copy link

github-actions bot commented Mar 9, 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 125 123 -1%
canvas-idle: layouts 0 0 -100%
canvas-idle: task duration 389ms 385ms -1%
canvas-mouse-sweep: style recalcs 170 176 +4%
canvas-mouse-sweep: layouts 12 12 +0%
canvas-mouse-sweep: task duration 799ms 922ms +15%
dom-widget-clipping: style recalcs 42 42 -1%
dom-widget-clipping: layouts 0 0 -100%
dom-widget-clipping: task duration 350ms 361ms +3%
subgraph-dom-widget-clipping: style recalcs 73 73 +0%
subgraph-dom-widget-clipping: layouts 0 0 +0%
subgraph-dom-widget-clipping: task duration 409ms 403ms -1%
subgraph-idle: style recalcs 121 120 -1%
subgraph-idle: layouts 0 0 +0%
subgraph-idle: task duration 371ms 373ms +1%
subgraph-mouse-sweep: style recalcs 160 166 +4%
subgraph-mouse-sweep: layouts 16 16 +0%
subgraph-mouse-sweep: task duration 777ms 874ms +13%
Raw data
{
  "timestamp": "2026-03-09T23:00:38.263Z",
  "gitSha": "793f54df2fd1f6c9c2f7cb0d0e665734aaa7c73c",
  "branch": "austin/real-previews",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2040.616,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 17.286999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 375.082,
      "heapDeltaBytes": -3617044
    },
    {
      "name": "canvas-idle",
      "durationMs": 2027.356999999995,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 20.333000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 389.56800000000004,
      "heapDeltaBytes": -3199884
    },
    {
      "name": "canvas-idle",
      "durationMs": 2028.6729999999693,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 20.892,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 390.421,
      "heapDeltaBytes": -3508016
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2027.9050000000325,
      "styleRecalcs": 183,
      "styleRecalcDurationMs": 52.91700000000001,
      "layouts": 12,
      "layoutDurationMs": 3.6809999999999996,
      "taskDurationMs": 957.115,
      "heapDeltaBytes": -3103172
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1882.1389999999951,
      "styleRecalcs": 167,
      "styleRecalcDurationMs": 48.132,
      "layouts": 12,
      "layoutDurationMs": 3.261,
      "taskDurationMs": 841.754,
      "heapDeltaBytes": -3052540
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2022.8159999999775,
      "styleRecalcs": 179,
      "styleRecalcDurationMs": 48.119,
      "layouts": 12,
      "layoutDurationMs": 3.198,
      "taskDurationMs": 967.8489999999999,
      "heapDeltaBytes": -2926368
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 616.0060000000271,
      "styleRecalcs": 44,
      "styleRecalcDurationMs": 13.287,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 394.549,
      "heapDeltaBytes": 7860096
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 566.4669999999887,
      "styleRecalcs": 43,
      "styleRecalcDurationMs": 13.171000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 349.47,
      "heapDeltaBytes": 7065744
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 547.2990000000095,
      "styleRecalcs": 39,
      "styleRecalcDurationMs": 12.749,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 338.731,
      "heapDeltaBytes": 6939128
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 568.127000000004,
      "styleRecalcs": 71,
      "styleRecalcDurationMs": 13.934999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 385.53600000000006,
      "heapDeltaBytes": 15237876
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 594.4079999999872,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 15.376000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 414.257,
      "heapDeltaBytes": -8707364
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 613.6720000000082,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 14.987,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 409.6810000000001,
      "heapDeltaBytes": -8885124
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1993.423000000007,
      "styleRecalcs": 120,
      "styleRecalcDurationMs": 19.205,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 380.535,
      "heapDeltaBytes": -2856368
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2005.5570000000102,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 18.151,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 368.89900000000006,
      "heapDeltaBytes": -3623564
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1996.7920000000277,
      "styleRecalcs": 120,
      "styleRecalcDurationMs": 18.493999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 370.92,
      "heapDeltaBytes": -3677524
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1979.9539999999638,
      "styleRecalcs": 171,
      "styleRecalcDurationMs": 51.98800000000001,
      "layouts": 16,
      "layoutDurationMs": 4.2459999999999996,
      "taskDurationMs": 945.438,
      "heapDeltaBytes": -5189940
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1679.5740000000023,
      "styleRecalcs": 154,
      "styleRecalcDurationMs": 43.598,
      "layouts": 16,
      "layoutDurationMs": 4.161,
      "taskDurationMs": 712.453,
      "heapDeltaBytes": -5206716
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 2007.840999999985,
      "styleRecalcs": 173,
      "styleRecalcDurationMs": 53.652,
      "layouts": 16,
      "layoutDurationMs": 4.258000000000001,
      "taskDurationMs": 964.959,
      "heapDeltaBytes": -5142468
    }
  ]
}

@dosubot dosubot bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Mar 9, 2026

export function appendCloudResUrl(url: string): string {
if (!isCloud) return url
return url + '&res=512'
Copy link
Contributor

Choose a reason for hiding this comment

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

The URLSearchParams piece is a guard for when the asset already has a res set in the URL sent by the server

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Appreciate the catch. I had hoped to make this a smaller PR than reworking the assetsSchema to pass both.

Will start on the nicer fix.

@AustinMroz AustinMroz added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.41 Backport PRs for core 1.41 cloud/1.41 Backport PRs for cloud 1.41 labels Mar 9, 2026
@AustinMroz AustinMroz merged commit af5a720 into main Mar 9, 2026
42 of 45 checks passed
@AustinMroz AustinMroz deleted the austin/real-previews branch March 9, 2026 23:03
github-actions bot pushed a commit that referenced this pull request Mar 9, 2026
Thumbnail downscaling is currently being used in more places than it
should be.
- Nodes which display images will display incorrect resolution
indicators
<img width="255" height="372" alt="image"
src="https://github.com/user-attachments/assets/674790b6-04c8-4db0-84c2-2fa2dbaf123d"
/> <img width="255" height="372" alt="image"
src="https://github.com/user-attachments/assets/1dbe751b-7462-4408-9236-9446b005f5fc"
/>

This is particularly confusing with output nodes, which claim the output
is not of the intended resolution
- The "Download Image" and "Open Image" context menu actions will
incorrectly download the downscaled thumbnail.
- The assets panel will incorrectly display the thumbnail resolution as
the resolution of the output
- The lightbox (zoom) of an image will incorrectly display a downscaled
thumbnail.

This PR is a quick workaround to staunch the major problems
- Nodes always display full previews.
- Resolution downscaling is applied on the assert card, not on the
assetItem itself
- Due to implementation, this means that asset cards will still
incorrectly show the resolution of the thumbnail instead of the size of
the full image.

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
github-actions bot pushed a commit that referenced this pull request Mar 9, 2026
Thumbnail downscaling is currently being used in more places than it
should be.
- Nodes which display images will display incorrect resolution
indicators
<img width="255" height="372" alt="image"
src="https://github.com/user-attachments/assets/674790b6-04c8-4db0-84c2-2fa2dbaf123d"
/> <img width="255" height="372" alt="image"
src="https://github.com/user-attachments/assets/1dbe751b-7462-4408-9236-9446b005f5fc"
/>

This is particularly confusing with output nodes, which claim the output
is not of the intended resolution
- The "Download Image" and "Open Image" context menu actions will
incorrectly download the downscaled thumbnail.
- The assets panel will incorrectly display the thumbnail resolution as
the resolution of the output
- The lightbox (zoom) of an image will incorrectly display a downscaled
thumbnail.

This PR is a quick workaround to staunch the major problems
- Nodes always display full previews.
- Resolution downscaling is applied on the assert card, not on the
assetItem itself
- Due to implementation, this means that asset cards will still
incorrectly show the resolution of the thumbnail instead of the size of
the full image.

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
@comfy-pr-bot
Copy link
Member

@AustinMroz Successfully backported to #9682

@comfy-pr-bot
Copy link
Member

@AustinMroz Successfully backported to #9683

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Mar 9, 2026
AustinMroz added a commit that referenced this pull request Mar 9, 2026
Backport of #9678 to `cloud/1.41`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9683-backport-cloud-1-41-Use-preview-downscaling-in-fewer-places-31e6d73d3650816aac69c4d1f01fa35a)
by [Unito](https://www.unito.io)

Co-authored-by: AustinMroz <austin@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
AustinMroz added a commit that referenced this pull request Mar 9, 2026
Backport of #9678 to `core/1.41`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9682-backport-core-1-41-Use-preview-downscaling-in-fewer-places-31e6d73d365081fb845ff568d2088070)
by [Unito](https://www.unito.io)

Co-authored-by: AustinMroz <austin@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
DrJKL added a commit that referenced this pull request Mar 10, 2026
Thumbnail downscaling is currently being used in more places than it
should be.
- Nodes which display images will display incorrect resolution
indicators
<img width="255" height="372" alt="image"
src="https://github.com/user-attachments/assets/674790b6-04c8-4db0-84c2-2fa2dbaf123d"
/> <img width="255" height="372" alt="image"
src="https://github.com/user-attachments/assets/1dbe751b-7462-4408-9236-9446b005f5fc"
/>

This is particularly confusing with output nodes, which claim the output
is not of the intended resolution
- The "Download Image" and "Open Image" context menu actions will
incorrectly download the downscaled thumbnail.
- The assets panel will incorrectly display the thumbnail resolution as
the resolution of the output
- The lightbox (zoom) of an image will incorrectly display a downscaled
thumbnail.

This PR is a quick workaround to staunch the major problems
- Nodes always display full previews.
- Resolution downscaling is applied on the assert card, not on the
assetItem itself
- Due to implementation, this means that asset cards will still
incorrectly show the resolution of the thumbnail instead of the size of
the full image.

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.41 Backport PRs for cloud 1.41 core/1.41 Backport PRs for core 1.41 size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants