How it works
A render goes through four steps: the SDK captures your scene, uploads it, we check it and work out the price, and a GPU renders it. This page shows what is sent along the way.
The four steps
- Capture. The SDK walks your live
Sceneand exports it as a.glb. What the.glbcannot hold goes into a small JSON manifest containing the camera, the lights, your color settings, your TSL materials and your own app state. - Upload. The SDK checks which of your files have previously been uploaded, and only uploads the new ones. A model that has not changed is never uploaded twice. See Assets & caching.
- Submit. The manifest goes to
POST /v1/renders. We inspect it to work out how much render time is needed. If it could cost more than yourmaxCostor your balance, it is refused right away and nothing is charged. - Render. A GPU rebuilds your scene and renders it. You get a private link to the result.
Capture never changes your scene. Helpers and gizmos are left out of the
export, and everything is back in place before render() returns.
See what is sent
Look at the manifest without uploading or rendering anything:
const manifest = await bakery3.inspect();
console.log(JSON.stringify(manifest, null, 2));
// {
// sceneAsset: 'sha256:d7ed7db2…',
// camera: { type: 'perspective', fov: 40, position: [2.2, 1.8, 2.6], … },
// lights: [{ type: 'directional', color: '#fff4e0', intensity: 2.4, … }, …],
// environment: { hdri: 'sha256:51c0a9e4…', background: { type: 'transparent' } },
// color: { outputColorSpace: 'srgb', toneMapping: 'aces-filmic', toneMappingExposure: 1 },
// compatibility: { score: 0.97, issues: […] },
// …
// }| Field | What it holds |
|---|---|
sceneAsset | The hash of your .glb: geometry, materials, textures and hierarchy. |
camera | Type, world position and rotation, fov or frustum, near, far and zoom. |
lights | Type, color, intensity and position of every light. |
environment | Your HDRI, the background mode and the ambient light. |
color | Output color space, tone mapping and exposure from your renderer. |
shaders | Your TSL materials and the textures they use. |
fallbacks | Any userData.bakery3.fallback you declared. See Material fallbacks. |
compatibility | The same report check() gives you. |
runtime | Hidden objects, moved objects, and your own productState, which is stored with the render and never rendered. |
Custom shaders
ShaderMaterial is not supported, because GLSL cannot run in the renderer.
NodeMaterial written in TSL is. See Custom shaders.
What is never sent
- Your source code, and any GLSL.
- The DOM, cookies or analytics.
- Anything when you call
check(). It runs entirely in the browser.
