Skip to content

fix: invalidate loader node dropdown cache after model asset deletion#8434

Open
christian-byrne wants to merge 3 commits intomainfrom
fix/asset-deletion-invalidation
Open

fix: invalidate loader node dropdown cache after model asset deletion#8434
christian-byrne wants to merge 3 commits intomainfrom
fix/asset-deletion-invalidation

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Jan 29, 2026

Summary

When deleting a model asset (checkpoint, lora, etc.), the loader node dropdowns now update correctly by invalidating the category-keyed cache.

Problem

After deleting a model asset in the asset browser, the loader node dropdowns (e.g., CheckpointLoaderSimple, LoraLoader) still showed the deleted model. Users had to refresh or re-open the dropdown to see the updated list.

Solution

After successful asset deletion, check each deleted asset's tags for model categories (checkpoints, loras, etc.) and call assetsStore.invalidateCategory() for each affected category. This triggers a refetch when the dropdown is next accessed.

Changes

  • In useMediaAssetActions.ts:

    • After deletion, iterate through deleted assets' tags
    • Check if each tag corresponds to a model category using modelToNodeStore.getAllNodeProviders()
    • Call invalidateCategory() for each affected category
  • In useMediaAssetActions.test.ts:

    • Added mocks for useAssetsStore and useModelToNodeStore
    • Added tests for deletion invalidation behavior

Testing

  • Added unit tests verifying:
    • Model cache is invalidated when deleting model assets
    • Multiple categories are invalidated when deleting multiple assets
    • Non-model assets (input, output) don't trigger invalidation

Part of Stack

This is PR 2 of 2 in a stacked PR series:

  1. PR 1: Refactor asset cache to category-keyed (architectural improvement)
  2. This PR: Fix deletion invalidation using the clean architecture

┆Issue is synchronized with this Notion page by Unito

Summary by CodeRabbit

  • Bug Fixes

    • Improved model cache invalidation after asset deletions — only relevant model categories are invalidated and non-model assets are ignored.
    • Fixed edge-rendering behavior so reroutes are cleared correctly in the canvas.
  • Chores

    • Added category-aware cache management and targeted refreshes for model assets.
  • Tests

    • Expanded tests for cache invalidation, category handling, workflow interactions, and related mocks.

@christian-byrne christian-byrne requested a review from a team as a code owner January 29, 2026 21:06
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jan 29, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 29, 2026

📝 Walkthrough

Walkthrough

After asset deletions, the action collects model categories from asset tags (excluding 'models', 'input', 'output') and calls assetsStore.invalidateModelsForCategory(...) per category to invalidate cloud model caches; supporting store methods and tests were added, and tests updated to use createTestingPinia.

Changes

Cohort / File(s) Summary
Asset deletion logic
src/platform/assets/composables/useMediaAssetActions.ts
Adds EXCLUDED_TAGS and, in delete flow, computes model categories from asset tags (excluding those tags) and invokes assetsStore.invalidateModelsForCategory(...) after history/inputs updates.
Delete flow tests
src/platform/assets/composables/useMediaAssetActions.test.ts
Switches to createTestingPinia, adds hoisted mocks and extensive store/service/api/user mocks, and adds tests validating model-cache invalidation for single/multiple deletions and non-model assets.
Assets store API & cache
src/stores/assetsStore.ts
Adds hasCategory(category: string) and invalidateModelsForCategory(category: string) to cloud model cache surface and exposes them in the public API; implements invalidation of category, tag-prefixed, and tag:models caches.
Assets store tests
src/stores/assetsStore.test.ts
Extends createMockAsset to accept tags and adds tests for hasCategory behavior and invalidateModelsForCategory effects (category clearing, tag-based clearing, unknown categories).
Canvas minor fix
src/lib/litegraph/src/LGraphCanvas.ts
Fixes a private field reference from #visibleReroutes to _visibleReroutes to match the declared member.
Misc tests/config
manifest_file, package.json
Small referenced test/config metadata changes in the diff.

Sequence Diagram

sequenceDiagram
    actor User
    participant MediaAssetActions as "useMediaAssetActions"
    participant AssetService as "Asset Service (API)"
    participant ModelToNodeStore as "modelToNodeStore"
    participant AssetsStore as "assetsStore"

    User->>MediaAssetActions: request deleteAssets(assetIds)
    MediaAssetActions->>AssetService: call delete APIs
    AssetService-->>MediaAssetActions: deletion confirmed
    MediaAssetActions->>MediaAssetActions: update history & inputs
    MediaAssetActions->>MediaAssetActions: extract tags -> modelCategories (exclude: models,input,output)
    loop per category
        MediaAssetActions->>ModelToNodeStore: check providers/tags for category
        ModelToNodeStore-->>MediaAssetActions: provider/tag info
        MediaAssetActions->>AssetsStore: invalidateModelsForCategory(category)
        AssetsStore-->>MediaAssetActions: invalidation complete
    end
    MediaAssetActions-->>User: deletion completed
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

I'm a rabbit in the cache-clearing glen,
I nibble tags and hop again. 🐇
Deleted files tumble from the pile,
I tidy keys and rest for a while.
New models wake — a bright, neat smile.

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.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 accurately summarizes the main change: fixing cache invalidation for loader node dropdowns after model asset deletion.
Description check ✅ Passed The description provides comprehensive coverage of the template sections: clear summary, detailed problem/solution explanation, and specific implementation changes with testing coverage.

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

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/asset-deletion-invalidation

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

@github-actions
Copy link

github-actions bot commented Jan 29, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 506 passed, 0 failed, 1 flaky, 8 skipped (Total: 515)

❌ Failed Tests

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

@github-actions
Copy link

github-actions bot commented Jan 29, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/04/2026, 01:45:45 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

🔧 Auto-fixes Applied

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

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

Changes made:

  • ESLint auto-fixes
  • Oxfmt formatting

@christian-byrne christian-byrne force-pushed the fix/asset-deletion-invalidation branch 2 times, most recently from aa09287 to 3e694a9 Compare January 29, 2026 22:52
DrJKL pushed a commit that referenced this pull request Jan 30, 2026
…8433)

## Summary

Refactors the model assets cache in `assetsStore.ts` to be keyed by
category (e.g., 'checkpoints', 'loras') instead of nodeType (e.g.,
'CheckpointLoaderSimple').

## Changes

