From 80a3c4bc2aaa0fefdf8744a681d45756f8b98794 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 04:25:56 +0200 Subject: [PATCH] Filter out starter environment image assets during project save and load --- src/serialization/project-package.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/serialization/project-package.ts b/src/serialization/project-package.ts index d1283df6..3851ed71 100644 --- a/src/serialization/project-package.ts +++ b/src/serialization/project-package.ts @@ -1,6 +1,7 @@ import { strFromU8, strToU8, unzipSync, Zip, ZipDeflate } from "fflate"; import type { ProjectDocument } from "../document/scene-document"; +import { isStarterEnvironmentImageAsset } from "../assets/starter-environment-assets"; import { getProjectAssetKindLabel, type ProjectAssetRecord } from "../assets/project-assets"; import type { ProjectAssetStorage, ProjectAssetStoragePackageRecord } from "../assets/project-asset-storage"; import { @@ -257,8 +258,9 @@ export async function saveProjectPackage( ): Promise { const sceneJson = serializeProjectDocument(document); const assets = Object.values(document.assets).sort((left, right) => left.id.localeCompare(right.id)); + const bundledAssets = assets.filter((asset) => !isStarterEnvironmentImageAsset(asset)); - if (assets.length > 0 && storage === null) { + if (bundledAssets.length > 0 && storage === null) { throw new Error("Project save failed: project asset storage is unavailable for asset-backed scenes."); } @@ -266,7 +268,7 @@ export async function saveProjectPackage( setPackagedFile(packageEntries, PROJECT_PACKAGE_SCENE_PATH, strToU8(sceneJson)); const missingAssetDiagnostics: string[] = []; - for (const asset of assets) { + for (const asset of bundledAssets) { let storedAsset: ProjectAssetStoragePackageRecord | null; try { @@ -334,18 +336,19 @@ export async function loadProjectPackage( } const assets = Object.values(document.assets).sort((left, right) => left.id.localeCompare(right.id)); + const bundledAssets = assets.filter((asset) => !isStarterEnvironmentImageAsset(asset)); if (assets.length === 0) { return document; } - if (storage === null) { + if (bundledAssets.length > 0 && storage === null) { throw new Error("Project load failed: project asset storage is unavailable for asset-backed scenes."); } const packagedAssetRecords = buildStoredAssetRecordsFromPackage(entries, document); - for (const asset of assets) { + for (const asset of bundledAssets) { const packagedAsset = packagedAssetRecords.get(asset.id); if (packagedAsset === undefined || Object.keys(packagedAsset.files).length === 0) { @@ -357,7 +360,7 @@ export async function loadProjectPackage( const writtenStorageKeys: string[] = []; try { - for (const asset of assets) { + for (const asset of bundledAssets) { const packagedAsset = packagedAssetRecords.get(asset.id); if (packagedAsset === undefined) {