{ "schemaVersion": 1, "product": "Web Blender Modeler V1", "browserScope": "Chromium", "privateDeployment": { "scope": "current Linux host, single authorized user", "usernameEnvironment": "WEB_BLENDER_USERNAME", "defaultUsername": "owner", "passwordEnvironment": "WEB_BLENDER_PASSWORD", "authentication": "HTTP Basic over HTTPS", "productionIngress": "HTTPS reverse proxy preserving Host and Authorization; HTTP listener remains loopback by default", "unauthenticatedExternalBinding": "reject", "authenticatedCacheControl": "private, no-store", "crossOriginMutation": "reject", "validation": "NOT_RUN", "acceptance": "NOT_CLAIMED" }, "transport": { "production": "https", "localDevelopment": "http://127.0.0.1", "fileProtocolSupported": false, "sameOriginRuntimeAssets": true }, "methods": [ "GET", "HEAD" ], "serverOperator": { "path": "/api/server-operator-job", "methods": [ "GET", "POST" ], "actions": { "describe": "POST", "submit": "POST", "read": "GET|POST", "cancel": "POST" }, "cacheControl": "no-store", "configuration": [ "BLENDER_BIN", "PYTHON_BIN", "SERVER_OPERATOR_WORKSPACE_ROOT" ] }, "responseHeaders": { "allResponses": { "Cross-Origin-Opener-Policy": "same-origin", "Cross-Origin-Embedder-Policy": "require-corp", "Cross-Origin-Resource-Policy": "same-origin", "Content-Security-Policy": "default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self'; style-src-attr 'unsafe-inline'; worker-src 'self'; connect-src 'self'; font-src 'self'; img-src 'self' blob:; media-src 'self' blob:; object-src 'none'; base-uri 'none'; frame-ancestors 'none'" }, "routes": [ { "id": "entry-document", "patterns": [ "/", "/index.html" ], "cacheControl": "no-cache" }, { "id": "runtime-manifest", "patterns": [ "/engine-manifest.json" ], "cacheControl": "no-cache" }, { "id": "content-hashed-assets", "patterns": [ "/assets/*" ], "cacheControl": "public, max-age=31536000, immutable" }, { "id": "stable-engine-assets", "patterns": [ "/vendor/blender/*" ], "cacheControl": "no-cache" }, { "id": "fallback", "patterns": [ "*" ], "cacheControl": "no-cache" } ] }, "mimeTypes": { ".html": "text/html; charset=utf-8", ".js": "text/javascript; charset=utf-8", ".css": "text/css; charset=utf-8", ".wasm": "application/wasm", ".json": "application/json; charset=utf-8", ".svg": "image/svg+xml", ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp", ".ttf": "font/ttf", ".otf": "font/otf", ".woff": "font/woff", ".woff2": "font/woff2", ".wav": "audio/wav", ".mp3": "audio/mpeg", ".ogg": "audio/ogg", ".mp4": "video/mp4", ".webm": "video/webm", ".blend": "application/octet-stream", ".nvdb": "application/x-nanovdb", ".vtt": "text/vtt; charset=utf-8" }, "rangeRequests": { "extensions": [ ".wasm", ".blend", ".nvdb", ".mp4", ".webm" ], "unit": "bytes", "singleRangeOnly": true, "etag": "strong-sha256", "satisfiedStatus": 206, "unsatisfiedStatus": 416, "requiredSatisfiedHeaders": [ "Accept-Ranges", "Content-Range", "Content-Length", "ETag" ], "ifRangeMismatch": "return-full-200" } }