- Rename `modelStateByKey` to `modelStateByCategory`
- Add `resolveCategory()` helper to translate nodeType to category for
cache lookup
- Multiple node types sharing the same category now share one cache
entry
- Add `invalidateCategory()` method for cache invalidation
- Maintain backwards-compatible public API accepting nodeType
- Update tests for new category-keyed behavior

## Benefits

1. **Deduplication**: Same category = same cache entry = single API call
2. **Simple invalidation**: Delete asset with tag 'checkpoints' then
invalidate cache
3. **Cleaner mental model**: Store to View reactive flow works naturally

## Testing

- All existing tests pass with updates
- Added new tests for category-keyed cache sharing, invalidateCategory,
and unknown node type handling

## Part of Stack

This is **PR 1 of 2** in a stacked PR series:
1. **This PR**: Refactor asset cache to category-keyed (architectural
improvement)
2. **[PR 2
#8434](#8434: Fix
deletion invalidation

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8433-refactor-change-asset-cache-from-nodeType-keyed-to-category-keyed-2f76d73d365081999b7fda12c9706ab5)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Subagent 5 <subagent@example.com>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: GitHub Action <action@github.com>
Base automatically changed from refactor/asset-cache-category-keyed to main January 30, 2026 00:03
@christian-byrne christian-byrne force-pushed the fix/asset-deletion-invalidation branch from 3e694a9 to 630d964 Compare January 30, 2026 01:15
@christian-byrne christian-byrne marked this pull request as ready for review January 30, 2026 01:15
@github-actions
Copy link

github-actions bot commented Jan 30, 2026

Bundle Size Report

Summary

  • Raw size: 20.2 MB baseline 20.2 MB — 🔴 +1.12 kB
  • Gzip: 4.32 MB baseline 4.32 MB — 🔴 +127 B
  • Brotli: 3.34 MB baseline 3.34 MB — 🔴 +45 B
  • Bundles: 233 current • 233 baseline • 107 added / 107 removed

