{"name":"HAAM","description":"Public PWA and local-first capability metadata for HAAM.","url":"https://haam.co","manifest":"https://haam.co/manifest.json","generatedAt":"2026-07-09T13:52:23.256Z","installability":{"status":"foundation","display":"standalone","startUrl":"https://haam.co/","shortcuts":[{"name":"Start a Project","url":"https://haam.co/start"},{"name":"Services","url":"https://haam.co/services"},{"name":"Products","url":"https://haam.co/products"},{"name":"World Studio","url":"https://haam.co/tools/world-studio"},{"name":"Browser Hub","url":"https://haam.co/browser-hub"},{"name":"Projects","url":"https://haam.co/projects"}]},"localFirst":{"status":"indexeddb-and-opfs-foundation-available","currentStorageLayers":[{"type":"IndexedDB","module":"lib/browser-tool-storage.js","activeToolRoutes":["https://haam.co/tools/world-studio"],"stores":["toolDrafts"]},{"type":"Origin Private File System","module":"lib/browser-opfs-storage.js","activeToolRoutes":["https://haam.co/tools/world-studio","https://haam.co/tools/production-studio","https://haam.co/tools/photo-editor","https://haam.co/tools/video-editor","https://haam.co/tools/3d-editor"],"directories":["haam-world-studio-files","haam-production-studio-assets"],"supports":["stage shared Production Studio assets locally","import staged assets into editors","save edited/rendered editor outputs back into the Production Studio asset vault","write local .haam-meta.json sidecars beside HAAM editor outputs","pass explicit Photo Editor state metadata into OPFS save-back actions","read Video Editor live UI state metadata from a local bridge before writing sidecars","inspect saved outputs locally before writing sidecar metadata when supported","export a Production Studio asset manifest with explicit sidecar metadata and no file bytes"]}],"currentStorageLayer":{"type":"IndexedDB","module":"lib/browser-tool-storage.js","note":"Kept for backward compatibility. See currentStorageLayers for the full local-first stack."},"recommendedStorageOrder":["IndexedDB","Origin Private File System"],"candidateRoutes":["https://haam.co/browser-hub","https://haam.co/tools/world-studio","https://haam.co/tools/webcodecs-lab","https://haam.co/tools/webgpu-lab","https://haam.co/tools/offscreen-canvas-lab","https://haam.co/tools/webassembly-lab","https://haam.co/tools/production-studio","https://haam.co/tools/photo-editor","https://haam.co/tools/video-editor","https://haam.co/tools/3d-editor","https://haam.co/products","https://haam.co/projects","https://haam.co/start"],"notes":["Production Studio exposes a shared OPFS asset vault for image, video, model, world, and miscellaneous source assets.","Photo, Video, 3D, and World Studio can import staged assets from the shared vault.","Photo, Video, 3D, and World Studio can save local outputs back into the shared vault.","Photo Editor passes explicit editor-state metadata into its vault sidecars.","Video Editor exposes a local UI metadata bridge consumed by the OPFS sidecar writer for rendered vault outputs.","HAAM editor outputs get local .haam-meta.json sidecars when saved through the shared OPFS write path.","Sidecars include locally inspected output metadata when browser APIs allow it.","The manifest prefers explicit sidecars and falls back to filename-based inference.","The local-first storage layers do not sync to HAAM servers."]},"browserMedia":{"status":"production-studio-asset-vault-photo-video-state-sidecar-inspection-lineage-and-readiness-labs-available","productionStudio":{"route":"https://haam.co/tools/production-studio","components":["app/tools/production-studio/production-runtime-panel.js","app/tools/production-studio/production-asset-vault.js"],"assetVault":{"directory":"haam-production-studio-assets","manifestVersion":3,"sidecarSuffix":".haam-meta.json","supports":["local asset import","asset classification by likely workspace","explicit local metadata sidecars for HAAM editor outputs","Photo Editor explicit editor-state metadata","Video Editor live UI state sidecar metadata bridge","write-time output inspection for image dimensions, video metadata, and JSON structure","derived-output lineage inference fallback","source-candidate inference by filename stem","individual file export and delete","vault clear","manifest export without file bytes","persistent-storage request when supported"],"lineageRules":["Explicit .haam-meta.json sidecars are preferred when present.","Photo Editor vault saves pass explicit source, output, crop, adjustment, and export metadata.","Video Editor vault saves can read the live UI metadata bridge for trim, framing, text, audio, and output settings.","Sidecars can include locally inspected output metadata when browser APIs allow it.","Photo Editor outputs can fall back to -edited image filenames.","Video Editor outputs can fall back to -haam-cut video filenames.","3D Editor outputs can fall back to HAAM 3D project and viewport filenames.","World Studio outputs can fall back to .world.json and -scene.json filenames."],"consumers":[{"route":"https://haam.co/tools/photo-editor","component":"app/tools/photo-editor/photo-production-vault-importer.js","editorComponent":"app/tools/photo-editor/photo-editor-client.js","supportedTypes":["image/jpeg","image/png","image/webp","image/avif"],"outputTypes":["image/jpeg","image/png","image/webp"],"lineage":{"outputSuffix":"-edited","operation":"edited-image-render","sidecar":true,"metadataSource":"editor-state-sidecar","explicitParameters":["source file facts","output dimensions","crop ratio","zoom","rotation","flips","adjustment sliders","export format","quality"],"inspectedOutput":["width","height","megapixels"]},"supports":["import staged images","save edited image outputs","write explicit Photo Editor state metadata sidecars","include inspected image output dimensions","export/delete staged images"]},{"route":"https://haam.co/tools/video-editor","component":"app/tools/video-editor/video-production-vault-importer.js","editorComponent":"app/tools/video-editor/video-editor-client.js","metadataBridgeComponent":"app/tools/video-editor/video-vault-metadata-bridge.js","supportedExtensions":[".mp4",".m4v",".mov",".webm",".ogv",".ogg"],"outputTypes":["browser MediaRecorder output"],"lineage":{"outputSuffix":"-haam-cut","operation":"rendered-video-export","sidecar":true,"metadataSource":"video-editor-ui-state-bridge","explicitParameters":["source display facts","trim range","framing zoom","framing offsets","text overlay","text position","text styling","audio mute","volume","quality preset","output dimensions","rendered duration","encoder format"],"inspectedOutput":["width","height","durationSeconds"]},"supports":["import staged videos","save rendered video outputs","write Video Editor UI state metadata sidecars","include inspected video output metadata when available","export/delete staged videos"]},{"route":"https://haam.co/tools/3d-editor","component":"app/tools/3d-editor/model-production-vault-importer.js","editorComponent":"app/tools/3d-editor/model-editor-client.js","supportedExtensions":[".obj",".json"],"outputTypes":["application/json","image/png"],"lineage":{"operations":["project-json-save","webgl-viewport-png-save"],"sidecar":true,"inspectedOutput":["JSON project structure","PNG dimensions"]},"stagedButNotImportedYet":[".glb",".gltf",".fbx",".stl",".usdz",".blend"],"supports":["import staged OBJ/project assets","save project JSON","save viewport PNG","write local metadata sidecars","include inspected JSON or PNG output metadata","export/delete staged model assets"]},{"route":"https://haam.co/tools/world-studio","component":"app/tools/world-studio/world-production-vault-importer.js","outputComponent":"app/tools/world-studio/world-production-vault-output.js","supportedExtensions":[".json",".haamworld",".world.json",".scene.json"],"outputTypes":["application/json"],"lineage":{"operations":["world-project-json-save","scene-only-json-save"],"sidecar":true,"inspectedOutput":["templateName","objectCount","hotspotCount"]},"supports":["import staged world/project JSON","read latest IndexedDB autosave draft","save world JSON","save scene-only JSON","write local metadata sidecars","include inspected world/scene JSON metadata","export/delete staged world assets"]}]},"checks":["IndexedDB","Origin Private File System","VideoFrame","VideoEncoder","VideoDecoder","ImageDecoder","navigator.gpu","OffscreenCanvas","Dedicated Worker","WebAssembly"]},"routes":["https://haam.co/tools/production-studio","https://haam.co/tools/photo-editor","https://haam.co/tools/video-editor","https://haam.co/tools/3d-editor","https://haam.co/tools/world-studio","https://haam.co/tools/webcodecs-lab","https://haam.co/tools/webgpu-lab","https://haam.co/tools/offscreen-canvas-lab","https://haam.co/tools/webassembly-lab"],"webCodecs":{"route":"https://haam.co/tools/webcodecs-lab"},"webGpu":{"route":"https://haam.co/tools/webgpu-lab"},"offscreenCanvas":{"route":"https://haam.co/tools/offscreen-canvas-lab"},"webAssembly":{"route":"https://haam.co/tools/webassembly-lab"}},"serviceWorker":{"status":"not-enabled-yet","reason":"A service worker should be added only after route-level cache scope is explicit."},"publicMetadataEndpoints":["https://haam.co/api/haam-index","https://haam.co/api/schema-graph","https://haam.co/api/haam-actions","https://haam.co/api/pwa-capabilities","https://haam.co/openapi.json"]}