Category Glance
Data & Services 🔴 +1.12 kB (2.1 MB) · Vendor & Third-Party ⚪ 0 B (9.37 MB) · Other ⚪ 0 B (7.08 MB) · Graph Workspace ⚪ 0 B (838 kB) · Panels & Settings ⚪ 0 B (410 kB) · Utilities & Hooks ⚪ 0 B (234 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CShXzA9S.js (removed) 22.5 kB 🟢 -22.5 kB 🟢 -7.18 kB 🟢 -6.25 kB
assets/index-D0Op7Lqr.js (new) 22.5 kB 🔴 +22.5 kB 🔴 +7.18 kB 🔴 +6.23 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-8ywluF5A.js (removed) 838 kB 🟢 -838 kB 🟢 -180 kB 🟢 -137 kB
assets/GraphView-eaG7605I.js (new) 838 kB 🔴 +838 kB 🔴 +180 kB 🔴 +137 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-3x7cltYB.js (removed) 15.8 kB 🟢 -15.8 kB 🟢 -3.46 kB 🟢 -2.93 kB
assets/CloudSurveyView-DZXLL7Ig.js (new) 15.8 kB 🔴 +15.8 kB 🔴 +3.46 kB 🔴 +2.93 kB
assets/CloudLoginView-B-8jK1QM.js (new) 10 kB 🔴 +10 kB 🔴 +2.93 kB 🔴 +2.55 kB
assets/CloudLoginView-C03EVaqd.js (removed) 10 kB 🟢 -10 kB 🟢 -2.93 kB 🟢 -2.57 kB
assets/UserCheckView-BmR4qwFT.js (new) 8.39 kB 🔴 +8.39 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/UserCheckView-YVRgi8aX.js (removed) 8.39 kB 🟢 -8.39 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/CloudSignupView-C9RUwOZZ.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.31 kB 🔴 +2.02 kB
assets/CloudSignupView-irb1bIb2.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.31 kB 🟢 -2.03 kB
assets/CloudLayoutView-DH4c819g.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.11 kB 🔴 +1.83 kB
assets/CloudLayoutView-JE74sr0r.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.12 kB 🟢 -1.83 kB
assets/CloudForgotPasswordView-BtVQn_Uv.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.94 kB 🔴 +1.71 kB
assets/CloudForgotPasswordView-DE48jpWN.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.94 kB 🟢 -1.7 kB
assets/CloudAuthTimeoutView-_li03Cza.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/CloudAuthTimeoutView-ClXxxBs_.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/CloudSubscriptionRedirectView-BjDyMoHp.js (removed) 4.71 kB 🟢 -4.71 kB 🟢 -1.77 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-DAfzB7qz.js (new) 4.71 kB 🔴 +4.71 kB 🔴 +1.77 kB 🔴 +1.57 kB
assets/UserSelectView-6eEjpNTo.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.63 kB 🟢 -1.46 kB
assets/UserSelectView-C3EhNff4.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.64 kB 🔴 +1.46 kB
assets/CloudSorryContactSupportView-BPXBOTez.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-ncetNFDR.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-BFNV8dPE.js (removed) 26.9 kB 🟢 -26.9 kB 🟢 -5.66 kB 🟢 -4.96 kB
assets/WorkspacePanel-BUhooTX8.js (new) 26.9 kB 🔴 +26.9 kB 🔴 +5.66 kB 🔴 +4.96 kB
assets/SecretsPanel-Ccb77NNa.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.27 kB 🔴 +4.63 kB
assets/SecretsPanel-ClJUgwj1.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.27 kB 🟢 -4.62 kB
assets/LegacyCreditsPanel-BppVZakZ.js (removed) 20.8 kB 🟢 -20.8 kB 🟢 -5.62 kB 🟢 -4.93 kB
assets/LegacyCreditsPanel-ByRO2V-C.js (new) 20.8 kB 🔴 +20.8 kB 🔴 +5.62 kB 🔴 +4.94 kB
assets/SubscriptionPanel-BEjrDAAO.js (new) 18.8 kB 🔴 +18.8 kB 🔴 +4.76 kB 🔴 +4.21 kB
assets/SubscriptionPanel-CZGVKjC6.js (removed) 18.8 kB 🟢 -18.8 kB 🟢 -4.76 kB 🟢 -4.21 kB
assets/KeybindingPanel-DEDr7kJx.js (new) 12.6 kB 🔴 +12.6 kB 🔴 +3.62 kB 🔴 +3.21 kB
assets/KeybindingPanel-DEn-LNMa.js (removed) 12.6 kB 🟢 -12.6 kB 🟢 -3.63 kB 🟢 -3.22 kB
assets/ExtensionPanel-D1F77vOR.js (new) 9.49 kB 🔴 +9.49 kB 🔴 +2.69 kB 🔴 +2.39 kB
assets/ExtensionPanel-DIyd5Jqb.js (removed) 9.49 kB 🟢 -9.49 kB 🟢 -2.69 kB 🟢 -2.38 kB
assets/AboutPanel-2at5BZCE.js (removed) 8.62 kB 🟢 -8.62 kB 🟢 -2.45 kB 🟢 -2.21 kB
assets/AboutPanel-D3hHxJz3.js (new) 8.62 kB 🔴 +8.62 kB 🔴 +2.46 kB 🔴 +2.21 kB
assets/ServerConfigPanel-C8kYRCdm.js (new) 6.64 kB 🔴 +6.64 kB 🔴 +2.15 kB 🔴 +1.93 kB
assets/ServerConfigPanel-CdhIkBnZ.js (removed) 6.64 kB 🟢 -6.64 kB 🟢 -2.16 kB 🟢 -1.93 kB
assets/UserPanel-DtpS1NIT.js (new) 6.28 kB 🔴 +6.28 kB 🔴 +2.02 kB 🔴 +1.78 kB
assets/UserPanel-ISolmwIZ.js (removed) 6.28 kB 🟢 -6.28 kB 🟢 -2.02 kB 🟢 -1.78 kB
assets/cloudRemoteConfig-CecEAIzm.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -700 B 🟢 -608 B
assets/cloudRemoteConfig-CFKqnR7K.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +700 B 🔴 +602 B
assets/refreshRemoteConfig-5cNBUDs7.js (removed) 1.13 kB 🟢 -1.13 kB 🟢 -514 B 🟢 -449 B
assets/refreshRemoteConfig-DAnMb-5_.js (new) 1.13 kB 🔴 +1.13 kB 🔴 +511 B 🔴 +447 B
assets/refreshRemoteConfig-4lP31fUM.js (new) 345 B 🔴 +345 B 🔴 +205 B 🔴 +205 B
assets/refreshRemoteConfig-CduUeBYj.js (removed) 345 B 🟢 -345 B 🟢 -208 B 🟢 -201 B
assets/config-HAvaVehF.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/remoteConfig-CUBB_j_I.js 581 B 581 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BgcR6REE.js 25 kB 25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BmEXiKRV.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BNs5rnMt.js 24.1 kB 24.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C5jqELHS.js 23.6 kB 23.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CKCscONF.js 28.1 kB 28.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CzcL_U24.js 20.8 kB 20.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D95NIw0v.js 26.8 kB 26.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DmYc-PH9.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DQe4OZm2.js 25.7 kB 25.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dxocpd_-.js 20.3 kB 20.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-f2yAwEpW.js 23.3 kB 23.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-CdmBhjUk.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +992 B
assets/auth-jRF-s1_l.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -990 B
assets/SignUpForm-btQkTEhV.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/SignUpForm-gRLGs062.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/UpdatePasswordContent-DvU03ib6.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -949 B
assets/UpdatePasswordContent-Dz0Gg5mP.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +950 B
assets/firebaseAuthStore-DlwgR9ad.js (new) 790 B 🔴 +790 B 🔴 +388 B 🔴 +343 B
assets/firebaseAuthStore-wZqlmfJB.js (removed) 790 B 🟢 -790 B 🟢 -390 B 🟢 -347 B
assets/auth-B5uHj2K4.js (new) 347 B 🔴 +347 B 🔴 +221 B 🔴 +187 B
assets/auth-B8MpMyH-.js (removed) 347 B 🟢 -347 B 🟢 -221 B 🟢 -190 B
assets/PasswordFields-BAi3GPM-.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-B0BztYjc.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-DJiMCzEE.js (removed) 2.68 kB 🟢 -2.68 kB 🟢 -1.32 kB 🟢 -1.17 kB
assets/useSubscriptionDialog-DPQW8hOs.js (new) 2.68 kB 🔴 +2.68 kB 🔴 +1.32 kB 🔴 +1.17 kB
assets/useSubscriptionDialog-CoG6g_t-.js (new) 783 B 🔴 +783 B 🔴 +387 B 🔴 +338 B
assets/useSubscriptionDialog-pnLxLsAs.js (removed) 783 B 🟢 -783 B 🟢 -389 B 🟢 -344 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-BT6sU6kK.js (removed) 9.9 kB 🟢 -9.9 kB 🟢 -3.41 kB 🟢 -3 kB
assets/useTerminalTabs-CqC0Huyl.js (new) 9.9 kB 🔴 +9.9 kB 🔴 +3.4 kB 🔴 +2.99 kB
assets/ComfyQueueButton-ClvGDygu.js (removed) 7.13 kB 🟢 -7.13 kB 🟢 -2.31 kB 🟢 -2.06 kB
assets/ComfyQueueButton-Dt0OepgO.js (new) 7.13 kB 🔴 +7.13 kB 🔴 +2.31 kB 🔴 +2.06 kB
assets/SubscribeButton-BT9OWusp.js (removed) 3.68 kB 🟢 -3.68 kB 🟢 -1.38 kB 🟢 -1.21 kB
assets/SubscribeButton-DfH-Xjrs.js (new) 3.68 kB 🔴 +3.68 kB 🔴 +1.38 kB 🔴 +1.21 kB
assets/cloudFeedbackTopbarButton-BU8xdWb6.js (removed) 1.6 kB 🟢 -1.6 kB 🟢 -857 B 🟢 -753 B
assets/cloudFeedbackTopbarButton-DfIOfB1r.js (new) 1.6 kB 🔴 +1.6 kB 🔴 +857 B 🔴 +734 B
assets/ComfyQueueButton-D_4LsbVT.js (removed) 795 B 🟢 -795 B 🟢 -396 B 🟢 -352 B
assets/ComfyQueueButton-D2Oco6xo.js (new) 795 B 🔴 +795 B 🔴 +394 B 🔴 +347 B
assets/Button-ChqYCdrL.js 3 kB 3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-DtjkqbcY.js 1.2 kB 1.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-BsZTG314.js 7.52 kB 7.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-Dtdiv1Hu.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DVfWCi_V.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.1 MB (baseline 2.1 MB) • 🔴 +1.12 kB

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-BgdJrC1c.js (new) 1.3 MB 🔴 +1.3 MB 🔴 +298 kB 🔴 +232 kB
assets/dialogService-DcoaL1n_.js (removed) 1.3 MB 🟢 -1.3 MB 🟢 -298 kB 🟢 -231 kB
assets/api-BDAkdqpD.js (new) 640 kB 🔴 +640 kB 🔴 +144 kB 🔴 +115 kB
assets/api-FZTUsZ6b.js (removed) 640 kB 🟢 -640 kB 🟢 -144 kB 🟢 -115 kB
assets/load3dService-aQlDhLLS.js (removed) 91.1 kB 🟢 -91.1 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/load3dService-DskvM_g6.js (new) 91.1 kB 🔴 +91.1 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/teamWorkspaceStore-Cg1xTOi6.js (new) 27.1 kB 🔴 +27.1 kB 🔴 +6.12 kB 🔴 +5.41 kB
assets/teamWorkspaceStore-D78reazS.js (removed) 27.1 kB 🟢 -27.1 kB 🟢 -6.12 kB 🟢 -5.42 kB
assets/systemStatsStore-C530gcfU.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.29 kB 🟢 -3.77 kB
assets/systemStatsStore-Cz2dDRkg.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +4.29 kB 🔴 +3.77 kB
assets/releaseStore-5mq6I30q.js (removed) 8.14 kB 🟢 -8.14 kB 🟢 -2.24 kB 🟢 -1.97 kB
assets/releaseStore-DqGhM64X.js (new) 8.14 kB 🔴 +8.14 kB 🔴 +2.24 kB 🔴 +1.97 kB
assets/keybindingService-BQ0ggp4_.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/keybindingService-DLmOtcfz.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.71 kB 🟢 -1.47 kB
assets/bootstrapStore-Dshj_yNr.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +882 B 🔴 +814 B
assets/bootstrapStore-UArSSIUf.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -882 B 🟢 -811 B
assets/userStore-BrdK2ub-.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -720 B 🟢 -634 B
assets/userStore-CbbuzgLd.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +719 B 🔴 +635 B
assets/audioService-1Rmn2--_.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -845 B 🟢 -726 B
assets/audioService-C5GMJVpB.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +847 B 🔴 +731 B
assets/releaseStore-ClxIgnas.js (new) 762 B 🔴 +762 B 🔴 +386 B 🔴 +331 B
assets/releaseStore-GX3fzbPD.js (removed) 762 B 🟢 -762 B 🟢 -387 B 🟢 -336 B
assets/dialogStore-D2gUGUn6.js 4.1 kB 4.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-DB58Z5s2.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 11 added / 11 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-CAdEmbEC.js (removed) 177 kB 🟢 -177 kB 🟢 -38.9 kB 🟢 -32.4 kB
assets/useConflictDetection-Cq_Mws-_.js (new) 177 kB 🔴 +177 kB 🔴 +38.9 kB 🔴 +32.3 kB
assets/useLoad3d-68nROLM8.js (new) 14.4 kB 🔴 +14.4 kB 🔴 +3.56 kB 🔴 +3.14 kB
assets/useLoad3d-Q4mSd74N.js (removed) 14.4 kB 🟢 -14.4 kB 🟢 -3.56 kB 🟢 -3.14 kB
assets/useLoad3dViewer-B0zK6fBu.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.16 kB 🟢 -2.8 kB
assets/useLoad3dViewer-C6ef5B56.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useErrorHandling-BdjAGmhc.js (new) 4.26 kB 🔴 +4.26 kB 🔴 +1.34 kB 🔴 +1.18 kB
assets/useErrorHandling-CAZm5w2b.js (removed) 4.26 kB 🟢 -4.26 kB 🟢 -1.34 kB 🟢 -1.18 kB
assets/useWorkspaceUI-Ch9g4xeg.js (new) 3.16 kB 🔴 +3.16 kB 🔴 +882 B 🔴 +763 B
assets/useWorkspaceUI-x8hNeFaB.js (removed) 3.16 kB 🟢 -3.16 kB 🟢 -883 B 🟢 -764 B
assets/useSubscriptionActions-BfTPUU_q.js (removed) 1.76 kB 🟢 -1.76 kB 🟢 -753 B 🟢 -650 B
assets/useSubscriptionActions-DynUII0J.js (new) 1.76 kB 🔴 +1.76 kB 🔴 +754 B 🔴 +651 B
assets/subscriptionCheckoutUtil-B5fCv7nM.js (removed) 1.75 kB 🟢 -1.75 kB 🟢 -783 B 🟢 -686 B
assets/subscriptionCheckoutUtil-DM-ek6Jx.js (new) 1.75 kB 🔴 +1.75 kB 🔴 +781 B 🔴 +683 B
assets/useSubscriptionCredits-CYdOg7cU.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +500 B 🔴 +451 B
assets/useSubscriptionCredits-iu_nZwRO.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -500 B 🟢 -438 B
assets/useLoad3d-BdPhGQ_H.js (new) 861 B 🔴 +861 B 🔴 +425 B 🔴 +379 B
assets/useLoad3d-CS5ldyBv.js (removed) 861 B 🟢 -861 B 🟢 -428 B 🟢 -382 B
assets/audioUtils-BenGzUcw.js (removed) 858 B 🟢 -858 B 🟢 -497 B 🟢 -421 B
assets/audioUtils-DPoetsGl.js (new) 858 B 🔴 +858 B 🔴 +497 B 🔴 +420 B
assets/useLoad3dViewer-B7FBAVvx.js (removed) 840 B 🟢 -840 B 🟢 -412 B 🟢 -374 B
assets/useLoad3dViewer-jd2PHjXm.js (new) 840 B 🔴 +840 B 🔴 +409 B 🔴 +369 B
assets/useCurrentUser-BGBSVSOa.js (new) 724 B 🔴 +724 B 🔴 +376 B 🔴 +326 B
assets/useCurrentUser-CKbgW21s.js (removed) 724 B 🟢 -724 B 🟢 -378 B 🟢 -328 B
assets/_plugin-vue_export-helper-CAbbkOlw.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-FW_Ghng2.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-Djb4sHrV.js 524 B 524 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Cc2LFa5s.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/networkUtil-Du2a_n7V.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-DwBAnKr-.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-ihQ2636T.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-Br3OkPS9.js 1.63 kB 1.63 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-D0w6WYH0.js 71.6 kB 71.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-CIdI9Yl4.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-CLEC0CcJ.js 842 kB 842 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-C6_f776o.js 132 kB 132 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-BkVHYrKV.js 102 kB 102 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-DPcKX1Hx.js 2.16 MB 2.16 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-Dw8RivU1.js 1.74 MB 1.74 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CPrt7lw0.js 240 kB 240 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-BVA5kbUC.js 183 kB 183 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-CJhOuqDg.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CvX7mojg.js 632 kB 632 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-BBP9kkTE.js 312 kB 312 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-CS5mlw4Q.js 111 kB 111 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-DOEEpxXk.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-BtrvIr1x.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-gAWmQIF-.js 110 kB 110 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.08 MB (baseline 7.08 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-DNew2dbc.js (removed) 71.4 kB 🟢 -71.4 kB 🟢 -18.4 kB 🟢 -15.8 kB
assets/core-s9feJAES.js (new) 71.4 kB 🔴 +71.4 kB 🔴 +18.4 kB 🔴 +15.8 kB
assets/groupNode-Dq3wlGIv.js (new) 70.9 kB 🔴 +70.9 kB 🔴 +17.5 kB 🔴 +15.4 kB
assets/groupNode-NUD1aTZv.js (removed) 70.9 kB 🟢 -70.9 kB 🟢 -17.5 kB 🟢 -15.4 kB
assets/WidgetSelect-DLB_vjQx.js (new) 56.6 kB 🔴 +56.6 kB 🔴 +12 kB 🔴 +10.4 kB
assets/WidgetSelect-IqXOof5n.js (removed) 56.6 kB 🟢 -56.6 kB 🟢 -12 kB 🟢 -10.4 kB
assets/SettingDialogContent-ByXeaPzW.js (removed) 30.8 kB 🟢 -30.8 kB 🟢 -8 kB 🟢 -7.06 kB
assets/SettingDialogContent-D3N4fzAu.js (new) 30.8 kB 🔴 +30.8 kB 🔴 +8.01 kB 🔴 +7.04 kB
assets/Load3DControls-Cq_XkWga.js (new) 30.8 kB 🔴 +30.8 kB 🔴 +5.33 kB 🔴 +4.65 kB
assets/Load3DControls-DlZVZyY2.js (removed) 30.8 kB 🟢 -30.8 kB 🟢 -5.33 kB 🟢 -4.64 kB
assets/SubscriptionRequiredDialogContent-JdRmO8ya.js (new) 25.4 kB 🔴 +25.4 kB 🔴 +6.36 kB 🔴 +5.57 kB
assets/SubscriptionRequiredDialogContent-tt7RdYZH.js (removed) 25.4 kB 🟢 -25.4 kB 🟢 -6.36 kB 🟢 -5.57 kB
assets/Load3dViewerContent--WrRqg7k.js (new) 23.2 kB 🔴 +23.2 kB 🔴 +5.24 kB 🔴 +4.54 kB
assets/Load3dViewerContent-CSkyfjfF.js (removed) 23.2 kB 🟢 -23.2 kB 🟢 -5.24 kB 🟢 -4.54 kB
assets/WidgetImageCrop-CRvugx8O.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.51 kB 🔴 +4.85 kB
assets/WidgetImageCrop-DUCmVSeg.js (removed) 22.3 kB 🟢 -22.3 kB 🟢 -5.51 kB 🟢 -4.85 kB
assets/FormItem-CN4gOlCV.js (removed) 20.2 kB 🟢 -20.2 kB 🟢 -4.87 kB 🟢 -4.25 kB
assets/FormItem-D8-i0bmn.js (new) 20.2 kB 🔴 +20.2 kB 🔴 +4.87 kB 🔴 +4.25 kB
assets/CurrentUserPopoverWorkspace-Bm-xUahU.js (removed) 19.7 kB 🟢 -19.7 kB 🟢 -4.74 kB 🟢 -4.22 kB
assets/CurrentUserPopoverWorkspace-DJa76smX.js (new) 19.7 kB 🔴 +19.7 kB 🔴 +4.74 kB 🔴 +4.22 kB
assets/SignInContent-CDWs0HY4.js (removed) 19 kB 🟢 -19 kB 🟢 -4.8 kB 🟢 -4.2 kB
assets/SignInContent-z-sE-5DZ.js (new) 19 kB 🔴 +19 kB 🔴 +4.8 kB 🔴 +4.2 kB
assets/WidgetRecordAudio-CMoNwfZa.js (removed) 17.2 kB 🟢 -17.2 kB 🟢 -4.92 kB 🟢 -4.4 kB
assets/WidgetRecordAudio-CVLtQQuh.js (new) 17.2 kB 🔴 +17.2 kB 🔴 +4.92 kB 🔴 +4.4 kB
assets/TopUpCreditsDialogContent-C9VN4bu1.js (new) 16.9 kB 🔴 +16.9 kB 🔴 +4.8 kB 🔴 +4.24 kB
assets/TopUpCreditsDialogContent-DvtzOwoj.js (removed) 16.9 kB 🟢 -16.9 kB 🟢 -4.8 kB 🟢 -4.25 kB
assets/Load3D-65U7QTuj.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.04 kB 🟢 -3.51 kB
assets/Load3D-BJB6rfpS.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.04 kB 🔴 +3.51 kB
assets/MissingModelsWarning-Csx5A4v4.js (removed) 16.1 kB 🟢 -16.1 kB 🟢 -4.4 kB 🟢 -3.92 kB
assets/MissingModelsWarning-k_PSzgur.js (new) 16.1 kB 🔴 +16.1 kB 🔴 +4.4 kB 🔴 +3.92 kB
assets/SubscriptionPanelContentWorkspace-C4R53Nbb.js (removed) 15.8 kB 🟢 -15.8 kB 🟢 -4.03 kB 🟢 -3.54 kB
assets/SubscriptionPanelContentWorkspace-DIFkC3wX.js (new) 15.8 kB 🔴 +15.8 kB 🔴 +4.03 kB 🔴 +3.55 kB
assets/WidgetInputNumber-DpP2fSrZ.js (removed) 15.2 kB 🟢 -15.2 kB 🟢 -4.15 kB 🟢 -3.69 kB
assets/WidgetInputNumber-Tyc1xrJX.js (new) 15.2 kB 🔴 +15.2 kB 🔴 +4.15 kB 🔴 +3.7 kB
assets/load3d-BTID0_9y.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.18 kB 🟢 -3.64 kB
assets/load3d-DnAoqxRZ.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.18 kB 🔴 +3.63 kB
assets/NodeConflictDialogContent-8Q9R-ZCu.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.37 kB 🟢 -2.08 kB
assets/NodeConflictDialogContent-V3fPU2yr.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.36 kB 🔴 +2.07 kB
assets/AudioPreviewPlayer-9wCIYn8G.js (new) 10.1 kB 🔴 +10.1 kB 🔴 +2.99 kB 🔴 +2.67 kB
assets/AudioPreviewPlayer-DCmEH3QI.js (removed) 10.1 kB 🟢 -10.1 kB 🟢 -2.99 kB 🟢 -2.68 kB
assets/nodeTemplates-BgfIIadQ.js (new) 9.33 kB 🔴 +9.33 kB 🔴 +3.27 kB 🔴 +2.87 kB
assets/nodeTemplates-C9xFAVZe.js (removed) 9.33 kB 🟢 -9.33 kB 🟢 -3.27 kB 🟢 -2.88 kB
assets/InviteMemberDialogContent-B9xxaymn.js (new) 7.95 kB 🔴 +7.95 kB 🔴 +2.56 kB 🔴 +2.23 kB
assets/InviteMemberDialogContent-RKGV3Yb2.js (removed) 7.95 kB 🟢 -7.95 kB 🟢 -2.56 kB 🟢 -2.22 kB
assets/WidgetWithControl-B3LJiors.js (new) 6.97 kB 🔴 +6.97 kB 🔴 +2.59 kB 🔴 +2.31 kB
assets/WidgetWithControl-rS5E9OCx.js (removed) 6.97 kB 🟢 -6.97 kB 🟢 -2.59 kB 🟢 -2.31 kB
assets/Load3DConfiguration-B97N9Tta.js (removed) 6.36 kB 🟢 -6.36 kB 🟢 -1.92 kB 🟢 -1.69 kB
assets/Load3DConfiguration-f7Kh6AHo.js (new) 6.36 kB 🔴 +6.36 kB 🔴 +1.92 kB 🔴 +1.69 kB
assets/MissingNodesContent-hjf8jk0P.js (removed) 6.14 kB 🟢 -6.14 kB 🟢 -2.08 kB 🟢 -1.86 kB
assets/MissingNodesContent-mjzitBWe.js (new) 6.14 kB 🔴 +6.14 kB 🔴 +2.08 kB 🔴 +1.85 kB
assets/CreateWorkspaceDialogContent-BQzZmBI2.js (new) 5.58 kB 🔴 +5.58 kB 🔴 +2 kB 🔴 +1.74 kB
assets/CreateWorkspaceDialogContent-D-xcP_8x.js (removed) 5.58 kB 🟢 -5.58 kB 🟢 -2 kB 🟢 -1.75 kB
assets/EditWorkspaceDialogContent-BtiUtY-f.js (removed) 5.38 kB 🟢 -5.38 kB 🟢 -1.96 kB 🟢 -1.7 kB
assets/EditWorkspaceDialogContent-CmVgzsvd.js (new) 5.38 kB 🔴 +5.38 kB 🔴 +1.96 kB 🔴 +1.7 kB
assets/ValueControlPopover-Bd8J0IyE.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.77 kB 🟢 -1.58 kB
assets/ValueControlPopover-FnydJHaE.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.77 kB 🔴 +1.58 kB
assets/Preview3d-DWp89F1Y.js (removed) 4.82 kB 🟢 -4.82 kB 🟢 -1.57 kB 🟢 -1.36 kB
assets/Preview3d-T_0030r3.js (new) 4.82 kB 🔴 +4.82 kB 🔴 +1.57 kB 🔴 +1.36 kB
assets/MissingNodesFooter-B3HDxOdd.js (new) 4.8 kB 🔴 +4.8 kB 🔴 +1.78 kB 🔴 +1.57 kB
assets/MissingNodesFooter-D_qjWCTE.js (removed) 4.8 kB 🟢 -4.8 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/DeleteWorkspaceDialogContent-D20grp_3.js (new) 4.28 kB 🔴 +4.28 kB 🔴 +1.64 kB 🔴 +1.42 kB
assets/DeleteWorkspaceDialogContent-DndTxfUn.js (removed) 4.28 kB 🟢 -4.28 kB 🟢 -1.64 kB 🟢 -1.43 kB
assets/LeaveWorkspaceDialogContent-D2VVPvq7.js (new) 4.11 kB 🔴 +4.11 kB 🔴 +1.59 kB 🔴 +1.37 kB
assets/LeaveWorkspaceDialogContent-DOrzl6yL.js (removed) 4.11 kB 🟢 -4.11 kB 🟢 -1.59 kB 🟢 -1.38 kB
assets/RemoveMemberDialogContent-C3NstwKW.js (removed) 4.09 kB 🟢 -4.09 kB 🟢 -1.54 kB 🟢 -1.34 kB
assets/RemoveMemberDialogContent-CMVk_NoG.js (new) 4.09 kB 🔴 +4.09 kB 🔴 +1.53 kB 🔴 +1.33 kB
assets/RevokeInviteDialogContent-BxpthCJs.js (new) 4 kB 🔴 +4 kB 🔴 +1.55 kB 🔴 +1.36 kB
assets/RevokeInviteDialogContent-WjdOCFHm.js (removed) 4 kB 🟢 -4 kB 🟢 -1.56 kB 🟢 -1.36 kB
assets/saveMesh-CjTLVW97.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.45 kB 🟢 -1.28 kB
assets/saveMesh-CQ6TY86x.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.45 kB 🔴 +1.3 kB
assets/cloudSessionCookie-C-A6WgEt.js (removed) 3.07 kB 🟢 -3.07 kB 🟢 -1.08 kB 🟢 -975 B
assets/cloudSessionCookie-DLW7vn8d.js (new) 3.07 kB 🔴 +3.07 kB 🔴 +1.08 kB 🔴 +972 B
assets/GlobalToast-BJ9v6BQY.js (removed) 2.34 kB 🟢 -2.34 kB 🟢 -965 B 🟢 -808 B
assets/GlobalToast-D3-zouJj.js (new) 2.34 kB 🔴 +2.34 kB 🔴 +962 B 🔴 +800 B
assets/SubscribeToRun-BCrH2vTR.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -988 B 🟢 -855 B
assets/SubscribeToRun-Cms5wi4X.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +989 B 🔴 +867 B
assets/CloudRunButtonWrapper-COtDnICD.js (new) 1.67 kB 🔴 +1.67 kB 🔴 +781 B 🔴 +710 B
assets/CloudRunButtonWrapper-D3EQCQDx.js (removed) 1.67 kB 🟢 -1.67 kB 🟢 -782 B 🟢 -707 B
assets/cloudBadges-CfZXQPte.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +701 B 🔴 +616 B
assets/cloudBadges-u6jSsu_P.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -702 B 🟢 -614 B
assets/cloudSubscription-DhebosfH.js (new) 1.32 kB 🔴 +1.32 kB 🔴 +654 B 🔴 +565 B
assets/cloudSubscription-v79R77aG.js (removed) 1.32 kB 🟢 -1.32 kB 🟢 -656 B 🟢 -569 B
assets/SubscriptionPanelContentWorkspace-CQBfR2JX.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +481 B 🔴 +415 B
assets/SubscriptionPanelContentWorkspace-e6_FGb7t.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -481 B 🟢 -420 B
assets/Load3D-BLMFCifM.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -488 B 🟢 -435 B
assets/Load3D-qNtTE7t-.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +482 B 🔴 +433 B
assets/nightlyBadges-CTgL15P2.js (new) 1 kB 🔴 +1 kB 🔴 +537 B 🔴 +467 B
assets/nightlyBadges-DXPIXnF3.js (removed) 1 kB 🟢 -1 kB 🟢 -538 B 🟢 -480 B
assets/Load3dViewerContent-DBSIW3ph.js (removed) 961 B 🟢 -961 B 🟢 -457 B 🟢 -403 B
assets/Load3dViewerContent-DHfTnYPy.js (new) 961 B 🔴 +961 B 🔴 +453 B 🔴 +401 B
assets/SettingDialogContent-BgkSJDS0.js (new) 917 B 🔴 +917 B 🔴 +441 B 🔴 +385 B
assets/SettingDialogContent-DLlFgqfs.js (removed) 917 B 🟢 -917 B 🟢 -443 B 🟢 -387 B
assets/graphHasMissingNodes-Bhb48hoQ.js (new) 761 B 🔴 +761 B 🔴 +373 B 🔴 +318 B
assets/graphHasMissingNodes-CuNAMof7.js (removed) 761 B 🟢 -761 B 🟢 -375 B 🟢 -321 B
assets/WidgetLegacy-ChkhqIw6.js (new) 747 B 🔴 +747 B 🔴 +387 B 🔴 +332 B
assets/WidgetLegacy-YU6m_YBu.js (removed) 747 B 🟢 -747 B 🟢 -389 B 🟢 -336 B
assets/WidgetInputNumber-BY60ew1U.js (removed) 392 B 🟢 -392 B 🟢 -232 B 🟢 -195 B
assets/WidgetInputNumber-OhhZECu5.js (new) 392 B 🔴 +392 B 🔴 +230 B 🔴 +196 B
assets/AnimationControls-bPyINTJI.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-BIJKq20L.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-DjoqfnTX.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-BnXUotno.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-DCVL1uOL.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-32ZIoIYN.js 909 B 909 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-7WXVxhf9.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BNcWkRcH.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cchriln7.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-COsT3jlc.js 16 kB 16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CpqJ59mV.js 16.8 kB 16.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-dco-b4jy.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dj4qNjPR.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-gwZZf095.js 14.4 kB 14.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-jn33Krva.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-kIN_T4OP.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-mTEY_dzO.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-CU6mOd8i.js 478 kB 478 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-wGA3C3Hi.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeContent-VPjQzi79.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeFooter-B2l9_-Av.js 1.88 kB 1.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeHeader-DUns4_x2.js 1.08 kB 1.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-CVvKb-rW.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-9VWyHo5z.js 136 kB 136 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B8iCY4y4.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BFqZCm1H.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CgmTJMw2.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D2_fl4nn.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DbGv8BCU.js 114 kB 114 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DigTCF_h.js 129 kB 129 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DuAAxgfq.js 179 kB 179 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DYZBa_3M.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-wdnI-QZq.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Zns-zxeS.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-DTYkrVtB.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-AFmsiWi3.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-ATOoJCQr.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-CQw3f2T6.js 2.23 kB 2.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MissingNodesHeader-BOlbqJ0O.js 1.09 kB 1.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-Dq6XmUX_.js 92 B 92 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/NodeConflictFooter-C8QCTAMD.js 2.37 kB 2.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/NodeConflictHeader-DRxQs5TH.js 1.09 kB 1.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-aApbAbNI.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B2JRfCRl.js 332 kB 332 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BbVIS5BG.js 357 kB 357 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BddTsShn.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CEMSHoZg.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cfjv7JEn.js 364 kB 364 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-COMqCnF4.js 353 kB 353 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-oMRTTpzO.js 405 kB 405 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-PGdfR_x_.js 441 kB 441 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-SDKvs0-9.js 404 kB 404 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-wKqgWC3H.js 329 kB 329 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PanelTemplate-C1h0RxBM.js 1.2 kB 1.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DsBk66MD.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-Ca2S-reV.js 1.87 kB 1.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-RIZ7-gt8.js 8.81 kB 8.81 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SettingDialogHeader-BHt-6Ao_.js 1.62 kB 1.62 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SettingDialogHeader-D5wathvf.js 244 B 244 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-5NW8sj_6.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-Bh_ZdHn9.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-DAMctjF_.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-VDank0gz.js 318 B 318 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-RLUqfB5N.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-2w5BjjHm.js 3.94 kB 3.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-Djm16aYN.js 131 B 131 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-Dsp6bf_j.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-jDbRm4n6.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-C8ikSQqn.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-B1RSu0_k.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-MXN3EUoN.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BcUSnWUK.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-wePHc2fh.js 2.88 kB 2.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DyQHILEf.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-COgaptkR.js 3.09 kB 3.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-CoKD027B.js 2.5 kB 2.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-BCsKJASV.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 49 added / 49 removed

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

🤖 Fix all issues with AI agents
In `@src/platform/assets/composables/useMediaAssetActions.test.ts`:
- Around line 281-299: The test for useMediaAssetActions.deleteAssets should
also assert that only recognized provider tags trigger invalidation; update the
test (the it block using createMockAsset, mockShowDialog and
actions.deleteAssets) to add an assertion that mockInvalidateCategory was called
exactly once (or alternatively assert it was not called with 'models') so
unrecognized tags like 'models' do not cause extra invalidations.

Copy link
Contributor Author

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

This is not correct if the useMediaAssetActions are not being used for model cards.

@christian-byrne
Copy link
Contributor Author

christian-byrne commented Jan 30, 2026

UseMediaActions is actually used by model cards. Regardless, we shouldn't use modelToNode to invalidate, can just create a more logical system to begin laying "models as assets" groundwork

@christian-byrne
Copy link
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 30, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@christian-byrne christian-byrne force-pushed the fix/asset-deletion-invalidation branch from 630d964 to a84b06a Compare January 30, 2026 06:56
snomiao pushed a commit that referenced this pull request Jan 30, 2026
…8433)

## Summary

Refactors the model assets cache in `assetsStore.ts` to be keyed by
category (e.g., 'checkpoints', 'loras') instead of nodeType (e.g.,
'CheckpointLoaderSimple').

## Changes

- Rename `modelStateByKey` to `modelStateByCategory`
- Add `resolveCategory()` helper to translate nodeType to category for
cache lookup
- Multiple node types sharing the same category now share one cache
entry
- Add `invalidateCategory()` method for cache invalidation
- Maintain backwards-compatible public API accepting nodeType
- Update tests for new category-keyed behavior

## Benefits

1. **Deduplication**: Same category = same cache entry = single API call
2. **Simple invalidation**: Delete asset with tag 'checkpoints' then
invalidate cache
3. **Cleaner mental model**: Store to View reactive flow works naturally

## Testing

- All existing tests pass with updates
- Added new tests for category-keyed cache sharing, invalidateCategory,
and unknown node type handling

## Part of Stack

This is **PR 1 of 2** in a stacked PR series:
1. **This PR**: Refactor asset cache to category-keyed (architectural
improvement)
2. **[PR 2
#8434](#8434: Fix
deletion invalidation

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8433-refactor-change-asset-cache-from-nodeType-keyed-to-category-keyed-2f76d73d365081999b7fda12c9706ab5)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Subagent 5 <subagent@example.com>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: GitHub Action <action@github.com>
@christian-byrne christian-byrne force-pushed the fix/asset-deletion-invalidation branch from a84b06a to b4cd33b Compare January 30, 2026 08:52
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@src/platform/assets/composables/useMediaAssetActions.test.ts`:
- Around line 60-71: Remove or clarify the unused getAllNodeProviders mock in
the useModelToNodeStore mock: the deletion invalidation in
useMediaAssetActions.ts relies on assetsStore.hasCategory() (not
modelToNodeStore.getAllNodeProviders()), so either delete the
getAllNodeProviders hoisted mock (and the unused mockGetCategoryForNodeType if
not used elsewhere) or add a short comment next to
useModelToNodeStore/mockGetCategoryForNodeType explaining that
getAllNodeProviders is present only for other tests in this file to avoid
confusion.

In `@src/stores/assetsStore.ts`:
- Around line 647-662: The function removeAssetFromCache and its export are
unused; remove the entire removeAssetFromCache implementation and its export
from the store (the code that references modelStateByCategory, assetsArrayCache
and the tag deletes). Ensure there are no remaining imports/usages (e.g., in
useMediaAssetActions.ts — that flow uses invalidateModelsForCategory instead),
and run a quick grep to confirm no callers reference removeAssetFromCache before
committing.

@christian-byrne christian-byrne self-assigned this Jan 31, 2026
DrJKL pushed a commit that referenced this pull request Jan 31, 2026
…8433)

## Summary

Refactors the model assets cache in `assetsStore.ts` to be keyed by
category (e.g., 'checkpoints', 'loras') instead of nodeType (e.g.,
'CheckpointLoaderSimple').

## Changes

- Rename `modelStateByKey` to `modelStateByCategory`
- Add `resolveCategory()` helper to translate nodeType to category for
cache lookup
- Multiple node types sharing the same category now share one cache
entry
- Add `invalidateCategory()` method for cache invalidation
- Maintain backwards-compatible public API accepting nodeType
- Update tests for new category-keyed behavior

## Benefits

1. **Deduplication**: Same category = same cache entry = single API call
2. **Simple invalidation**: Delete asset with tag 'checkpoints' then
invalidate cache
3. **Cleaner mental model**: Store to View reactive flow works naturally

## Testing

- All existing tests pass with updates
- Added new tests for category-keyed cache sharing, invalidateCategory,
and unknown node type handling

## Part of Stack

This is **PR 1 of 2** in a stacked PR series:
1. **This PR**: Refactor asset cache to category-keyed (architectural
improvement)
2. **[PR 2
#8434](#8434: Fix
deletion invalidation

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8433-refactor-change-asset-cache-from-nodeType-keyed-to-category-keyed-2f76d73d365081999b7fda12c9706ab5)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Subagent 5 <subagent@example.com>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: GitHub Action <action@github.com>
- Add hasCategory() to assetsStore to check if a category exists in cache
- Use hasCategory() in deleteAssets to determine which model caches to invalidate
- Remove modelToNodeStore dependency from useMediaAssetActions for deletion
- Fix removeAssetFromCache to use modelStateByCategory instead of modelStateByKey
- Add comprehensive tests for cache invalidation on asset deletion

Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019c25ee-c9d6-7700-9beb-03f93317d758
@christian-byrne christian-byrne force-pushed the fix/asset-deletion-invalidation branch from b4cd33b to 6b86198 Compare February 4, 2026 00:00
…cate, extract EXCLUDED_TAGS constant, add invalidateModelsForCategory tests

Amp-Thread-ID: https://ampcode.com/threads/T-019c25f9-7238-774f-bb65-ea7f4306c4e6
…ory directly

Since PR 1 made cache category-keyed, we don't need to iterate through
node providers. Just clear the category cache directly - next access
triggers refetch automatically.

Amp-Thread-ID: https://ampcode.com/threads/T-019c25f9-7238-774f-bb65-ea7f4306c4e6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant