{
  "openapi": "3.1.1",
  "info": {
    "title": "Renderloom API",
    "version": "1.0.0",
    "summary": "Deterministic tools for people and AI agents.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://renderloom.usefulweb.site"
    }
  ],
  "paths": {
    "/api/v1/tools": {
      "get": {
        "operationId": "listTools",
        "summary": "Catalog of all tools",
        "responses": {
          "200": {
            "description": "Tool list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/{id}": {
      "get": {
        "operationId": "getTool",
        "summary": "Definition of one tool",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "renderloom-voxel-height-grid",
                "renderloom-voxel-inspector",
                "renderloom-light-rigs",
                "renderloom-height-material",
                "renderloom-tile-seam",
                "kerfwise-scene-preview",
                "kerfwise-render-budget",
                "kerfwise-profile-extruder",
                "kerfwise-model-report"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/renderloom-voxel-height-grid/calculate": {
      "post": {
        "operationId": "calculateRenderloomVoxelHeightGrid",
        "summary": "Build an editable voxel model from rows of integer heights.",
        "description": "Turn a rectangular grid of integer heights into a colored voxel model. Download a transparent isometric SVG, an OBJ/MTL mesh, a single-model VOX file, and an editable project for Renderloom Voxel Desk.\n\nMethodology:\n- Each cell specifies the number of voxels in a solid vertical column. Zero leaves a column empty. Values must be integers from 0 to 64; rows must have equal widths.\n- The highest voxel in each nonempty column uses the top color and all lower voxels use the base color.\n- A voxel occupies one integer grid cell; X and Y span each row and Z is the vertical axis. The preview is a transparent orthographic isometric illustration with fixed face shading.\n- The model supports dimensions of 1–64 cells per axis, up to 32,768 occupied cells and up to 64 opaque palette colors.\n- The VOX export is a single-model VOX 150 file with opaque palette colors. The OBJ mesh contains outward-facing quads only where a voxel has no occupied neighbor. It uses palette-based MTL diffuse colors; it does not include textures, animation or physically based material properties.\n\nThis creates solid vertical columns from the grid. The preview uses fixed illustration shading; it is not a physically based render.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "renderloom_voxel_height_grid",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderloomVoxelHeightGridInput"
              },
              "examples": {
                "example1": {
                  "summary": "A small stepped hill",
                  "value": {}
                },
                "example2": {
                  "summary": "A terraced platform",
                  "value": {
                    "grid": "1, 1, 1, 1\n1, 3, 3, 1\n1, 3, 3, 1\n1, 1, 1, 1",
                    "base": "#687886",
                    "top": "#eed5a3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderloomVoxelHeightGridResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/renderloom-voxel-inspector/calculate": {
      "post": {
        "operationId": "calculateRenderloomVoxelInspector",
        "summary": "Inspect a native voxel model and export its surface mesh.",
        "description": "Validate an editable Renderloom voxel project, count occupied cells and exposed faces, and download its SVG preview and OBJ/MTL surface mesh and a single-model VOX file.\n\nMethodology:\n- A voxel occupies one integer grid cell; X and Y span each row and Z is the vertical axis. The preview is a transparent orthographic isometric illustration with fixed face shading.\n- The model supports dimensions of 1–64 cells per axis, up to 32,768 occupied cells and up to 64 opaque palette colors.\n- The VOX export is a single-model VOX 150 file with opaque palette colors. The OBJ mesh contains outward-facing quads only where a voxel has no occupied neighbor. It uses palette-based MTL diffuse colors; it does not include textures, animation or physically based material properties.\n\nOnly Renderloom voxel JSON is supported. This inspector does not import MagicaVoxel VOX files or execute external assets.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "renderloom_voxel_inspector",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderloomVoxelInspectorInput"
              },
              "examples": {
                "example1": {
                  "summary": "Inspect the little house",
                  "value": {}
                },
                "example2": {
                  "summary": "Inspect a small stepped grid",
                  "value": {
                    "project": "{\"format\":\"renderloom-voxel\",\"version\":1,\"name\":\"Height grid model\",\"width\":2,\"height\":2,\"depth\":2,\"palette\":[\"#8b5e3c\",\"#7ba85c\"],\"voxels\":[{\"x\":0,\"y\":0,\"z\":0,\"color\":1},{\"x\":1,\"y\":0,\"z\":0,\"color\":0},{\"x\":1,\"y\":0,\"z\":1,\"color\":1},{\"x\":0,\"y\":1,\"z\":0,\"color\":0},{\"x\":0,\"y\":1,\"z\":1,\"color\":1},{\"x\":1,\"y\":1,\"z\":0,\"color\":1}]}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderloomVoxelInspectorResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/renderloom-light-rigs/calculate": {
      "post": {
        "operationId": "calculateRenderloomLightRigs",
        "summary": "Compare four deterministic light rigs on the same 3D concept.",
        "description": "Keep the camera, object colors and geometry fixed while comparing soft key, side, high-key and grazing light. Download a four-tile SVG contact sheet and an editable Renderloom scene, then refine lighting locally.\n\nMethodology:\n- Four renders keep geometry, camera, materials and sampling seed identical. Only light direction, elevation, softness and ambient light change.\n- The shared local concept renderer uses orthographic rays, direct light, sampled soft shadows, short-range ambient occlusion and one metal reflection. It does not execute MoonRay or load external renderers.\n- Each tile is 32–96 pixels per side and one or two samples. The complete comparison permits 65536 pixel samples. Colors are display sRGB; output is a compact raster represented by SVG rectangles.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "renderloom_light_rigs",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderloomLightRigsInput"
              },
              "examples": {
                "example1": {
                  "summary": "Compare terraced forms",
                  "value": {}
                },
                "example2": {
                  "summary": "A finer small comparison",
                  "value": {
                    "width": 64,
                    "height": 64,
                    "samples": 2
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderloomLightRigsResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/renderloom-height-material/calculate": {
      "post": {
        "operationId": "calculateRenderloomHeightMaterial",
        "summary": "Turn numeric height samples into normal, roughness, cavity and ORM maps.",
        "description": "Author a rectangular height field from 0–1 samples, interpolate it into a texture, and generate seven PNG maps with explicit normal convention and editable roughness, cavity and metallic settings. Download a map ZIP and exact Renderloom material project.\n\nMethodology:\n- The grid has 2–64 equal-width rows and columns of 0–1 values. Bilinear interpolation creates a square RGBA8 source at 16–512 px. All computations and PNG exports are deterministic.\n- Tangent normals normalize (−dx × strength, +dy × strength, 1), using central differences and periodic neighbors. Image Y points down; default output is +Y tangent space. Green may be flipped for a −Y convention. Normal maps are data textures.\n- Roughness = clamp(base + (0.5 − height) × variation). Cavity = clamp(1 − max(0, periodic neighborhood mean − height) × strength × 4). This is a short-range cavity approximation, not ray-traced occlusion. Metallic is a uniform manually chosen value. ORM packs cavity in R, roughness in G and metallic in B.\n- Optional symmetric edge feathering averages opposite edges in a blend band. It removes boundary color jumps, but does not guarantee matching derivatives or hide repeated motifs. Review all maps in the target application.\n\nRoughness and cavity are authored heuristics. Metallic is a manual uniform value. This does not recover measured physical materials or create a glTF model.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "renderloom_height_material",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderloomHeightMaterialInput"
              },
              "examples": {
                "example1": {
                  "summary": "A raised rounded tile",
                  "value": {}
                },
                "example2": {
                  "summary": "A matte diagonal ramp with green flipped",
                  "value": {
                    "grid": "0, 0.5, 1\n0, 0.5, 1\n0, 0.5, 1",
                    "flipGreen": true,
                    "roughness": 0.85,
                    "normalStrength": 12,
                    "seamBlend": 0.1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderloomHeightMaterialResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/renderloom-tile-seam/calculate": {
      "post": {
        "operationId": "calculateRenderloomTileSeam",
        "summary": "Measure opposite-edge jumps and feather a reusable numeric texture tile.",
        "description": "Turn a typed grayscale grid into a texture tile, compare opposite-edge differences before and after symmetric feathering, and inspect an exact 2 × 2 repeated PNG. Save an editable material project with its original source and blend recipe.\n\nMethodology:\n- Input is a 2–64 row and column grid of 0–1 heights, bilinearly interpolated to 16–512 px. The same deterministic engine is used in the browser Texture Lab and API/MCP.\n- The edge score is the mean absolute RGB difference between corresponding first/last rows and columns, divided by 255. A score of zero means outer pixels match exactly; it is not a perceptual quality score.\n- A blend band of 0–25% per edge symmetrically mixes corresponding edge pairs toward their average. Weight is (1 − distance / band width)². Horizontal blending precedes vertical blending. Pixels outside the bands are unchanged.\n- The 2 × 2 preview repeats the blended tile without interpolation. Feathering can soften edge detail and cannot remove repeated motifs or guarantee continuity of derivatives.\n\nEqual boundary colors do not guarantee matching slopes or an invisible repeating pattern. This is symmetric edge feathering, not texture synthesis.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "renderloom_tile_seam",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderloomTileSeamInput"
              },
              "examples": {
                "example1": {
                  "summary": "An asymmetric ramp",
                  "value": {
                    "grid": "0, 0.25, 0.5, 1\n0.1, 0.4, 0.6, 0.9\n0.3, 0.2, 0.8, 0.75"
                  }
                },
                "example2": {
                  "summary": "Inspect without blending",
                  "value": {
                    "seamBlend": 0
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderloomTileSeamResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/kerfwise-scene-preview/calculate": {
      "post": {
        "operationId": "calculateKerfwiseScenePreview",
        "summary": "Light a Kerfwise concept and inspect beauty, color, normals, depth and object IDs.",
        "description": "Render a small deterministic SVG preview from a Form Studio project or Render Desk recipe. Download the preview and editable recipe, then continue locally in Kerfwise with higher resolution and sampling.\n\nMethodology:\n- Independent concept renderer for Kerfwise extrusions. It uses orthographic camera rays, direct light with sampled soft shadows, short-range ambient occlusion and one metal reflection. It does not run MoonRay or import its scenes.\n- Coordinates are millimetres, Z up. Hidden solids are excluded. Source colors are decoded from sRGB for lighting; the beauty pass returns display sRGB. Normal, depth and object-ID passes are display diagnostics, not EXR or Cryptomatte.\n- Seeds and sample positions are deterministic. API previews allow 32–128 pixels per side and 1–4 samples, at most 65536 pixel samples. Render Desk supports larger local previews, at most 4096 visible triangles, 384000 pixels and 6 million pixel samples.\n\nConcept previews only. No MoonRay execution, scene import, unbiased path tracing or EXR output.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "kerfwise_scene_preview",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KerfwiseScenePreviewInput"
              },
              "examples": {
                "example1": {
                  "summary": "Terraced forms in soft light",
                  "value": {}
                },
                "example2": {
                  "summary": "Inspect surface normals",
                  "value": {
                    "pass": "normal",
                    "samples": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KerfwiseScenePreviewResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/kerfwise-render-budget/calculate": {
      "post": {
        "operationId": "calculateKerfwiseRenderBudget",
        "summary": "Compare image size, sample workload and a simple sampling-noise estimate.",
        "description": "Plan a local Render Desk image before starting the worker. Compare the chosen sample count with a target, see pixel and ray bounds, buffer estimates and the expected relative sampling noise under independent samples.\n\nMethodology:\n- Pixel samples = width × height × samples. Each pixel sample traces one primary ray and at most four secondary rays in the concept renderer. These are upper bounds, not measured render times.\n- Independent Monte Carlo sampling has standard error proportional to 1/√N when variance is finite. The estimate excludes bias, geometry aliasing and correlated samples; it is not a promised quality score.\n- Buffer estimate reserves six floating-point RGBA accumulators and six RGBA byte outputs. The current single-pass worker allocates less; geometry, browser and export memory are additional. Local limits: 384000 pixels and 6 million pixel samples.\n\nWorkload and sampling-noise estimates only. Actual render time and image quality depend on the scene and device.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "kerfwise_render_budget",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KerfwiseRenderBudgetInput"
              },
              "examples": {
                "example1": {
                  "summary": "Standard versus fine preview",
                  "value": {}
                },
                "example2": {
                  "summary": "Draft preview",
                  "value": {
                    "width": 320,
                    "height": 240,
                    "samples": 2,
                    "target": 8
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KerfwiseRenderBudgetResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/kerfwise-profile-extruder/calculate": {
      "post": {
        "operationId": "calculateKerfwiseProfileExtruder",
        "summary": "Turn a simple footprint into a closed 3D solid with OBJ, STL and editable geometry.",
        "description": "Enter a polygon footprint and extrusion height to make a closed 3D prism. Set its placement and rotation, measure surface and volume, and open the editable result in Kerfwise Form Studio.\n\nMethodology:\n- All geometry is in millimetres, with Z up. Accept one simple, non-self-intersecting footprint without holes, 3–64 vertices and at least 1 mm² area. Extrude vertically, then rotate around Z and translate.\n- Triangulate both caps and each side with consistent outward winding. Each separate prism is closed; intersecting prisms are not unioned. Surface = 2 × footprint area + perimeter × height; gross volume = footprint area × height.\n- Models contain at most 128 solids and eight saved camera views. Coordinates, heights and profiles are bounded. OBJ and ASCII STL use millimetres; STL does not embed a unit. These are concept models, separate from cabinet cut lists or machining instructions.\n\nConcept geometry only. Separate shells are not fused; gross quantities include overlaps. Not cabinet manufacturing output.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "kerfwise_profile_extruder",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KerfwiseProfileExtruderInput"
              },
              "examples": {
                "example1": {
                  "summary": "An L-shaped extrusion",
                  "value": {
                    "points": "0,0\n1200,0\n1200,400\n500,400\n500,1000\n0,1000",
                    "height": 600
                  }
                },
                "example2": {
                  "summary": "Raised rectangular plinth",
                  "value": {
                    "points": "0,0;800,0;800,500;0,500",
                    "height": 180,
                    "z": 100,
                    "rotation": 30
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KerfwiseProfileExtruderResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/kerfwise-model-report/calculate": {
      "post": {
        "operationId": "calculateKerfwiseModelReport",
        "summary": "Measure a form model by tag and export its geometry as OBJ or STL.",
        "description": "Inspect a Kerfwise Form Studio project for object bounds, gross surface area, volume and triangle counts. Group quantities by tag and download the normalized project, OBJ and STL files.\n\nMethodology:\n- All geometry is in millimetres, with Z up. Accept one simple, non-self-intersecting footprint without holes, 3–64 vertices and at least 1 mm² area. Extrude vertically, then rotate around Z and translate.\n- Triangulate both caps and each side with consistent outward winding. Each separate prism is closed; intersecting prisms are not unioned. Surface = 2 × footprint area + perimeter × height; gross volume = footprint area × height.\n- Models contain at most 128 solids and eight saved camera views. Coordinates, heights and profiles are bounded. OBJ and ASCII STL use millimetres; STL does not embed a unit. These are concept models, separate from cabinet cut lists or machining instructions.\n- Visible-only export is on by default. Hidden solids can be included explicitly. Report bounds are axis-aligned after rotation; quantities sum complete solids, so touching internal faces and overlapping volumes remain counted.\n\nGross quantities count complete solids, including overlaps and internal faces. STL is unitless; import it as millimetres.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "kerfwise_model_report",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KerfwiseModelReportInput"
              },
              "examples": {
                "example1": {
                  "summary": "L-shaped concept model",
                  "value": {
                    "project": "{\"format\":\"kerfwise-form\",\"version\":1,\"name\":\"L-shaped counter\",\"units\":\"mm\",\"grid\":100,\"snap\":true,\"objects\":[{\"id\":\"counter\",\"name\":\"Counter volume\",\"tag\":\"Concepts\",\"color\":\"#bda483\",\"profile\":[[0,0],[2800,0],[2800,650],[900,650],[900,2200],[0,2200]],\"height\":900,\"x\":-1400,\"y\":-1100,\"z\":0,\"rotation\":0,\"visible\":true,\"locked\":false}],\"scenes\":[{\"name\":\"Overview\",\"camera\":{\"azimuth\":-45,\"elevation\":32,\"target\":[0,0,450],\"span\":4223.8045646076}},{\"name\":\"Plan view\",\"camera\":{\"azimuth\":-90,\"elevation\":90,\"target\":[0,0,450],\"span\":4223.8045646076}}]}",
                    "visibleOnly": true
                  }
                },
                "example2": {
                  "summary": "Tagged pavilion quantities",
                  "value": {
                    "project": "{\"format\":\"kerfwise-form\",\"version\":1,\"name\":\"Courtyard pavilion\",\"units\":\"mm\",\"grid\":100,\"snap\":true,\"objects\":[{\"id\":\"part-1\",\"name\":\"Platform\",\"tag\":\"Architecture\",\"color\":\"#d2c6b5\",\"profile\":[[0,0],[5000,0],[5000,3600],[0,3600]],\"height\":150,\"x\":-2500,\"y\":-1800,\"z\":0,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-2\",\"name\":\"Column\",\"tag\":\"Architecture\",\"color\":\"#73938a\",\"profile\":[[0,0],[200,0],[200,200],[0,200]],\"height\":2700,\"x\":-2200,\"y\":-1500,\"z\":150,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-3\",\"name\":\"Column\",\"tag\":\"Architecture\",\"color\":\"#73938a\",\"profile\":[[0,0],[200,0],[200,200],[0,200]],\"height\":2700,\"x\":-2200,\"y\":1300,\"z\":150,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-4\",\"name\":\"Column\",\"tag\":\"Architecture\",\"color\":\"#73938a\",\"profile\":[[0,0],[200,0],[200,200],[0,200]],\"height\":2700,\"x\":2000,\"y\":-1500,\"z\":150,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-5\",\"name\":\"Column\",\"tag\":\"Architecture\",\"color\":\"#73938a\",\"profile\":[[0,0],[200,0],[200,200],[0,200]],\"height\":2700,\"x\":2000,\"y\":1300,\"z\":150,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-6\",\"name\":\"Canopy\",\"tag\":\"Architecture\",\"color\":\"#b58f62\",\"profile\":[[0,0],[5400,0],[5400,4000],[0,4000]],\"height\":180,\"x\":-2700,\"y\":-2000,\"z\":2850,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-7\",\"name\":\"Bench\",\"tag\":\"Furniture\",\"color\":\"#c7ac86\",\"profile\":[[0,0],[2800,0],[2800,500],[0,500]],\"height\":450,\"x\":-1400,\"y\":700,\"z\":150,\"rotation\":0,\"visible\":true,\"locked\":false}],\"scenes\":[{\"name\":\"Overview\",\"camera\":{\"azimuth\":-45,\"elevation\":32,\"target\":[0,0,1515],\"span\":8477.372249111158}},{\"name\":\"Plan view\",\"camera\":{\"azimuth\":-90,\"elevation\":90,\"target\":[0,0,1515],\"span\":8477.372249111158}}]}",
                    "visibleOnly": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KerfwiseModelReportResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/workflows": {
      "get": {
        "operationId": "listWorkflows",
        "summary": "Multi-tool workflows",
        "responses": {
          "200": {
            "description": "Workflow list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "RenderloomVoxelHeightGridInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "grid": {
            "title": "Height grid (0–64; one row per line)",
            "type": "string",
            "maxLength": 16000,
            "default": "0, 1, 2, 1, 0\n1, 2, 3, 2, 1\n2, 3, 4, 3, 2\n1, 2, 3, 2, 1\n0, 1, 2, 1, 0"
          },
          "base": {
            "title": "Base color (#rrggbb)",
            "type": "string",
            "maxLength": 7,
            "default": "#8b5e3c"
          },
          "top": {
            "title": "Top color (#rrggbb)",
            "type": "string",
            "maxLength": 7,
            "default": "#7ba85c"
          }
        },
        "required": []
      },
      "RenderloomVoxelHeightGridResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "report",
              "preview",
              "mesh",
              "projectFile",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "width",
                  "height",
                  "depth",
                  "palette",
                  "voxels"
                ],
                "properties": {
                  "format": {
                    "const": "renderloom-voxel"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 64
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 64
                  },
                  "depth": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 64
                  },
                  "palette": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 64,
                    "items": {
                      "type": "string",
                      "pattern": "^#[0-9a-fA-F]{6}$"
                    }
                  },
                  "voxels": {
                    "type": "array",
                    "maxItems": 32768,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "x",
                        "y",
                        "z",
                        "color"
                      ],
                      "properties": {
                        "x": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        },
                        "y": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        },
                        "z": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        },
                        "color": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        }
                      }
                    }
                  }
                }
              },
              "report": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "width",
                  "height",
                  "depth",
                  "voxels",
                  "surfaceFaces",
                  "usedColors",
                  "paletteColors"
                ],
                "properties": {
                  "width": {
                    "type": "integer"
                  },
                  "height": {
                    "type": "integer"
                  },
                  "depth": {
                    "type": "integer"
                  },
                  "voxels": {
                    "type": "integer"
                  },
                  "surfaceFaces": {
                    "type": "integer"
                  },
                  "usedColors": {
                    "type": "integer"
                  },
                  "paletteColors": {
                    "type": "integer"
                  }
                }
              },
              "preview": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "mesh": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "projectFile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "RenderloomVoxelInspectorInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "project": {
            "title": "Renderloom voxel project JSON",
            "type": "string",
            "maxLength": 2000000,
            "default": "{\"format\":\"renderloom-voxel\",\"version\":1,\"name\":\"Little house\",\"width\":16,\"height\":16,\"depth\":16,\"palette\":[\"#354b4b\",\"#f0b55b\",\"#e9dcc3\",\"#cf765d\",\"#7aa89a\",\"#8aa4b2\",\"#785e52\",\"#f8f4e9\"],\"voxels\":[{\"x\":3,\"y\":3,\"z\":0,\"color\":4},{\"x\":4,\"y\":3,\"z\":0,\"color\":4},{\"x\":5,\"y\":3,\"z\":0,\"color\":4},{\"x\":6,\"y\":3,\"z\":0,\"color\":4},{\"x\":7,\"y\":3,\"z\":0,\"color\":4},{\"x\":8,\"y\":3,\"z\":0,\"color\":4},{\"x\":9,\"y\":3,\"z\":0,\"color\":4},{\"x\":10,\"y\":3,\"z\":0,\"color\":4},{\"x\":11,\"y\":3,\"z\":0,\"color\":4},{\"x\":12,\"y\":3,\"z\":0,\"color\":4},{\"x\":3,\"y\":4,\"z\":0,\"color\":4},{\"x\":4,\"y\":4,\"z\":0,\"color\":4},{\"x\":5,\"y\":4,\"z\":0,\"color\":4},{\"x\":6,\"y\":4,\"z\":0,\"color\":4},{\"x\":7,\"y\":4,\"z\":0,\"color\":4},{\"x\":8,\"y\":4,\"z\":0,\"color\":4},{\"x\":9,\"y\":4,\"z\":0,\"color\":4},{\"x\":10,\"y\":4,\"z\":0,\"color\":4},{\"x\":11,\"y\":4,\"z\":0,\"color\":4},{\"x\":12,\"y\":4,\"z\":0,\"color\":4},{\"x\":3,\"y\":5,\"z\":0,\"color\":4},{\"x\":4,\"y\":5,\"z\":0,\"color\":4},{\"x\":5,\"y\":5,\"z\":0,\"color\":4},{\"x\":6,\"y\":5,\"z\":0,\"color\":4},{\"x\":7,\"y\":5,\"z\":0,\"color\":4},{\"x\":8,\"y\":5,\"z\":0,\"color\":4},{\"x\":9,\"y\":5,\"z\":0,\"color\":4},{\"x\":10,\"y\":5,\"z\":0,\"color\":4},{\"x\":11,\"y\":5,\"z\":0,\"color\":4},{\"x\":12,\"y\":5,\"z\":0,\"color\":4},{\"x\":3,\"y\":6,\"z\":0,\"color\":4},{\"x\":4,\"y\":6,\"z\":0,\"color\":4},{\"x\":5,\"y\":6,\"z\":0,\"color\":4},{\"x\":6,\"y\":6,\"z\":0,\"color\":4},{\"x\":7,\"y\":6,\"z\":0,\"color\":4},{\"x\":8,\"y\":6,\"z\":0,\"color\":4},{\"x\":9,\"y\":6,\"z\":0,\"color\":4},{\"x\":10,\"y\":6,\"z\":0,\"color\":4},{\"x\":11,\"y\":6,\"z\":0,\"color\":4},{\"x\":12,\"y\":6,\"z\":0,\"color\":4},{\"x\":3,\"y\":7,\"z\":0,\"color\":4},{\"x\":4,\"y\":7,\"z\":0,\"color\":4},{\"x\":5,\"y\":7,\"z\":0,\"color\":4},{\"x\":6,\"y\":7,\"z\":0,\"color\":4},{\"x\":7,\"y\":7,\"z\":0,\"color\":4},{\"x\":8,\"y\":7,\"z\":0,\"color\":4},{\"x\":9,\"y\":7,\"z\":0,\"color\":4},{\"x\":10,\"y\":7,\"z\":0,\"color\":4},{\"x\":11,\"y\":7,\"z\":0,\"color\":4},{\"x\":12,\"y\":7,\"z\":0,\"color\":4},{\"x\":3,\"y\":8,\"z\":0,\"color\":4},{\"x\":4,\"y\":8,\"z\":0,\"color\":4},{\"x\":5,\"y\":8,\"z\":0,\"color\":4},{\"x\":6,\"y\":8,\"z\":0,\"color\":4},{\"x\":7,\"y\":8,\"z\":0,\"color\":4},{\"x\":8,\"y\":8,\"z\":0,\"color\":4},{\"x\":9,\"y\":8,\"z\":0,\"color\":4},{\"x\":10,\"y\":8,\"z\":0,\"color\":4},{\"x\":11,\"y\":8,\"z\":0,\"color\":4},{\"x\":12,\"y\":8,\"z\":0,\"color\":4},{\"x\":3,\"y\":9,\"z\":0,\"color\":4},{\"x\":4,\"y\":9,\"z\":0,\"color\":4},{\"x\":5,\"y\":9,\"z\":0,\"color\":4},{\"x\":6,\"y\":9,\"z\":0,\"color\":4},{\"x\":7,\"y\":9,\"z\":0,\"color\":4},{\"x\":8,\"y\":9,\"z\":0,\"color\":4},{\"x\":9,\"y\":9,\"z\":0,\"color\":4},{\"x\":10,\"y\":9,\"z\":0,\"color\":4},{\"x\":11,\"y\":9,\"z\":0,\"color\":4},{\"x\":12,\"y\":9,\"z\":0,\"color\":4},{\"x\":3,\"y\":10,\"z\":0,\"color\":4},{\"x\":4,\"y\":10,\"z\":0,\"color\":4},{\"x\":5,\"y\":10,\"z\":0,\"color\":4},{\"x\":6,\"y\":10,\"z\":0,\"color\":4},{\"x\":7,\"y\":10,\"z\":0,\"color\":4},{\"x\":8,\"y\":10,\"z\":0,\"color\":4},{\"x\":9,\"y\":10,\"z\":0,\"color\":4},{\"x\":10,\"y\":10,\"z\":0,\"color\":4},{\"x\":11,\"y\":10,\"z\":0,\"color\":4},{\"x\":12,\"y\":10,\"z\":0,\"color\":4},{\"x\":3,\"y\":11,\"z\":0,\"color\":4},{\"x\":4,\"y\":11,\"z\":0,\"color\":4},{\"x\":5,\"y\":11,\"z\":0,\"color\":4},{\"x\":6,\"y\":11,\"z\":0,\"color\":4},{\"x\":7,\"y\":11,\"z\":0,\"color\":4},{\"x\":8,\"y\":11,\"z\":0,\"color\":4},{\"x\":9,\"y\":11,\"z\":0,\"color\":4},{\"x\":10,\"y\":11,\"z\":0,\"color\":4},{\"x\":11,\"y\":11,\"z\":0,\"color\":4},{\"x\":12,\"y\":11,\"z\":0,\"color\":4},{\"x\":3,\"y\":12,\"z\":0,\"color\":4},{\"x\":4,\"y\":12,\"z\":0,\"color\":4},{\"x\":5,\"y\":12,\"z\":0,\"color\":4},{\"x\":6,\"y\":12,\"z\":0,\"color\":4},{\"x\":7,\"y\":12,\"z\":0,\"color\":4},{\"x\":8,\"y\":12,\"z\":0,\"color\":4},{\"x\":9,\"y\":12,\"z\":0,\"color\":4},{\"x\":10,\"y\":12,\"z\":0,\"color\":4},{\"x\":11,\"y\":12,\"z\":0,\"color\":4},{\"x\":12,\"y\":12,\"z\":0,\"color\":4},{\"x\":4,\"y\":4,\"z\":1,\"color\":2},{\"x\":5,\"y\":4,\"z\":1,\"color\":2},{\"x\":6,\"y\":4,\"z\":1,\"color\":2},{\"x\":7,\"y\":4,\"z\":1,\"color\":2},{\"x\":8,\"y\":4,\"z\":1,\"color\":2},{\"x\":9,\"y\":4,\"z\":1,\"color\":2},{\"x\":10,\"y\":4,\"z\":1,\"color\":2},{\"x\":11,\"y\":4,\"z\":1,\"color\":2},{\"x\":4,\"y\":5,\"z\":1,\"color\":2},{\"x\":5,\"y\":5,\"z\":1,\"color\":2},{\"x\":6,\"y\":5,\"z\":1,\"color\":2},{\"x\":7,\"y\":5,\"z\":1,\"color\":2},{\"x\":8,\"y\":5,\"z\":1,\"color\":2},{\"x\":9,\"y\":5,\"z\":1,\"color\":2},{\"x\":10,\"y\":5,\"z\":1,\"color\":2},{\"x\":11,\"y\":5,\"z\":1,\"color\":2},{\"x\":4,\"y\":6,\"z\":1,\"color\":2},{\"x\":5,\"y\":6,\"z\":1,\"color\":2},{\"x\":6,\"y\":6,\"z\":1,\"color\":2},{\"x\":7,\"y\":6,\"z\":1,\"color\":2},{\"x\":8,\"y\":6,\"z\":1,\"color\":2},{\"x\":9,\"y\":6,\"z\":1,\"color\":2},{\"x\":10,\"y\":6,\"z\":1,\"color\":2},{\"x\":11,\"y\":6,\"z\":1,\"color\":2},{\"x\":4,\"y\":7,\"z\":1,\"color\":2},{\"x\":5,\"y\":7,\"z\":1,\"color\":2},{\"x\":6,\"y\":7,\"z\":1,\"color\":2},{\"x\":7,\"y\":7,\"z\":1,\"color\":2},{\"x\":8,\"y\":7,\"z\":1,\"color\":2},{\"x\":9,\"y\":7,\"z\":1,\"color\":2},{\"x\":10,\"y\":7,\"z\":1,\"color\":2},{\"x\":11,\"y\":7,\"z\":1,\"color\":2},{\"x\":4,\"y\":8,\"z\":1,\"color\":2},{\"x\":5,\"y\":8,\"z\":1,\"color\":2},{\"x\":6,\"y\":8,\"z\":1,\"color\":2},{\"x\":7,\"y\":8,\"z\":1,\"color\":2},{\"x\":8,\"y\":8,\"z\":1,\"color\":2},{\"x\":9,\"y\":8,\"z\":1,\"color\":2},{\"x\":10,\"y\":8,\"z\":1,\"color\":2},{\"x\":11,\"y\":8,\"z\":1,\"color\":2},{\"x\":4,\"y\":9,\"z\":1,\"color\":2},{\"x\":5,\"y\":9,\"z\":1,\"color\":2},{\"x\":6,\"y\":9,\"z\":1,\"color\":2},{\"x\":7,\"y\":9,\"z\":1,\"color\":2},{\"x\":8,\"y\":9,\"z\":1,\"color\":2},{\"x\":9,\"y\":9,\"z\":1,\"color\":2},{\"x\":10,\"y\":9,\"z\":1,\"color\":2},{\"x\":11,\"y\":9,\"z\":1,\"color\":2},{\"x\":4,\"y\":10,\"z\":1,\"color\":2},{\"x\":5,\"y\":10,\"z\":1,\"color\":2},{\"x\":6,\"y\":10,\"z\":1,\"color\":2},{\"x\":7,\"y\":10,\"z\":1,\"color\":2},{\"x\":8,\"y\":10,\"z\":1,\"color\":2},{\"x\":9,\"y\":10,\"z\":1,\"color\":2},{\"x\":10,\"y\":10,\"z\":1,\"color\":2},{\"x\":11,\"y\":10,\"z\":1,\"color\":2},{\"x\":4,\"y\":11,\"z\":1,\"color\":2},{\"x\":5,\"y\":11,\"z\":1,\"color\":2},{\"x\":6,\"y\":11,\"z\":1,\"color\":2},{\"x\":7,\"y\":11,\"z\":1,\"color\":6},{\"x\":8,\"y\":11,\"z\":1,\"color\":6},{\"x\":9,\"y\":11,\"z\":1,\"color\":2},{\"x\":10,\"y\":11,\"z\":1,\"color\":2},{\"x\":11,\"y\":11,\"z\":1,\"color\":2},{\"x\":4,\"y\":4,\"z\":2,\"color\":2},{\"x\":5,\"y\":4,\"z\":2,\"color\":2},{\"x\":6,\"y\":4,\"z\":2,\"color\":2},{\"x\":7,\"y\":4,\"z\":2,\"color\":2},{\"x\":8,\"y\":4,\"z\":2,\"color\":2},{\"x\":9,\"y\":4,\"z\":2,\"color\":2},{\"x\":10,\"y\":4,\"z\":2,\"color\":2},{\"x\":11,\"y\":4,\"z\":2,\"color\":2},{\"x\":4,\"y\":5,\"z\":2,\"color\":2},{\"x\":5,\"y\":5,\"z\":2,\"color\":2},{\"x\":6,\"y\":5,\"z\":2,\"color\":2},{\"x\":7,\"y\":5,\"z\":2,\"color\":2},{\"x\":8,\"y\":5,\"z\":2,\"color\":2},{\"x\":9,\"y\":5,\"z\":2,\"color\":2},{\"x\":10,\"y\":5,\"z\":2,\"color\":2},{\"x\":11,\"y\":5,\"z\":2,\"color\":2},{\"x\":4,\"y\":6,\"z\":2,\"color\":2},{\"x\":5,\"y\":6,\"z\":2,\"color\":2},{\"x\":6,\"y\":6,\"z\":2,\"color\":2},{\"x\":7,\"y\":6,\"z\":2,\"color\":2},{\"x\":8,\"y\":6,\"z\":2,\"color\":2},{\"x\":9,\"y\":6,\"z\":2,\"color\":2},{\"x\":10,\"y\":6,\"z\":2,\"color\":2},{\"x\":11,\"y\":6,\"z\":2,\"color\":2},{\"x\":4,\"y\":7,\"z\":2,\"color\":2},{\"x\":5,\"y\":7,\"z\":2,\"color\":2},{\"x\":6,\"y\":7,\"z\":2,\"color\":2},{\"x\":7,\"y\":7,\"z\":2,\"color\":2},{\"x\":8,\"y\":7,\"z\":2,\"color\":2},{\"x\":9,\"y\":7,\"z\":2,\"color\":2},{\"x\":10,\"y\":7,\"z\":2,\"color\":2},{\"x\":11,\"y\":7,\"z\":2,\"color\":2},{\"x\":4,\"y\":8,\"z\":2,\"color\":2},{\"x\":5,\"y\":8,\"z\":2,\"color\":2},{\"x\":6,\"y\":8,\"z\":2,\"color\":2},{\"x\":7,\"y\":8,\"z\":2,\"color\":2},{\"x\":8,\"y\":8,\"z\":2,\"color\":2},{\"x\":9,\"y\":8,\"z\":2,\"color\":2},{\"x\":10,\"y\":8,\"z\":2,\"color\":2},{\"x\":11,\"y\":8,\"z\":2,\"color\":2},{\"x\":4,\"y\":9,\"z\":2,\"color\":2},{\"x\":5,\"y\":9,\"z\":2,\"color\":2},{\"x\":6,\"y\":9,\"z\":2,\"color\":2},{\"x\":7,\"y\":9,\"z\":2,\"color\":2},{\"x\":8,\"y\":9,\"z\":2,\"color\":2},{\"x\":9,\"y\":9,\"z\":2,\"color\":2},{\"x\":10,\"y\":9,\"z\":2,\"color\":2},{\"x\":11,\"y\":9,\"z\":2,\"color\":2},{\"x\":4,\"y\":10,\"z\":2,\"color\":2},{\"x\":5,\"y\":10,\"z\":2,\"color\":2},{\"x\":6,\"y\":10,\"z\":2,\"color\":2},{\"x\":7,\"y\":10,\"z\":2,\"color\":2},{\"x\":8,\"y\":10,\"z\":2,\"color\":2},{\"x\":9,\"y\":10,\"z\":2,\"color\":2},{\"x\":10,\"y\":10,\"z\":2,\"color\":2},{\"x\":11,\"y\":10,\"z\":2,\"color\":2},{\"x\":4,\"y\":11,\"z\":2,\"color\":2},{\"x\":5,\"y\":11,\"z\":2,\"color\":2},{\"x\":6,\"y\":11,\"z\":2,\"color\":2},{\"x\":7,\"y\":11,\"z\":2,\"color\":6},{\"x\":8,\"y\":11,\"z\":2,\"color\":6},{\"x\":9,\"y\":11,\"z\":2,\"color\":2},{\"x\":10,\"y\":11,\"z\":2,\"color\":2},{\"x\":11,\"y\":11,\"z\":2,\"color\":2},{\"x\":4,\"y\":4,\"z\":3,\"color\":2},{\"x\":5,\"y\":4,\"z\":3,\"color\":2},{\"x\":6,\"y\":4,\"z\":3,\"color\":2},{\"x\":7,\"y\":4,\"z\":3,\"color\":2},{\"x\":8,\"y\":4,\"z\":3,\"color\":2},{\"x\":9,\"y\":4,\"z\":3,\"color\":2},{\"x\":10,\"y\":4,\"z\":3,\"color\":2},{\"x\":11,\"y\":4,\"z\":3,\"color\":2},{\"x\":4,\"y\":5,\"z\":3,\"color\":2},{\"x\":5,\"y\":5,\"z\":3,\"color\":2},{\"x\":6,\"y\":5,\"z\":3,\"color\":2},{\"x\":7,\"y\":5,\"z\":3,\"color\":2},{\"x\":8,\"y\":5,\"z\":3,\"color\":2},{\"x\":9,\"y\":5,\"z\":3,\"color\":2},{\"x\":10,\"y\":5,\"z\":3,\"color\":2},{\"x\":11,\"y\":5,\"z\":3,\"color\":2},{\"x\":4,\"y\":6,\"z\":3,\"color\":2},{\"x\":5,\"y\":6,\"z\":3,\"color\":2},{\"x\":6,\"y\":6,\"z\":3,\"color\":2},{\"x\":7,\"y\":6,\"z\":3,\"color\":2},{\"x\":8,\"y\":6,\"z\":3,\"color\":2},{\"x\":9,\"y\":6,\"z\":3,\"color\":2},{\"x\":10,\"y\":6,\"z\":3,\"color\":2},{\"x\":11,\"y\":6,\"z\":3,\"color\":2},{\"x\":4,\"y\":7,\"z\":3,\"color\":2},{\"x\":5,\"y\":7,\"z\":3,\"color\":2},{\"x\":6,\"y\":7,\"z\":3,\"color\":2},{\"x\":7,\"y\":7,\"z\":3,\"color\":2},{\"x\":8,\"y\":7,\"z\":3,\"color\":2},{\"x\":9,\"y\":7,\"z\":3,\"color\":2},{\"x\":10,\"y\":7,\"z\":3,\"color\":2},{\"x\":11,\"y\":7,\"z\":3,\"color\":2},{\"x\":4,\"y\":8,\"z\":3,\"color\":2},{\"x\":5,\"y\":8,\"z\":3,\"color\":2},{\"x\":6,\"y\":8,\"z\":3,\"color\":2},{\"x\":7,\"y\":8,\"z\":3,\"color\":2},{\"x\":8,\"y\":8,\"z\":3,\"color\":2},{\"x\":9,\"y\":8,\"z\":3,\"color\":2},{\"x\":10,\"y\":8,\"z\":3,\"color\":2},{\"x\":11,\"y\":8,\"z\":3,\"color\":2},{\"x\":4,\"y\":9,\"z\":3,\"color\":2},{\"x\":5,\"y\":9,\"z\":3,\"color\":2},{\"x\":6,\"y\":9,\"z\":3,\"color\":2},{\"x\":7,\"y\":9,\"z\":3,\"color\":2},{\"x\":8,\"y\":9,\"z\":3,\"color\":2},{\"x\":9,\"y\":9,\"z\":3,\"color\":2},{\"x\":10,\"y\":9,\"z\":3,\"color\":2},{\"x\":11,\"y\":9,\"z\":3,\"color\":2},{\"x\":4,\"y\":10,\"z\":3,\"color\":2},{\"x\":5,\"y\":10,\"z\":3,\"color\":2},{\"x\":6,\"y\":10,\"z\":3,\"color\":2},{\"x\":7,\"y\":10,\"z\":3,\"color\":2},{\"x\":8,\"y\":10,\"z\":3,\"color\":2},{\"x\":9,\"y\":10,\"z\":3,\"color\":2},{\"x\":10,\"y\":10,\"z\":3,\"color\":2},{\"x\":11,\"y\":10,\"z\":3,\"color\":2},{\"x\":4,\"y\":11,\"z\":3,\"color\":2},{\"x\":5,\"y\":11,\"z\":3,\"color\":2},{\"x\":6,\"y\":11,\"z\":3,\"color\":2},{\"x\":7,\"y\":11,\"z\":3,\"color\":6},{\"x\":8,\"y\":11,\"z\":3,\"color\":6},{\"x\":9,\"y\":11,\"z\":3,\"color\":2},{\"x\":10,\"y\":11,\"z\":3,\"color\":2},{\"x\":11,\"y\":11,\"z\":3,\"color\":2},{\"x\":4,\"y\":4,\"z\":4,\"color\":2},{\"x\":5,\"y\":4,\"z\":4,\"color\":2},{\"x\":6,\"y\":4,\"z\":4,\"color\":2},{\"x\":7,\"y\":4,\"z\":4,\"color\":2},{\"x\":8,\"y\":4,\"z\":4,\"color\":2},{\"x\":9,\"y\":4,\"z\":4,\"color\":2},{\"x\":10,\"y\":4,\"z\":4,\"color\":2},{\"x\":11,\"y\":4,\"z\":4,\"color\":2},{\"x\":4,\"y\":5,\"z\":4,\"color\":2},{\"x\":5,\"y\":5,\"z\":4,\"color\":2},{\"x\":6,\"y\":5,\"z\":4,\"color\":2},{\"x\":7,\"y\":5,\"z\":4,\"color\":2},{\"x\":8,\"y\":5,\"z\":4,\"color\":2},{\"x\":9,\"y\":5,\"z\":4,\"color\":2},{\"x\":10,\"y\":5,\"z\":4,\"color\":2},{\"x\":11,\"y\":5,\"z\":4,\"color\":2},{\"x\":4,\"y\":6,\"z\":4,\"color\":2},{\"x\":5,\"y\":6,\"z\":4,\"color\":2},{\"x\":6,\"y\":6,\"z\":4,\"color\":2},{\"x\":7,\"y\":6,\"z\":4,\"color\":2},{\"x\":8,\"y\":6,\"z\":4,\"color\":2},{\"x\":9,\"y\":6,\"z\":4,\"color\":2},{\"x\":10,\"y\":6,\"z\":4,\"color\":2},{\"x\":11,\"y\":6,\"z\":4,\"color\":2},{\"x\":4,\"y\":7,\"z\":4,\"color\":2},{\"x\":5,\"y\":7,\"z\":4,\"color\":2},{\"x\":6,\"y\":7,\"z\":4,\"color\":2},{\"x\":7,\"y\":7,\"z\":4,\"color\":2},{\"x\":8,\"y\":7,\"z\":4,\"color\":2},{\"x\":9,\"y\":7,\"z\":4,\"color\":2},{\"x\":10,\"y\":7,\"z\":4,\"color\":2},{\"x\":11,\"y\":7,\"z\":4,\"color\":2},{\"x\":4,\"y\":8,\"z\":4,\"color\":2},{\"x\":5,\"y\":8,\"z\":4,\"color\":2},{\"x\":6,\"y\":8,\"z\":4,\"color\":2},{\"x\":7,\"y\":8,\"z\":4,\"color\":2},{\"x\":8,\"y\":8,\"z\":4,\"color\":2},{\"x\":9,\"y\":8,\"z\":4,\"color\":2},{\"x\":10,\"y\":8,\"z\":4,\"color\":2},{\"x\":11,\"y\":8,\"z\":4,\"color\":2},{\"x\":4,\"y\":9,\"z\":4,\"color\":2},{\"x\":5,\"y\":9,\"z\":4,\"color\":2},{\"x\":6,\"y\":9,\"z\":4,\"color\":2},{\"x\":7,\"y\":9,\"z\":4,\"color\":2},{\"x\":8,\"y\":9,\"z\":4,\"color\":2},{\"x\":9,\"y\":9,\"z\":4,\"color\":2},{\"x\":10,\"y\":9,\"z\":4,\"color\":2},{\"x\":11,\"y\":9,\"z\":4,\"color\":2},{\"x\":4,\"y\":10,\"z\":4,\"color\":2},{\"x\":5,\"y\":10,\"z\":4,\"color\":2},{\"x\":6,\"y\":10,\"z\":4,\"color\":2},{\"x\":7,\"y\":10,\"z\":4,\"color\":2},{\"x\":8,\"y\":10,\"z\":4,\"color\":2},{\"x\":9,\"y\":10,\"z\":4,\"color\":2},{\"x\":10,\"y\":10,\"z\":4,\"color\":2},{\"x\":11,\"y\":10,\"z\":4,\"color\":2},{\"x\":4,\"y\":11,\"z\":4,\"color\":2},{\"x\":5,\"y\":11,\"z\":4,\"color\":2},{\"x\":6,\"y\":11,\"z\":4,\"color\":2},{\"x\":7,\"y\":11,\"z\":4,\"color\":6},{\"x\":8,\"y\":11,\"z\":4,\"color\":6},{\"x\":9,\"y\":11,\"z\":4,\"color\":2},{\"x\":10,\"y\":11,\"z\":4,\"color\":2},{\"x\":11,\"y\":11,\"z\":4,\"color\":2},{\"x\":4,\"y\":4,\"z\":5,\"color\":2},{\"x\":5,\"y\":4,\"z\":5,\"color\":2},{\"x\":6,\"y\":4,\"z\":5,\"color\":2},{\"x\":7,\"y\":4,\"z\":5,\"color\":2},{\"x\":8,\"y\":4,\"z\":5,\"color\":2},{\"x\":9,\"y\":4,\"z\":5,\"color\":2},{\"x\":10,\"y\":4,\"z\":5,\"color\":2},{\"x\":11,\"y\":4,\"z\":5,\"color\":2},{\"x\":4,\"y\":5,\"z\":5,\"color\":2},{\"x\":5,\"y\":5,\"z\":5,\"color\":2},{\"x\":6,\"y\":5,\"z\":5,\"color\":2},{\"x\":7,\"y\":5,\"z\":5,\"color\":2},{\"x\":8,\"y\":5,\"z\":5,\"color\":2},{\"x\":9,\"y\":5,\"z\":5,\"color\":2},{\"x\":10,\"y\":5,\"z\":5,\"color\":2},{\"x\":11,\"y\":5,\"z\":5,\"color\":2},{\"x\":4,\"y\":6,\"z\":5,\"color\":2},{\"x\":5,\"y\":6,\"z\":5,\"color\":2},{\"x\":6,\"y\":6,\"z\":5,\"color\":2},{\"x\":7,\"y\":6,\"z\":5,\"color\":2},{\"x\":8,\"y\":6,\"z\":5,\"color\":2},{\"x\":9,\"y\":6,\"z\":5,\"color\":2},{\"x\":10,\"y\":6,\"z\":5,\"color\":2},{\"x\":11,\"y\":6,\"z\":5,\"color\":2},{\"x\":4,\"y\":7,\"z\":5,\"color\":2},{\"x\":5,\"y\":7,\"z\":5,\"color\":2},{\"x\":6,\"y\":7,\"z\":5,\"color\":2},{\"x\":7,\"y\":7,\"z\":5,\"color\":2},{\"x\":8,\"y\":7,\"z\":5,\"color\":2},{\"x\":9,\"y\":7,\"z\":5,\"color\":2},{\"x\":10,\"y\":7,\"z\":5,\"color\":2},{\"x\":11,\"y\":7,\"z\":5,\"color\":2},{\"x\":4,\"y\":8,\"z\":5,\"color\":2},{\"x\":5,\"y\":8,\"z\":5,\"color\":2},{\"x\":6,\"y\":8,\"z\":5,\"color\":2},{\"x\":7,\"y\":8,\"z\":5,\"color\":2},{\"x\":8,\"y\":8,\"z\":5,\"color\":2},{\"x\":9,\"y\":8,\"z\":5,\"color\":2},{\"x\":10,\"y\":8,\"z\":5,\"color\":2},{\"x\":11,\"y\":8,\"z\":5,\"color\":2},{\"x\":4,\"y\":9,\"z\":5,\"color\":2},{\"x\":5,\"y\":9,\"z\":5,\"color\":2},{\"x\":6,\"y\":9,\"z\":5,\"color\":2},{\"x\":7,\"y\":9,\"z\":5,\"color\":2},{\"x\":8,\"y\":9,\"z\":5,\"color\":2},{\"x\":9,\"y\":9,\"z\":5,\"color\":2},{\"x\":10,\"y\":9,\"z\":5,\"color\":2},{\"x\":11,\"y\":9,\"z\":5,\"color\":2},{\"x\":4,\"y\":10,\"z\":5,\"color\":2},{\"x\":5,\"y\":10,\"z\":5,\"color\":2},{\"x\":6,\"y\":10,\"z\":5,\"color\":2},{\"x\":7,\"y\":10,\"z\":5,\"color\":2},{\"x\":8,\"y\":10,\"z\":5,\"color\":2},{\"x\":9,\"y\":10,\"z\":5,\"color\":2},{\"x\":10,\"y\":10,\"z\":5,\"color\":2},{\"x\":11,\"y\":10,\"z\":5,\"color\":2},{\"x\":4,\"y\":11,\"z\":5,\"color\":2},{\"x\":5,\"y\":11,\"z\":5,\"color\":2},{\"x\":6,\"y\":11,\"z\":5,\"color\":2},{\"x\":7,\"y\":11,\"z\":5,\"color\":2},{\"x\":8,\"y\":11,\"z\":5,\"color\":2},{\"x\":9,\"y\":11,\"z\":5,\"color\":2},{\"x\":10,\"y\":11,\"z\":5,\"color\":2},{\"x\":11,\"y\":11,\"z\":5,\"color\":2},{\"x\":4,\"y\":4,\"z\":6,\"color\":2},{\"x\":5,\"y\":4,\"z\":6,\"color\":2},{\"x\":6,\"y\":4,\"z\":6,\"color\":2},{\"x\":7,\"y\":4,\"z\":6,\"color\":2},{\"x\":8,\"y\":4,\"z\":6,\"color\":2},{\"x\":9,\"y\":4,\"z\":6,\"color\":2},{\"x\":10,\"y\":4,\"z\":6,\"color\":2},{\"x\":11,\"y\":4,\"z\":6,\"color\":2},{\"x\":4,\"y\":5,\"z\":6,\"color\":2},{\"x\":5,\"y\":5,\"z\":6,\"color\":2},{\"x\":6,\"y\":5,\"z\":6,\"color\":2},{\"x\":7,\"y\":5,\"z\":6,\"color\":2},{\"x\":8,\"y\":5,\"z\":6,\"color\":2},{\"x\":9,\"y\":5,\"z\":6,\"color\":2},{\"x\":10,\"y\":5,\"z\":6,\"color\":2},{\"x\":11,\"y\":5,\"z\":6,\"color\":2},{\"x\":4,\"y\":6,\"z\":6,\"color\":2},{\"x\":5,\"y\":6,\"z\":6,\"color\":2},{\"x\":6,\"y\":6,\"z\":6,\"color\":2},{\"x\":7,\"y\":6,\"z\":6,\"color\":2},{\"x\":8,\"y\":6,\"z\":6,\"color\":2},{\"x\":9,\"y\":6,\"z\":6,\"color\":2},{\"x\":10,\"y\":6,\"z\":6,\"color\":2},{\"x\":11,\"y\":6,\"z\":6,\"color\":2},{\"x\":4,\"y\":7,\"z\":6,\"color\":2},{\"x\":5,\"y\":7,\"z\":6,\"color\":2},{\"x\":6,\"y\":7,\"z\":6,\"color\":2},{\"x\":7,\"y\":7,\"z\":6,\"color\":2},{\"x\":8,\"y\":7,\"z\":6,\"color\":2},{\"x\":9,\"y\":7,\"z\":6,\"color\":2},{\"x\":10,\"y\":7,\"z\":6,\"color\":2},{\"x\":11,\"y\":7,\"z\":6,\"color\":2},{\"x\":4,\"y\":8,\"z\":6,\"color\":2},{\"x\":5,\"y\":8,\"z\":6,\"color\":2},{\"x\":6,\"y\":8,\"z\":6,\"color\":2},{\"x\":7,\"y\":8,\"z\":6,\"color\":2},{\"x\":8,\"y\":8,\"z\":6,\"color\":2},{\"x\":9,\"y\":8,\"z\":6,\"color\":2},{\"x\":10,\"y\":8,\"z\":6,\"color\":2},{\"x\":11,\"y\":8,\"z\":6,\"color\":2},{\"x\":4,\"y\":9,\"z\":6,\"color\":2},{\"x\":5,\"y\":9,\"z\":6,\"color\":2},{\"x\":6,\"y\":9,\"z\":6,\"color\":2},{\"x\":7,\"y\":9,\"z\":6,\"color\":2},{\"x\":8,\"y\":9,\"z\":6,\"color\":2},{\"x\":9,\"y\":9,\"z\":6,\"color\":2},{\"x\":10,\"y\":9,\"z\":6,\"color\":2},{\"x\":11,\"y\":9,\"z\":6,\"color\":2},{\"x\":4,\"y\":10,\"z\":6,\"color\":2},{\"x\":5,\"y\":10,\"z\":6,\"color\":2},{\"x\":6,\"y\":10,\"z\":6,\"color\":2},{\"x\":7,\"y\":10,\"z\":6,\"color\":2},{\"x\":8,\"y\":10,\"z\":6,\"color\":2},{\"x\":9,\"y\":10,\"z\":6,\"color\":2},{\"x\":10,\"y\":10,\"z\":6,\"color\":2},{\"x\":11,\"y\":10,\"z\":6,\"color\":2},{\"x\":4,\"y\":11,\"z\":6,\"color\":2},{\"x\":5,\"y\":11,\"z\":6,\"color\":2},{\"x\":6,\"y\":11,\"z\":6,\"color\":2},{\"x\":7,\"y\":11,\"z\":6,\"color\":2},{\"x\":8,\"y\":11,\"z\":6,\"color\":2},{\"x\":9,\"y\":11,\"z\":6,\"color\":2},{\"x\":10,\"y\":11,\"z\":6,\"color\":2},{\"x\":11,\"y\":11,\"z\":6,\"color\":2},{\"x\":4,\"y\":4,\"z\":7,\"color\":2},{\"x\":5,\"y\":4,\"z\":7,\"color\":2},{\"x\":6,\"y\":4,\"z\":7,\"color\":2},{\"x\":7,\"y\":4,\"z\":7,\"color\":2},{\"x\":8,\"y\":4,\"z\":7,\"color\":2},{\"x\":9,\"y\":4,\"z\":7,\"color\":2},{\"x\":10,\"y\":4,\"z\":7,\"color\":2},{\"x\":11,\"y\":4,\"z\":7,\"color\":2},{\"x\":4,\"y\":5,\"z\":7,\"color\":2},{\"x\":5,\"y\":5,\"z\":7,\"color\":2},{\"x\":6,\"y\":5,\"z\":7,\"color\":2},{\"x\":7,\"y\":5,\"z\":7,\"color\":2},{\"x\":8,\"y\":5,\"z\":7,\"color\":2},{\"x\":9,\"y\":5,\"z\":7,\"color\":2},{\"x\":10,\"y\":5,\"z\":7,\"color\":2},{\"x\":11,\"y\":5,\"z\":7,\"color\":2},{\"x\":4,\"y\":6,\"z\":7,\"color\":2},{\"x\":5,\"y\":6,\"z\":7,\"color\":2},{\"x\":6,\"y\":6,\"z\":7,\"color\":2},{\"x\":7,\"y\":6,\"z\":7,\"color\":2},{\"x\":8,\"y\":6,\"z\":7,\"color\":2},{\"x\":9,\"y\":6,\"z\":7,\"color\":2},{\"x\":10,\"y\":6,\"z\":7,\"color\":2},{\"x\":11,\"y\":6,\"z\":7,\"color\":2},{\"x\":4,\"y\":7,\"z\":7,\"color\":2},{\"x\":5,\"y\":7,\"z\":7,\"color\":2},{\"x\":6,\"y\":7,\"z\":7,\"color\":2},{\"x\":7,\"y\":7,\"z\":7,\"color\":2},{\"x\":8,\"y\":7,\"z\":7,\"color\":2},{\"x\":9,\"y\":7,\"z\":7,\"color\":2},{\"x\":10,\"y\":7,\"z\":7,\"color\":2},{\"x\":11,\"y\":7,\"z\":7,\"color\":2},{\"x\":4,\"y\":8,\"z\":7,\"color\":2},{\"x\":5,\"y\":8,\"z\":7,\"color\":2},{\"x\":6,\"y\":8,\"z\":7,\"color\":2},{\"x\":7,\"y\":8,\"z\":7,\"color\":2},{\"x\":8,\"y\":8,\"z\":7,\"color\":2},{\"x\":9,\"y\":8,\"z\":7,\"color\":2},{\"x\":10,\"y\":8,\"z\":7,\"color\":2},{\"x\":11,\"y\":8,\"z\":7,\"color\":2},{\"x\":4,\"y\":9,\"z\":7,\"color\":2},{\"x\":5,\"y\":9,\"z\":7,\"color\":2},{\"x\":6,\"y\":9,\"z\":7,\"color\":2},{\"x\":7,\"y\":9,\"z\":7,\"color\":2},{\"x\":8,\"y\":9,\"z\":7,\"color\":2},{\"x\":9,\"y\":9,\"z\":7,\"color\":2},{\"x\":10,\"y\":9,\"z\":7,\"color\":2},{\"x\":11,\"y\":9,\"z\":7,\"color\":2},{\"x\":4,\"y\":10,\"z\":7,\"color\":2},{\"x\":5,\"y\":10,\"z\":7,\"color\":2},{\"x\":6,\"y\":10,\"z\":7,\"color\":2},{\"x\":7,\"y\":10,\"z\":7,\"color\":2},{\"x\":8,\"y\":10,\"z\":7,\"color\":2},{\"x\":9,\"y\":10,\"z\":7,\"color\":2},{\"x\":10,\"y\":10,\"z\":7,\"color\":2},{\"x\":11,\"y\":10,\"z\":7,\"color\":2},{\"x\":4,\"y\":11,\"z\":7,\"color\":2},{\"x\":5,\"y\":11,\"z\":7,\"color\":2},{\"x\":6,\"y\":11,\"z\":7,\"color\":2},{\"x\":7,\"y\":11,\"z\":7,\"color\":2},{\"x\":8,\"y\":11,\"z\":7,\"color\":2},{\"x\":9,\"y\":11,\"z\":7,\"color\":2},{\"x\":10,\"y\":11,\"z\":7,\"color\":2},{\"x\":11,\"y\":11,\"z\":7,\"color\":2},{\"x\":3,\"y\":3,\"z\":8,\"color\":3},{\"x\":4,\"y\":3,\"z\":8,\"color\":3},{\"x\":5,\"y\":3,\"z\":8,\"color\":3},{\"x\":6,\"y\":3,\"z\":8,\"color\":3},{\"x\":7,\"y\":3,\"z\":8,\"color\":3},{\"x\":8,\"y\":3,\"z\":8,\"color\":3},{\"x\":9,\"y\":3,\"z\":8,\"color\":3},{\"x\":10,\"y\":3,\"z\":8,\"color\":3},{\"x\":11,\"y\":3,\"z\":8,\"color\":3},{\"x\":12,\"y\":3,\"z\":8,\"color\":3},{\"x\":3,\"y\":4,\"z\":8,\"color\":3},{\"x\":4,\"y\":4,\"z\":8,\"color\":3},{\"x\":5,\"y\":4,\"z\":8,\"color\":3},{\"x\":6,\"y\":4,\"z\":8,\"color\":3},{\"x\":7,\"y\":4,\"z\":8,\"color\":3},{\"x\":8,\"y\":4,\"z\":8,\"color\":3},{\"x\":9,\"y\":4,\"z\":8,\"color\":3},{\"x\":10,\"y\":4,\"z\":8,\"color\":3},{\"x\":11,\"y\":4,\"z\":8,\"color\":3},{\"x\":12,\"y\":4,\"z\":8,\"color\":3},{\"x\":3,\"y\":5,\"z\":8,\"color\":3},{\"x\":4,\"y\":5,\"z\":8,\"color\":3},{\"x\":5,\"y\":5,\"z\":8,\"color\":3},{\"x\":6,\"y\":5,\"z\":8,\"color\":3},{\"x\":7,\"y\":5,\"z\":8,\"color\":3},{\"x\":8,\"y\":5,\"z\":8,\"color\":3},{\"x\":9,\"y\":5,\"z\":8,\"color\":3},{\"x\":10,\"y\":5,\"z\":8,\"color\":3},{\"x\":11,\"y\":5,\"z\":8,\"color\":3},{\"x\":12,\"y\":5,\"z\":8,\"color\":3},{\"x\":3,\"y\":6,\"z\":8,\"color\":3},{\"x\":4,\"y\":6,\"z\":8,\"color\":3},{\"x\":5,\"y\":6,\"z\":8,\"color\":3},{\"x\":6,\"y\":6,\"z\":8,\"color\":3},{\"x\":7,\"y\":6,\"z\":8,\"color\":3},{\"x\":8,\"y\":6,\"z\":8,\"color\":3},{\"x\":9,\"y\":6,\"z\":8,\"color\":3},{\"x\":10,\"y\":6,\"z\":8,\"color\":3},{\"x\":11,\"y\":6,\"z\":8,\"color\":3},{\"x\":12,\"y\":6,\"z\":8,\"color\":3},{\"x\":3,\"y\":7,\"z\":8,\"color\":3},{\"x\":4,\"y\":7,\"z\":8,\"color\":3},{\"x\":5,\"y\":7,\"z\":8,\"color\":3},{\"x\":6,\"y\":7,\"z\":8,\"color\":3},{\"x\":7,\"y\":7,\"z\":8,\"color\":3},{\"x\":8,\"y\":7,\"z\":8,\"color\":3},{\"x\":9,\"y\":7,\"z\":8,\"color\":3},{\"x\":10,\"y\":7,\"z\":8,\"color\":3},{\"x\":11,\"y\":7,\"z\":8,\"color\":3},{\"x\":12,\"y\":7,\"z\":8,\"color\":3},{\"x\":3,\"y\":8,\"z\":8,\"color\":3},{\"x\":4,\"y\":8,\"z\":8,\"color\":3},{\"x\":5,\"y\":8,\"z\":8,\"color\":3},{\"x\":6,\"y\":8,\"z\":8,\"color\":3},{\"x\":7,\"y\":8,\"z\":8,\"color\":3},{\"x\":8,\"y\":8,\"z\":8,\"color\":3},{\"x\":9,\"y\":8,\"z\":8,\"color\":3},{\"x\":10,\"y\":8,\"z\":8,\"color\":3},{\"x\":11,\"y\":8,\"z\":8,\"color\":3},{\"x\":12,\"y\":8,\"z\":8,\"color\":3},{\"x\":3,\"y\":9,\"z\":8,\"color\":3},{\"x\":4,\"y\":9,\"z\":8,\"color\":3},{\"x\":5,\"y\":9,\"z\":8,\"color\":3},{\"x\":6,\"y\":9,\"z\":8,\"color\":3},{\"x\":7,\"y\":9,\"z\":8,\"color\":3},{\"x\":8,\"y\":9,\"z\":8,\"color\":3},{\"x\":9,\"y\":9,\"z\":8,\"color\":3},{\"x\":10,\"y\":9,\"z\":8,\"color\":3},{\"x\":11,\"y\":9,\"z\":8,\"color\":3},{\"x\":12,\"y\":9,\"z\":8,\"color\":3},{\"x\":3,\"y\":10,\"z\":8,\"color\":3},{\"x\":4,\"y\":10,\"z\":8,\"color\":3},{\"x\":5,\"y\":10,\"z\":8,\"color\":3},{\"x\":6,\"y\":10,\"z\":8,\"color\":3},{\"x\":7,\"y\":10,\"z\":8,\"color\":3},{\"x\":8,\"y\":10,\"z\":8,\"color\":3},{\"x\":9,\"y\":10,\"z\":8,\"color\":3},{\"x\":10,\"y\":10,\"z\":8,\"color\":3},{\"x\":11,\"y\":10,\"z\":8,\"color\":3},{\"x\":12,\"y\":10,\"z\":8,\"color\":3},{\"x\":3,\"y\":11,\"z\":8,\"color\":3},{\"x\":4,\"y\":11,\"z\":8,\"color\":3},{\"x\":5,\"y\":11,\"z\":8,\"color\":3},{\"x\":6,\"y\":11,\"z\":8,\"color\":3},{\"x\":7,\"y\":11,\"z\":8,\"color\":3},{\"x\":8,\"y\":11,\"z\":8,\"color\":3},{\"x\":9,\"y\":11,\"z\":8,\"color\":3},{\"x\":10,\"y\":11,\"z\":8,\"color\":3},{\"x\":11,\"y\":11,\"z\":8,\"color\":3},{\"x\":12,\"y\":11,\"z\":8,\"color\":3},{\"x\":3,\"y\":12,\"z\":8,\"color\":3},{\"x\":4,\"y\":12,\"z\":8,\"color\":3},{\"x\":5,\"y\":12,\"z\":8,\"color\":3},{\"x\":6,\"y\":12,\"z\":8,\"color\":3},{\"x\":7,\"y\":12,\"z\":8,\"color\":3},{\"x\":8,\"y\":12,\"z\":8,\"color\":3},{\"x\":9,\"y\":12,\"z\":8,\"color\":3},{\"x\":10,\"y\":12,\"z\":8,\"color\":3},{\"x\":11,\"y\":12,\"z\":8,\"color\":3},{\"x\":12,\"y\":12,\"z\":8,\"color\":3},{\"x\":4,\"y\":3,\"z\":9,\"color\":3},{\"x\":5,\"y\":3,\"z\":9,\"color\":3},{\"x\":6,\"y\":3,\"z\":9,\"color\":3},{\"x\":7,\"y\":3,\"z\":9,\"color\":3},{\"x\":8,\"y\":3,\"z\":9,\"color\":3},{\"x\":9,\"y\":3,\"z\":9,\"color\":3},{\"x\":10,\"y\":3,\"z\":9,\"color\":3},{\"x\":11,\"y\":3,\"z\":9,\"color\":3},{\"x\":4,\"y\":4,\"z\":9,\"color\":3},{\"x\":5,\"y\":4,\"z\":9,\"color\":3},{\"x\":6,\"y\":4,\"z\":9,\"color\":3},{\"x\":7,\"y\":4,\"z\":9,\"color\":3},{\"x\":8,\"y\":4,\"z\":9,\"color\":3},{\"x\":9,\"y\":4,\"z\":9,\"color\":3},{\"x\":10,\"y\":4,\"z\":9,\"color\":3},{\"x\":11,\"y\":4,\"z\":9,\"color\":3},{\"x\":4,\"y\":5,\"z\":9,\"color\":3},{\"x\":5,\"y\":5,\"z\":9,\"color\":3},{\"x\":6,\"y\":5,\"z\":9,\"color\":3},{\"x\":7,\"y\":5,\"z\":9,\"color\":3},{\"x\":8,\"y\":5,\"z\":9,\"color\":3},{\"x\":9,\"y\":5,\"z\":9,\"color\":3},{\"x\":10,\"y\":5,\"z\":9,\"color\":3},{\"x\":11,\"y\":5,\"z\":9,\"color\":3},{\"x\":4,\"y\":6,\"z\":9,\"color\":3},{\"x\":5,\"y\":6,\"z\":9,\"color\":3},{\"x\":6,\"y\":6,\"z\":9,\"color\":3},{\"x\":7,\"y\":6,\"z\":9,\"color\":3},{\"x\":8,\"y\":6,\"z\":9,\"color\":3},{\"x\":9,\"y\":6,\"z\":9,\"color\":3},{\"x\":10,\"y\":6,\"z\":9,\"color\":3},{\"x\":11,\"y\":6,\"z\":9,\"color\":3},{\"x\":4,\"y\":7,\"z\":9,\"color\":3},{\"x\":5,\"y\":7,\"z\":9,\"color\":3},{\"x\":6,\"y\":7,\"z\":9,\"color\":3},{\"x\":7,\"y\":7,\"z\":9,\"color\":3},{\"x\":8,\"y\":7,\"z\":9,\"color\":3},{\"x\":9,\"y\":7,\"z\":9,\"color\":3},{\"x\":10,\"y\":7,\"z\":9,\"color\":3},{\"x\":11,\"y\":7,\"z\":9,\"color\":3},{\"x\":4,\"y\":8,\"z\":9,\"color\":3},{\"x\":5,\"y\":8,\"z\":9,\"color\":3},{\"x\":6,\"y\":8,\"z\":9,\"color\":3},{\"x\":7,\"y\":8,\"z\":9,\"color\":3},{\"x\":8,\"y\":8,\"z\":9,\"color\":3},{\"x\":9,\"y\":8,\"z\":9,\"color\":3},{\"x\":10,\"y\":8,\"z\":9,\"color\":3},{\"x\":11,\"y\":8,\"z\":9,\"color\":3},{\"x\":4,\"y\":9,\"z\":9,\"color\":3},{\"x\":5,\"y\":9,\"z\":9,\"color\":3},{\"x\":6,\"y\":9,\"z\":9,\"color\":3},{\"x\":7,\"y\":9,\"z\":9,\"color\":3},{\"x\":8,\"y\":9,\"z\":9,\"color\":3},{\"x\":9,\"y\":9,\"z\":9,\"color\":3},{\"x\":10,\"y\":9,\"z\":9,\"color\":3},{\"x\":11,\"y\":9,\"z\":9,\"color\":3},{\"x\":4,\"y\":10,\"z\":9,\"color\":3},{\"x\":5,\"y\":10,\"z\":9,\"color\":3},{\"x\":6,\"y\":10,\"z\":9,\"color\":3},{\"x\":7,\"y\":10,\"z\":9,\"color\":3},{\"x\":8,\"y\":10,\"z\":9,\"color\":3},{\"x\":9,\"y\":10,\"z\":9,\"color\":3},{\"x\":10,\"y\":10,\"z\":9,\"color\":3},{\"x\":11,\"y\":10,\"z\":9,\"color\":3},{\"x\":4,\"y\":11,\"z\":9,\"color\":3},{\"x\":5,\"y\":11,\"z\":9,\"color\":3},{\"x\":6,\"y\":11,\"z\":9,\"color\":3},{\"x\":7,\"y\":11,\"z\":9,\"color\":3},{\"x\":8,\"y\":11,\"z\":9,\"color\":3},{\"x\":9,\"y\":11,\"z\":9,\"color\":3},{\"x\":10,\"y\":11,\"z\":9,\"color\":3},{\"x\":11,\"y\":11,\"z\":9,\"color\":3},{\"x\":4,\"y\":12,\"z\":9,\"color\":3},{\"x\":5,\"y\":12,\"z\":9,\"color\":3},{\"x\":6,\"y\":12,\"z\":9,\"color\":3},{\"x\":7,\"y\":12,\"z\":9,\"color\":3},{\"x\":8,\"y\":12,\"z\":9,\"color\":3},{\"x\":9,\"y\":12,\"z\":9,\"color\":3},{\"x\":10,\"y\":12,\"z\":9,\"color\":3},{\"x\":11,\"y\":12,\"z\":9,\"color\":3},{\"x\":5,\"y\":3,\"z\":10,\"color\":3},{\"x\":6,\"y\":3,\"z\":10,\"color\":3},{\"x\":7,\"y\":3,\"z\":10,\"color\":3},{\"x\":8,\"y\":3,\"z\":10,\"color\":3},{\"x\":9,\"y\":3,\"z\":10,\"color\":3},{\"x\":10,\"y\":3,\"z\":10,\"color\":3},{\"x\":5,\"y\":4,\"z\":10,\"color\":3},{\"x\":6,\"y\":4,\"z\":10,\"color\":3},{\"x\":7,\"y\":4,\"z\":10,\"color\":3},{\"x\":8,\"y\":4,\"z\":10,\"color\":3},{\"x\":9,\"y\":4,\"z\":10,\"color\":3},{\"x\":10,\"y\":4,\"z\":10,\"color\":3},{\"x\":5,\"y\":5,\"z\":10,\"color\":3},{\"x\":6,\"y\":5,\"z\":10,\"color\":3},{\"x\":7,\"y\":5,\"z\":10,\"color\":3},{\"x\":8,\"y\":5,\"z\":10,\"color\":3},{\"x\":9,\"y\":5,\"z\":10,\"color\":3},{\"x\":10,\"y\":5,\"z\":10,\"color\":3},{\"x\":5,\"y\":6,\"z\":10,\"color\":3},{\"x\":6,\"y\":6,\"z\":10,\"color\":3},{\"x\":7,\"y\":6,\"z\":10,\"color\":3},{\"x\":8,\"y\":6,\"z\":10,\"color\":3},{\"x\":9,\"y\":6,\"z\":10,\"color\":3},{\"x\":10,\"y\":6,\"z\":10,\"color\":3},{\"x\":5,\"y\":7,\"z\":10,\"color\":3},{\"x\":6,\"y\":7,\"z\":10,\"color\":3},{\"x\":7,\"y\":7,\"z\":10,\"color\":3},{\"x\":8,\"y\":7,\"z\":10,\"color\":3},{\"x\":9,\"y\":7,\"z\":10,\"color\":3},{\"x\":10,\"y\":7,\"z\":10,\"color\":3},{\"x\":5,\"y\":8,\"z\":10,\"color\":3},{\"x\":6,\"y\":8,\"z\":10,\"color\":3},{\"x\":7,\"y\":8,\"z\":10,\"color\":3},{\"x\":8,\"y\":8,\"z\":10,\"color\":3},{\"x\":9,\"y\":8,\"z\":10,\"color\":3},{\"x\":10,\"y\":8,\"z\":10,\"color\":3},{\"x\":5,\"y\":9,\"z\":10,\"color\":3},{\"x\":6,\"y\":9,\"z\":10,\"color\":3},{\"x\":7,\"y\":9,\"z\":10,\"color\":3},{\"x\":8,\"y\":9,\"z\":10,\"color\":3},{\"x\":9,\"y\":9,\"z\":10,\"color\":3},{\"x\":10,\"y\":9,\"z\":10,\"color\":3},{\"x\":5,\"y\":10,\"z\":10,\"color\":3},{\"x\":6,\"y\":10,\"z\":10,\"color\":3},{\"x\":7,\"y\":10,\"z\":10,\"color\":3},{\"x\":8,\"y\":10,\"z\":10,\"color\":3},{\"x\":9,\"y\":10,\"z\":10,\"color\":3},{\"x\":10,\"y\":10,\"z\":10,\"color\":3},{\"x\":5,\"y\":11,\"z\":10,\"color\":3},{\"x\":6,\"y\":11,\"z\":10,\"color\":3},{\"x\":7,\"y\":11,\"z\":10,\"color\":3},{\"x\":8,\"y\":11,\"z\":10,\"color\":3},{\"x\":9,\"y\":11,\"z\":10,\"color\":3},{\"x\":10,\"y\":11,\"z\":10,\"color\":3},{\"x\":5,\"y\":12,\"z\":10,\"color\":3},{\"x\":6,\"y\":12,\"z\":10,\"color\":3},{\"x\":7,\"y\":12,\"z\":10,\"color\":3},{\"x\":8,\"y\":12,\"z\":10,\"color\":3},{\"x\":9,\"y\":12,\"z\":10,\"color\":3},{\"x\":10,\"y\":12,\"z\":10,\"color\":3},{\"x\":6,\"y\":3,\"z\":11,\"color\":3},{\"x\":7,\"y\":3,\"z\":11,\"color\":3},{\"x\":8,\"y\":3,\"z\":11,\"color\":3},{\"x\":9,\"y\":3,\"z\":11,\"color\":3},{\"x\":6,\"y\":4,\"z\":11,\"color\":3},{\"x\":7,\"y\":4,\"z\":11,\"color\":3},{\"x\":8,\"y\":4,\"z\":11,\"color\":3},{\"x\":9,\"y\":4,\"z\":11,\"color\":3},{\"x\":6,\"y\":5,\"z\":11,\"color\":3},{\"x\":7,\"y\":5,\"z\":11,\"color\":3},{\"x\":8,\"y\":5,\"z\":11,\"color\":3},{\"x\":9,\"y\":5,\"z\":11,\"color\":3},{\"x\":6,\"y\":6,\"z\":11,\"color\":3},{\"x\":7,\"y\":6,\"z\":11,\"color\":3},{\"x\":8,\"y\":6,\"z\":11,\"color\":3},{\"x\":9,\"y\":6,\"z\":11,\"color\":3},{\"x\":6,\"y\":7,\"z\":11,\"color\":3},{\"x\":7,\"y\":7,\"z\":11,\"color\":3},{\"x\":8,\"y\":7,\"z\":11,\"color\":3},{\"x\":9,\"y\":7,\"z\":11,\"color\":3},{\"x\":6,\"y\":8,\"z\":11,\"color\":3},{\"x\":7,\"y\":8,\"z\":11,\"color\":3},{\"x\":8,\"y\":8,\"z\":11,\"color\":3},{\"x\":9,\"y\":8,\"z\":11,\"color\":3},{\"x\":6,\"y\":9,\"z\":11,\"color\":3},{\"x\":7,\"y\":9,\"z\":11,\"color\":3},{\"x\":8,\"y\":9,\"z\":11,\"color\":3},{\"x\":9,\"y\":9,\"z\":11,\"color\":3},{\"x\":6,\"y\":10,\"z\":11,\"color\":3},{\"x\":7,\"y\":10,\"z\":11,\"color\":3},{\"x\":8,\"y\":10,\"z\":11,\"color\":3},{\"x\":9,\"y\":10,\"z\":11,\"color\":3},{\"x\":6,\"y\":11,\"z\":11,\"color\":3},{\"x\":7,\"y\":11,\"z\":11,\"color\":3},{\"x\":8,\"y\":11,\"z\":11,\"color\":3},{\"x\":9,\"y\":11,\"z\":11,\"color\":3},{\"x\":6,\"y\":12,\"z\":11,\"color\":3},{\"x\":7,\"y\":12,\"z\":11,\"color\":3},{\"x\":8,\"y\":12,\"z\":11,\"color\":3},{\"x\":9,\"y\":12,\"z\":11,\"color\":3}]}"
          }
        },
        "required": []
      },
      "RenderloomVoxelInspectorResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "report",
              "preview",
              "mesh",
              "projectFile",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "width",
                  "height",
                  "depth",
                  "palette",
                  "voxels"
                ],
                "properties": {
                  "format": {
                    "const": "renderloom-voxel"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 64
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 64
                  },
                  "depth": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 64
                  },
                  "palette": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 64,
                    "items": {
                      "type": "string",
                      "pattern": "^#[0-9a-fA-F]{6}$"
                    }
                  },
                  "voxels": {
                    "type": "array",
                    "maxItems": 32768,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "x",
                        "y",
                        "z",
                        "color"
                      ],
                      "properties": {
                        "x": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        },
                        "y": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        },
                        "z": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        },
                        "color": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 63
                        }
                      }
                    }
                  }
                }
              },
              "report": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "width",
                  "height",
                  "depth",
                  "voxels",
                  "surfaceFaces",
                  "usedColors",
                  "paletteColors"
                ],
                "properties": {
                  "width": {
                    "type": "integer"
                  },
                  "height": {
                    "type": "integer"
                  },
                  "depth": {
                    "type": "integer"
                  },
                  "voxels": {
                    "type": "integer"
                  },
                  "surfaceFaces": {
                    "type": "integer"
                  },
                  "usedColors": {
                    "type": "integer"
                  },
                  "paletteColors": {
                    "type": "integer"
                  }
                }
              },
              "preview": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "mesh": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "projectFile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "RenderloomLightRigsInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "project": {
            "title": "Renderloom scene, render recipe or Form Studio JSON",
            "type": "string",
            "maxLength": 250000,
            "default": "{\"format\":\"renderloom-scene\",\"version\":1,\"name\":\"Terraced forms\",\"recipe\":{\"format\":\"kerfwise-render\",\"version\":1,\"source\":{\"format\":\"kerfwise-form\",\"version\":1,\"name\":\"Terraced forms\",\"units\":\"mm\",\"grid\":100,\"snap\":true,\"objects\":[{\"id\":\"part-1\",\"name\":\"Terrace 1\",\"tag\":\"Objects\",\"color\":\"#d6c5ab\",\"profile\":[[0,0],[2200,0],[2200,1800],[0,1800]],\"height\":300,\"x\":-1100,\"y\":-900,\"z\":0,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-2\",\"name\":\"Terrace 2\",\"tag\":\"Objects\",\"color\":\"#b5c5b6\",\"profile\":[[0,0],[1800,0],[1800,1500],[0,1500]],\"height\":300,\"x\":-900,\"y\":-750,\"z\":300,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-3\",\"name\":\"Terrace 3\",\"tag\":\"Objects\",\"color\":\"#789b90\",\"profile\":[[0,0],[1400,0],[1400,1200],[0,1200]],\"height\":300,\"x\":-700,\"y\":-600,\"z\":600,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-4\",\"name\":\"Terrace 4\",\"tag\":\"Objects\",\"color\":\"#3e6662\",\"profile\":[[0,0],[1000,0],[1000,900],[0,900]],\"height\":300,\"x\":-500,\"y\":-450,\"z\":900,\"rotation\":0,\"visible\":true,\"locked\":false}],\"scenes\":[{\"name\":\"Overview\",\"camera\":{\"azimuth\":-45,\"elevation\":32,\"span\":3548.2671827245476,\"target\":[0,0,600]}},{\"name\":\"Plan view\",\"camera\":{\"azimuth\":-90,\"elevation\":90,\"span\":3548.2671827245476,\"target\":[0,0,600]}}]},\"camera\":{\"azimuth\":-45,\"elevation\":32,\"span\":3548.2671827245476,\"target\":[0,0,600]},\"settings\":{\"width\":480,\"height\":360,\"samples\":4,\"seed\":1,\"lightAzimuth\":-100,\"lightElevation\":55,\"softness\":0.12,\"ambient\":0.3,\"exposure\":0,\"background\":\"#f3eee3\",\"ground\":true,\"transparent\":false},\"materials\":{}},\"notes\":\"Four levels for comparing grazing light and material finishes.\",\"shots\":[{\"id\":\"shot-1\",\"name\":\"Overview\",\"camera\":{\"azimuth\":-45,\"elevation\":32,\"span\":3548.2671827245476,\"target\":[0,0,600]}},{\"id\":\"shot-2\",\"name\":\"Plan view\",\"camera\":{\"azimuth\":-90,\"elevation\":90,\"span\":3548.2671827245476,\"target\":[0,0,600]}}]}"
          },
          "width": {
            "title": "Tile width (px)",
            "type": "number",
            "minimum": 32,
            "maximum": 96,
            "default": 64
          },
          "height": {
            "title": "Tile height (px)",
            "type": "number",
            "minimum": 32,
            "maximum": 96,
            "default": 48
          },
          "samples": {
            "title": "Samples per pixel",
            "type": "number",
            "minimum": 1,
            "maximum": 2,
            "default": 1
          }
        },
        "required": []
      },
      "RenderloomLightRigsResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "width",
              "height",
              "pixelSamples",
              "tiles",
              "sheet",
              "projectFile",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "recipe",
                  "notes",
                  "shots"
                ],
                "properties": {
                  "format": {
                    "const": "renderloom-scene"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "recipe": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "format",
                      "version",
                      "source",
                      "camera",
                      "settings",
                      "materials"
                    ],
                    "properties": {
                      "format": {
                        "const": "kerfwise-render"
                      },
                      "version": {
                        "const": 1
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "format",
                          "version",
                          "name",
                          "units",
                          "grid",
                          "snap",
                          "objects",
                          "scenes"
                        ],
                        "properties": {
                          "format": {
                            "const": "kerfwise-form"
                          },
                          "version": {
                            "const": 1
                          },
                          "name": {
                            "type": "string",
                            "maxLength": 120
                          },
                          "units": {
                            "enum": [
                              "mm",
                              "in"
                            ]
                          },
                          "grid": {
                            "type": "number",
                            "minimum": 0.1,
                            "maximum": 10000
                          },
                          "snap": {
                            "type": "boolean"
                          },
                          "objects": {
                            "type": "array",
                            "maxItems": 128,
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "required": [
                                "id",
                                "name",
                                "tag",
                                "color",
                                "profile",
                                "height",
                                "x",
                                "y",
                                "z",
                                "rotation",
                                "visible",
                                "locked"
                              ],
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "pattern": "^[-a-zA-Z0-9_]{1,64}$"
                                },
                                "name": {
                                  "type": "string",
                                  "maxLength": 80
                                },
                                "tag": {
                                  "type": "string",
                                  "maxLength": 40
                                },
                                "color": {
                                  "type": "string",
                                  "pattern": "^#[a-fA-F0-9]{6}$"
                                },
                                "profile": {
                                  "type": "array",
                                  "minItems": 3,
                                  "maxItems": 64,
                                  "items": {
                                    "type": "array",
                                    "minItems": 2,
                                    "maxItems": 2,
                                    "items": {
                                      "type": "number",
                                      "minimum": -100000,
                                      "maximum": 100000
                                    }
                                  }
                                },
                                "height": {
                                  "type": "number",
                                  "minimum": 1,
                                  "maximum": 100000
                                },
                                "x": {
                                  "type": "number",
                                  "minimum": -100000,
                                  "maximum": 100000
                                },
                                "y": {
                                  "type": "number",
                                  "minimum": -100000,
                                  "maximum": 100000
                                },
                                "z": {
                                  "type": "number",
                                  "minimum": -100000,
                                  "maximum": 100000
                                },
                                "rotation": {
                                  "type": "number"
                                },
                                "tiltX": {
                                  "type": "number",
                                  "minimum": -180,
                                  "maximum": 180
                                },
                                "tiltY": {
                                  "type": "number",
                                  "minimum": -180,
                                  "maximum": 180
                                },
                                "visible": {
                                  "type": "boolean"
                                },
                                "locked": {
                                  "type": "boolean"
                                },
                                "orthogonal": {
                                  "type": "string",
                                  "maxLength": 12000
                                }
                              }
                            }
                          },
                          "scenes": {
                            "type": "array",
                            "maxItems": 8,
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "required": [
                                "name",
                                "camera"
                              ],
                              "properties": {
                                "name": {
                                  "type": "string",
                                  "maxLength": 60
                                },
                                "camera": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "required": [
                                    "azimuth",
                                    "elevation",
                                    "span",
                                    "target"
                                  ],
                                  "properties": {
                                    "azimuth": {
                                      "type": "number"
                                    },
                                    "elevation": {
                                      "type": "number",
                                      "minimum": 5,
                                      "maximum": 90
                                    },
                                    "span": {
                                      "type": "number",
                                      "minimum": 10,
                                      "maximum": 1000000
                                    },
                                    "target": {
                                      "type": "array",
                                      "minItems": 3,
                                      "maxItems": 3,
                                      "items": {
                                        "type": "number"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "camera": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "azimuth",
                          "elevation",
                          "span",
                          "target"
                        ],
                        "properties": {
                          "azimuth": {
                            "type": "number",
                            "minimum": -3600,
                            "maximum": 3600
                          },
                          "elevation": {
                            "type": "number",
                            "minimum": 5,
                            "maximum": 90
                          },
                          "span": {
                            "type": "number",
                            "minimum": 10,
                            "maximum": 1000000
                          },
                          "target": {
                            "type": "array",
                            "minItems": 3,
                            "maxItems": 3,
                            "items": {
                              "type": "number",
                              "minimum": -300000,
                              "maximum": 300000
                            }
                          }
                        }
                      },
                      "settings": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "width",
                          "height",
                          "samples",
                          "seed",
                          "lightAzimuth",
                          "lightElevation",
                          "softness",
                          "ambient",
                          "exposure",
                          "background",
                          "ground",
                          "transparent"
                        ],
                        "properties": {
                          "width": {
                            "type": "integer",
                            "minimum": 32,
                            "maximum": 800
                          },
                          "height": {
                            "type": "integer",
                            "minimum": 32,
                            "maximum": 800
                          },
                          "samples": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 32
                          },
                          "seed": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "lightAzimuth": {
                            "type": "number",
                            "minimum": -360,
                            "maximum": 360
                          },
                          "lightElevation": {
                            "type": "number",
                            "minimum": 5,
                            "maximum": 90
                          },
                          "softness": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 0.6
                          },
                          "ambient": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1
                          },
                          "exposure": {
                            "type": "number",
                            "minimum": -4,
                            "maximum": 4
                          },
                          "background": {
                            "type": "string",
                            "pattern": "^#[a-fA-F0-9]{6}$"
                          },
                          "ground": {
                            "type": "boolean"
                          },
                          "transparent": {
                            "type": "boolean"
                          }
                        },
                        "description": "At most 384000 pixels and 6 million pixel samples."
                      },
                      "materials": {
                        "type": "object",
                        "maxProperties": 128,
                        "additionalProperties": {
                          "enum": [
                            "matte",
                            "satin",
                            "metal"
                          ]
                        },
                        "description": "Keys reference source solid IDs. At most 4096 visible triangles."
                      }
                    }
                  },
                  "notes": {
                    "type": "string",
                    "maxLength": 12000
                  },
                  "shots": {
                    "type": "array",
                    "maxItems": 8,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "id",
                        "name",
                        "camera"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^[-a-zA-Z0-9_]{1,64}$"
                        },
                        "name": {
                          "type": "string",
                          "maxLength": 60
                        },
                        "camera": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "azimuth",
                            "elevation",
                            "span",
                            "target"
                          ],
                          "properties": {
                            "azimuth": {
                              "type": "number",
                              "minimum": -3600,
                              "maximum": 3600
                            },
                            "elevation": {
                              "type": "number",
                              "minimum": 5,
                              "maximum": 90
                            },
                            "span": {
                              "type": "number",
                              "minimum": 10,
                              "maximum": 1000000
                            },
                            "target": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 3,
                              "items": {
                                "type": "number",
                                "minimum": -300000,
                                "maximum": 300000
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "width": {
                "type": "integer"
              },
              "height": {
                "type": "integer"
              },
              "pixelSamples": {
                "type": "integer"
              },
              "tiles": {
                "type": "array",
                "minItems": 4,
                "maxItems": 4,
                "items": {
                  "type": "object"
                }
              },
              "sheet": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "projectFile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "RenderloomHeightMaterialInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "grid": {
            "title": "Height grid (0–1, rows separated by newlines)",
            "type": "string",
            "maxLength": 24000,
            "default": "0.15, 0.3, 0.5, 0.3, 0.15\n0.3, 0.65, 0.85, 0.65, 0.3\n0.5, 0.85, 1, 0.85, 0.5\n0.3, 0.65, 0.85, 0.65, 0.3\n0.15, 0.3, 0.5, 0.3, 0.15"
          },
          "size": {
            "title": "Square map size (px)",
            "type": "integer",
            "minimum": 16,
            "maximum": 512,
            "default": 128
          },
          "normalStrength": {
            "title": "Normal strength",
            "type": "number",
            "minimum": 0,
            "maximum": 20,
            "default": 8
          },
          "flipGreen": {
            "title": "Flip normal green channel",
            "type": "boolean",
            "default": false
          },
          "roughness": {
            "title": "Base roughness",
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "default": 0.65
          },
          "variation": {
            "title": "Height-driven roughness variation",
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "default": 0.2
          },
          "cavityStrength": {
            "title": "Cavity strength",
            "type": "number",
            "minimum": 0,
            "maximum": 2,
            "default": 0.65
          },
          "cavityRadius": {
            "title": "Cavity neighborhood radius (px)",
            "type": "integer",
            "minimum": 1,
            "maximum": 16,
            "default": 5
          },
          "metalness": {
            "title": "Uniform metallic value",
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "default": 0
          },
          "seamBlend": {
            "title": "Edge feather fraction",
            "type": "number",
            "minimum": 0,
            "maximum": 0.25,
            "default": 0
          }
        },
        "required": []
      },
      "RenderloomHeightMaterialResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "diagnostics",
              "maps",
              "archive",
              "projectFile",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "source",
                  "settings"
                ],
                "properties": {
                  "format": {
                    "const": "renderloom-material"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  },
                  "source": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "width",
                      "height",
                      "png"
                    ],
                    "properties": {
                      "width": {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 1024
                      },
                      "height": {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 1024
                      },
                      "png": {
                        "type": "string",
                        "maxLength": 6000000,
                        "pattern": "^data:image/png;base64,"
                      }
                    }
                  },
                  "settings": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "heightChannel",
                      "heightInvert",
                      "levelLow",
                      "levelHigh",
                      "heightGamma",
                      "blur",
                      "normalStrength",
                      "flipGreen",
                      "roughness",
                      "roughnessVariation",
                      "aoStrength",
                      "aoRadius",
                      "metalness",
                      "seamBlend"
                    ],
                    "properties": {
                      "heightChannel": {
                        "enum": [
                          "luminance",
                          "red",
                          "green",
                          "blue",
                          "alpha"
                        ]
                      },
                      "heightInvert": {
                        "type": "boolean"
                      },
                      "levelLow": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.99
                      },
                      "levelHigh": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 1
                      },
                      "heightGamma": {
                        "type": "number",
                        "minimum": 0.2,
                        "maximum": 4
                      },
                      "blur": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 8
                      },
                      "normalStrength": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 20
                      },
                      "flipGreen": {
                        "type": "boolean"
                      },
                      "roughness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "roughnessVariation": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "aoStrength": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 2
                      },
                      "aoRadius": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 16
                      },
                      "metalness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "seamBlend": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.25
                      }
                    }
                  },
                  "packChannels": {
                    "type": "array",
                    "minItems": 4,
                    "maxItems": 4,
                    "items": {
                      "enum": [
                        "ao",
                        "roughness",
                        "metallic",
                        "height",
                        "inv-ao",
                        "inv-roughness",
                        "inv-metallic",
                        "inv-height",
                        "black",
                        "white"
                      ]
                    }
                  }
                }
              },
              "diagnostics": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "heightMin",
                  "heightMax",
                  "heightMean",
                  "flatHeight",
                  "clippedPixels",
                  "transparentPixels",
                  "edgeBefore",
                  "edgeAfter",
                  "normalConvention",
                  "warnings"
                ],
                "properties": {
                  "heightMin": {
                    "type": "number"
                  },
                  "heightMax": {
                    "type": "number"
                  },
                  "heightMean": {
                    "type": "number"
                  },
                  "flatHeight": {
                    "type": "boolean"
                  },
                  "clippedPixels": {
                    "type": "integer"
                  },
                  "transparentPixels": {
                    "type": "integer"
                  },
                  "edgeBefore": {
                    "type": "number"
                  },
                  "edgeAfter": {
                    "type": "number"
                  },
                  "normalConvention": {
                    "type": "string"
                  },
                  "warnings": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "maps": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "baseColor",
                  "height",
                  "normal",
                  "roughness",
                  "ao",
                  "metallic",
                  "orm"
                ],
                "properties": {
                  "baseColor": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "height": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "normal": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "roughness": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "ao": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "metallic": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "orm": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  }
                }
              },
              "archive": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "projectFile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "RenderloomTileSeamInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "grid": {
            "title": "Height grid (0–1, rows separated by newlines)",
            "type": "string",
            "maxLength": 24000,
            "default": "0.15, 0.3, 0.5, 0.3, 0.15\n0.3, 0.65, 0.85, 0.65, 0.3\n0.5, 0.85, 1, 0.85, 0.5\n0.3, 0.65, 0.85, 0.65, 0.3\n0.15, 0.3, 0.5, 0.3, 0.15"
          },
          "size": {
            "title": "Square map size (px)",
            "type": "integer",
            "minimum": 16,
            "maximum": 512,
            "default": 128
          },
          "seamBlend": {
            "title": "Edge feather fraction",
            "type": "number",
            "minimum": 0,
            "maximum": 0.25,
            "default": 0.12
          }
        },
        "required": []
      },
      "RenderloomTileSeamResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "edgeBefore",
              "edgeAfter",
              "original",
              "tile",
              "repeated",
              "projectFile",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "source",
                  "settings"
                ],
                "properties": {
                  "format": {
                    "const": "renderloom-material"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  },
                  "source": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "width",
                      "height",
                      "png"
                    ],
                    "properties": {
                      "width": {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 1024
                      },
                      "height": {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 1024
                      },
                      "png": {
                        "type": "string",
                        "maxLength": 6000000,
                        "pattern": "^data:image/png;base64,"
                      }
                    }
                  },
                  "settings": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "heightChannel",
                      "heightInvert",
                      "levelLow",
                      "levelHigh",
                      "heightGamma",
                      "blur",
                      "normalStrength",
                      "flipGreen",
                      "roughness",
                      "roughnessVariation",
                      "aoStrength",
                      "aoRadius",
                      "metalness",
                      "seamBlend"
                    ],
                    "properties": {
                      "heightChannel": {
                        "enum": [
                          "luminance",
                          "red",
                          "green",
                          "blue",
                          "alpha"
                        ]
                      },
                      "heightInvert": {
                        "type": "boolean"
                      },
                      "levelLow": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.99
                      },
                      "levelHigh": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 1
                      },
                      "heightGamma": {
                        "type": "number",
                        "minimum": 0.2,
                        "maximum": 4
                      },
                      "blur": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 8
                      },
                      "normalStrength": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 20
                      },
                      "flipGreen": {
                        "type": "boolean"
                      },
                      "roughness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "roughnessVariation": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "aoStrength": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 2
                      },
                      "aoRadius": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 16
                      },
                      "metalness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "seamBlend": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.25
                      }
                    }
                  },
                  "packChannels": {
                    "type": "array",
                    "minItems": 4,
                    "maxItems": 4,
                    "items": {
                      "enum": [
                        "ao",
                        "roughness",
                        "metallic",
                        "height",
                        "inv-ao",
                        "inv-roughness",
                        "inv-metallic",
                        "inv-height",
                        "black",
                        "white"
                      ]
                    }
                  }
                }
              },
              "edgeBefore": {
                "type": "number"
              },
              "edgeAfter": {
                "type": "number"
              },
              "original": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "tile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "repeated": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "projectFile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "KerfwiseScenePreviewInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "project": {
            "title": "Form project or render recipe JSON",
            "type": "string",
            "maxLength": 250000,
            "default": "{\"format\":\"kerfwise-form\",\"version\":1,\"name\":\"Terraced forms\",\"units\":\"mm\",\"grid\":100,\"snap\":true,\"objects\":[{\"id\":\"part-1\",\"name\":\"Terrace 1\",\"tag\":\"Objects\",\"color\":\"#d6c5ab\",\"profile\":[[0,0],[2200,0],[2200,1800],[0,1800]],\"height\":300,\"x\":-1100,\"y\":-900,\"z\":0,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-2\",\"name\":\"Terrace 2\",\"tag\":\"Objects\",\"color\":\"#b5c5b6\",\"profile\":[[0,0],[1800,0],[1800,1500],[0,1500]],\"height\":300,\"x\":-900,\"y\":-750,\"z\":300,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-3\",\"name\":\"Terrace 3\",\"tag\":\"Objects\",\"color\":\"#789b90\",\"profile\":[[0,0],[1400,0],[1400,1200],[0,1200]],\"height\":300,\"x\":-700,\"y\":-600,\"z\":600,\"rotation\":0,\"visible\":true,\"locked\":false},{\"id\":\"part-4\",\"name\":\"Terrace 4\",\"tag\":\"Objects\",\"color\":\"#3e6662\",\"profile\":[[0,0],[1000,0],[1000,900],[0,900]],\"height\":300,\"x\":-500,\"y\":-450,\"z\":900,\"rotation\":0,\"visible\":true,\"locked\":false}],\"scenes\":[{\"name\":\"Overview\",\"camera\":{\"azimuth\":-45,\"elevation\":32,\"target\":[0,0,600],\"span\":3548.2671827245476}},{\"name\":\"Plan view\",\"camera\":{\"azimuth\":-90,\"elevation\":90,\"target\":[0,0,600],\"span\":3548.2671827245476}}]}"
          },
          "width": {
            "title": "Preview width (px)",
            "type": "number",
            "minimum": 32,
            "maximum": 128,
            "default": 96
          },
          "height": {
            "title": "Preview height (px)",
            "type": "number",
            "minimum": 32,
            "maximum": 128,
            "default": 72
          },
          "samples": {
            "title": "Samples per pixel",
            "type": "number",
            "minimum": 1,
            "maximum": 4,
            "default": 2
          },
          "pass": {
            "title": "Render pass",
            "type": "string",
            "enum": [
              "beauty",
              "albedo",
              "normal",
              "depth",
              "shadow",
              "object"
            ],
            "default": "beauty"
          }
        },
        "required": []
      },
      "KerfwiseScenePreviewResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "recipe",
              "plan",
              "pass",
              "preview",
              "recipeFile",
              "openInApp"
            ],
            "properties": {
              "recipe": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "source",
                  "camera",
                  "settings",
                  "materials"
                ],
                "properties": {
                  "format": {
                    "const": "kerfwise-render"
                  },
                  "version": {
                    "const": 1
                  },
                  "source": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "format",
                      "version",
                      "name",
                      "units",
                      "grid",
                      "snap",
                      "objects",
                      "scenes"
                    ],
                    "properties": {
                      "format": {
                        "const": "kerfwise-form"
                      },
                      "version": {
                        "const": 1
                      },
                      "name": {
                        "type": "string",
                        "maxLength": 120
                      },
                      "units": {
                        "enum": [
                          "mm",
                          "in"
                        ]
                      },
                      "grid": {
                        "type": "number",
                        "minimum": 0.1,
                        "maximum": 10000
                      },
                      "snap": {
                        "type": "boolean"
                      },
                      "objects": {
                        "type": "array",
                        "maxItems": 128,
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "id",
                            "name",
                            "tag",
                            "color",
                            "profile",
                            "height",
                            "x",
                            "y",
                            "z",
                            "rotation",
                            "visible",
                            "locked"
                          ],
                          "properties": {
                            "id": {
                              "type": "string",
                              "pattern": "^[-a-zA-Z0-9_]{1,64}$"
                            },
                            "name": {
                              "type": "string",
                              "maxLength": 80
                            },
                            "tag": {
                              "type": "string",
                              "maxLength": 40
                            },
                            "color": {
                              "type": "string",
                              "pattern": "^#[a-fA-F0-9]{6}$"
                            },
                            "profile": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 64,
                              "items": {
                                "type": "array",
                                "minItems": 2,
                                "maxItems": 2,
                                "items": {
                                  "type": "number",
                                  "minimum": -100000,
                                  "maximum": 100000
                                }
                              }
                            },
                            "height": {
                              "type": "number",
                              "minimum": 1,
                              "maximum": 100000
                            },
                            "x": {
                              "type": "number",
                              "minimum": -100000,
                              "maximum": 100000
                            },
                            "y": {
                              "type": "number",
                              "minimum": -100000,
                              "maximum": 100000
                            },
                            "z": {
                              "type": "number",
                              "minimum": -100000,
                              "maximum": 100000
                            },
                            "rotation": {
                              "type": "number"
                            },
                            "tiltX": {
                              "type": "number",
                              "minimum": -180,
                              "maximum": 180
                            },
                            "tiltY": {
                              "type": "number",
                              "minimum": -180,
                              "maximum": 180
                            },
                            "visible": {
                              "type": "boolean"
                            },
                            "locked": {
                              "type": "boolean"
                            },
                            "orthogonal": {
                              "type": "string",
                              "maxLength": 12000
                            }
                          }
                        }
                      },
                      "scenes": {
                        "type": "array",
                        "maxItems": 8,
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "name",
                            "camera"
                          ],
                          "properties": {
                            "name": {
                              "type": "string",
                              "maxLength": 60
                            },
                            "camera": {
                              "type": "object",
                              "additionalProperties": false,
                              "required": [
                                "azimuth",
                                "elevation",
                                "span",
                                "target"
                              ],
                              "properties": {
                                "azimuth": {
                                  "type": "number"
                                },
                                "elevation": {
                                  "type": "number",
                                  "minimum": 5,
                                  "maximum": 90
                                },
                                "span": {
                                  "type": "number",
                                  "minimum": 10,
                                  "maximum": 1000000
                                },
                                "target": {
                                  "type": "array",
                                  "minItems": 3,
                                  "maxItems": 3,
                                  "items": {
                                    "type": "number"
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "camera": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "azimuth",
                      "elevation",
                      "span",
                      "target"
                    ],
                    "properties": {
                      "azimuth": {
                        "type": "number",
                        "minimum": -3600,
                        "maximum": 3600
                      },
                      "elevation": {
                        "type": "number",
                        "minimum": 5,
                        "maximum": 90
                      },
                      "span": {
                        "type": "number",
                        "minimum": 10,
                        "maximum": 1000000
                      },
                      "target": {
                        "type": "array",
                        "minItems": 3,
                        "maxItems": 3,
                        "items": {
                          "type": "number",
                          "minimum": -300000,
                          "maximum": 300000
                        }
                      }
                    }
                  },
                  "settings": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "width",
                      "height",
                      "samples",
                      "seed",
                      "lightAzimuth",
                      "lightElevation",
                      "softness",
                      "ambient",
                      "exposure",
                      "background",
                      "ground",
                      "transparent"
                    ],
                    "properties": {
                      "width": {
                        "type": "integer",
                        "minimum": 32,
                        "maximum": 800
                      },
                      "height": {
                        "type": "integer",
                        "minimum": 32,
                        "maximum": 800
                      },
                      "samples": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 32
                      },
                      "seed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 4294967295
                      },
                      "lightAzimuth": {
                        "type": "number",
                        "minimum": -360,
                        "maximum": 360
                      },
                      "lightElevation": {
                        "type": "number",
                        "minimum": 5,
                        "maximum": 90
                      },
                      "softness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.6
                      },
                      "ambient": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "exposure": {
                        "type": "number",
                        "minimum": -4,
                        "maximum": 4
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[a-fA-F0-9]{6}$"
                      },
                      "ground": {
                        "type": "boolean"
                      },
                      "transparent": {
                        "type": "boolean"
                      }
                    },
                    "description": "At most 384000 pixels and 6 million pixel samples."
                  },
                  "materials": {
                    "type": "object",
                    "maxProperties": 128,
                    "additionalProperties": {
                      "enum": [
                        "matte",
                        "satin",
                        "metal"
                      ]
                    },
                    "description": "Keys reference source solid IDs. At most 4096 visible triangles."
                  }
                }
              },
              "plan": {
                "type": "object"
              },
              "pass": {
                "enum": [
                  "beauty",
                  "albedo",
                  "normal",
                  "depth",
                  "shadow",
                  "object"
                ]
              },
              "preview": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "recipeFile": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "KerfwiseRenderBudgetInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "width": {
            "title": "Width (px)",
            "type": "number",
            "minimum": 32,
            "maximum": 800,
            "default": 640
          },
          "height": {
            "title": "Height (px)",
            "type": "number",
            "minimum": 32,
            "maximum": 800,
            "default": 480
          },
          "samples": {
            "title": "Samples per pixel",
            "type": "number",
            "minimum": 1,
            "maximum": 32,
            "default": 8
          },
          "target": {
            "title": "Comparison samples per pixel",
            "type": "number",
            "minimum": 1,
            "maximum": 32,
            "default": 16
          }
        },
        "required": []
      },
      "KerfwiseRenderBudgetResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "current",
              "comparison",
              "workloadRatio",
              "noiseRatio"
            ],
            "properties": {
              "current": {
                "type": "object"
              },
              "comparison": {
                "type": "object"
              },
              "workloadRatio": {
                "type": "number"
              },
              "noiseRatio": {
                "type": "number"
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "KerfwiseProfileExtruderInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "points": {
            "title": "Footprint X,Y pairs in mm (one per line)",
            "type": "string",
            "maxLength": 12000,
            "default": "0,0\n1200,0\n1200,400\n500,400\n500,1000\n0,1000"
          },
          "height": {
            "title": "Extrusion height (mm)",
            "type": "number",
            "minimum": 1,
            "maximum": 100000,
            "default": 600
          },
          "x": {
            "title": "Origin X (mm)",
            "type": "number",
            "minimum": -100000,
            "maximum": 100000,
            "default": 0
          },
          "y": {
            "title": "Origin Y (mm)",
            "type": "number",
            "minimum": -100000,
            "maximum": 100000,
            "default": 0
          },
          "z": {
            "title": "Base elevation (mm)",
            "type": "number",
            "minimum": -100000,
            "maximum": 100000,
            "default": 0
          },
          "rotation": {
            "title": "Rotation around Z (degrees)",
            "type": "number",
            "minimum": -36000,
            "maximum": 36000,
            "default": 0
          },
          "name": {
            "title": "Solid name",
            "type": "string",
            "maxLength": 80,
            "default": "L-shaped solid"
          },
          "color": {
            "title": "Solid color (HEX)",
            "type": "string",
            "maxLength": 7,
            "default": "#b9c9b4"
          }
        },
        "required": []
      },
      "KerfwiseProfileExtruderResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "mesh",
              "surfaceM2",
              "volumeM3",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "units",
                  "grid",
                  "snap",
                  "objects",
                  "scenes"
                ],
                "properties": {
                  "format": {
                    "const": "kerfwise-form"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "units": {
                    "enum": [
                      "mm",
                      "in"
                    ]
                  },
                  "grid": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 10000
                  },
                  "snap": {
                    "type": "boolean"
                  },
                  "objects": {
                    "type": "array",
                    "maxItems": 128,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "id",
                        "name",
                        "tag",
                        "color",
                        "profile",
                        "height",
                        "x",
                        "y",
                        "z",
                        "rotation",
                        "visible",
                        "locked"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^[-a-zA-Z0-9_]{1,64}$"
                        },
                        "name": {
                          "type": "string",
                          "maxLength": 80
                        },
                        "tag": {
                          "type": "string",
                          "maxLength": 40
                        },
                        "color": {
                          "type": "string",
                          "pattern": "^#[a-fA-F0-9]{6}$"
                        },
                        "profile": {
                          "type": "array",
                          "minItems": 3,
                          "maxItems": 64,
                          "items": {
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 2,
                            "items": {
                              "type": "number",
                              "minimum": -100000,
                              "maximum": 100000
                            }
                          }
                        },
                        "height": {
                          "type": "number",
                          "minimum": 1,
                          "maximum": 100000
                        },
                        "x": {
                          "type": "number",
                          "minimum": -100000,
                          "maximum": 100000
                        },
                        "y": {
                          "type": "number",
                          "minimum": -100000,
                          "maximum": 100000
                        },
                        "z": {
                          "type": "number",
                          "minimum": -100000,
                          "maximum": 100000
                        },
                        "rotation": {
                          "type": "number"
                        },
                        "tiltX": {
                          "type": "number",
                          "minimum": -180,
                          "maximum": 180
                        },
                        "tiltY": {
                          "type": "number",
                          "minimum": -180,
                          "maximum": 180
                        },
                        "visible": {
                          "type": "boolean"
                        },
                        "locked": {
                          "type": "boolean"
                        },
                        "orthogonal": {
                          "type": "string",
                          "maxLength": 12000
                        }
                      }
                    }
                  },
                  "scenes": {
                    "type": "array",
                    "maxItems": 8,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "camera"
                      ],
                      "properties": {
                        "name": {
                          "type": "string",
                          "maxLength": 60
                        },
                        "camera": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "azimuth",
                            "elevation",
                            "span",
                            "target"
                          ],
                          "properties": {
                            "azimuth": {
                              "type": "number"
                            },
                            "elevation": {
                              "type": "number",
                              "minimum": 5,
                              "maximum": 90
                            },
                            "span": {
                              "type": "number",
                              "minimum": 10,
                              "maximum": 1000000
                            },
                            "target": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 3,
                              "items": {
                                "type": "number"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "mesh": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "vertices",
                  "triangles"
                ],
                "properties": {
                  "vertices": {
                    "type": "array",
                    "items": {
                      "type": "array",
                      "minItems": 3,
                      "maxItems": 3,
                      "items": {
                        "type": "number"
                      }
                    }
                  },
                  "triangles": {
                    "type": "array",
                    "items": {
                      "type": "array",
                      "minItems": 3,
                      "maxItems": 3,
                      "items": {
                        "type": "integer"
                      }
                    }
                  }
                }
              },
              "surfaceM2": {
                "type": "number"
              },
              "volumeM3": {
                "type": "number"
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "KerfwiseModelReportInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "project": {
            "title": "Form Studio project JSON",
            "type": "string",
            "maxLength": 2000000,
            "default": "{\n  \"format\": \"kerfwise-form\",\n  \"version\": 1,\n  \"name\": \"L-shaped counter\",\n  \"units\": \"mm\",\n  \"grid\": 100,\n  \"snap\": true,\n  \"objects\": [\n    {\n      \"id\": \"counter\",\n      \"name\": \"Counter volume\",\n      \"tag\": \"Concepts\",\n      \"color\": \"#bda483\",\n      \"profile\": [\n        [\n          0,\n          0\n        ],\n        [\n          2800,\n          0\n        ],\n        [\n          2800,\n          650\n        ],\n        [\n          900,\n          650\n        ],\n        [\n          900,\n          2200\n        ],\n        [\n          0,\n          2200\n        ]\n      ],\n      \"height\": 900,\n      \"x\": -1400,\n      \"y\": -1100,\n      \"z\": 0,\n      \"rotation\": 0,\n      \"visible\": true,\n      \"locked\": false\n    }\n  ],\n  \"scenes\": [\n    {\n      \"name\": \"Overview\",\n      \"camera\": {\n        \"azimuth\": -45,\n        \"elevation\": 32,\n        \"target\": [\n          0,\n          0,\n          450\n        ],\n        \"span\": 4223.8045646076\n      }\n    },\n    {\n      \"name\": \"Plan view\",\n      \"camera\": {\n        \"azimuth\": -90,\n        \"elevation\": 90,\n        \"target\": [\n          0,\n          0,\n          450\n        ],\n        \"span\": 4223.8045646076\n      }\n    }\n  ]\n}"
          },
          "visibleOnly": {
            "title": "Report and export visible solids only",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "KerfwiseModelReportResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "project",
              "report",
              "exports",
              "openInApp"
            ],
            "properties": {
              "project": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "format",
                  "version",
                  "name",
                  "units",
                  "grid",
                  "snap",
                  "objects",
                  "scenes"
                ],
                "properties": {
                  "format": {
                    "const": "kerfwise-form"
                  },
                  "version": {
                    "const": 1
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "units": {
                    "enum": [
                      "mm",
                      "in"
                    ]
                  },
                  "grid": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 10000
                  },
                  "snap": {
                    "type": "boolean"
                  },
                  "objects": {
                    "type": "array",
                    "maxItems": 128,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "id",
                        "name",
                        "tag",
                        "color",
                        "profile",
                        "height",
                        "x",
                        "y",
                        "z",
                        "rotation",
                        "visible",
                        "locked"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^[-a-zA-Z0-9_]{1,64}$"
                        },
                        "name": {
                          "type": "string",
                          "maxLength": 80
                        },
                        "tag": {
                          "type": "string",
                          "maxLength": 40
                        },
                        "color": {
                          "type": "string",
                          "pattern": "^#[a-fA-F0-9]{6}$"
                        },
                        "profile": {
                          "type": "array",
                          "minItems": 3,
                          "maxItems": 64,
                          "items": {
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 2,
                            "items": {
                              "type": "number",
                              "minimum": -100000,
                              "maximum": 100000
                            }
                          }
                        },
                        "height": {
                          "type": "number",
                          "minimum": 1,
                          "maximum": 100000
                        },
                        "x": {
                          "type": "number",
                          "minimum": -100000,
                          "maximum": 100000
                        },
                        "y": {
                          "type": "number",
                          "minimum": -100000,
                          "maximum": 100000
                        },
                        "z": {
                          "type": "number",
                          "minimum": -100000,
                          "maximum": 100000
                        },
                        "rotation": {
                          "type": "number"
                        },
                        "tiltX": {
                          "type": "number",
                          "minimum": -180,
                          "maximum": 180
                        },
                        "tiltY": {
                          "type": "number",
                          "minimum": -180,
                          "maximum": 180
                        },
                        "visible": {
                          "type": "boolean"
                        },
                        "locked": {
                          "type": "boolean"
                        },
                        "orthogonal": {
                          "type": "string",
                          "maxLength": 12000
                        }
                      }
                    }
                  },
                  "scenes": {
                    "type": "array",
                    "maxItems": 8,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "camera"
                      ],
                      "properties": {
                        "name": {
                          "type": "string",
                          "maxLength": 60
                        },
                        "camera": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "azimuth",
                            "elevation",
                            "span",
                            "target"
                          ],
                          "properties": {
                            "azimuth": {
                              "type": "number"
                            },
                            "elevation": {
                              "type": "number",
                              "minimum": 5,
                              "maximum": 90
                            },
                            "span": {
                              "type": "number",
                              "minimum": 10,
                              "maximum": 1000000
                            },
                            "target": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 3,
                              "items": {
                                "type": "number"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "report": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "count",
                  "surfaceM2",
                  "volumeM3",
                  "triangles",
                  "bounds",
                  "objects",
                  "tags"
                ],
                "properties": {
                  "count": {
                    "type": "integer"
                  },
                  "surfaceM2": {
                    "type": "number"
                  },
                  "volumeM3": {
                    "type": "number"
                  },
                  "triangles": {
                    "type": "integer"
                  },
                  "bounds": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "min",
                      "max",
                      "size"
                    ],
                    "properties": {
                      "min": {
                        "type": "array",
                        "minItems": 3,
                        "maxItems": 3,
                        "items": {
                          "type": "number"
                        }
                      },
                      "max": {
                        "type": "array",
                        "minItems": 3,
                        "maxItems": 3,
                        "items": {
                          "type": "number"
                        }
                      },
                      "size": {
                        "type": "array",
                        "minItems": 3,
                        "maxItems": 3,
                        "items": {
                          "type": "number"
                        }
                      }
                    }
                  },
                  "objects": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "id",
                        "name",
                        "tag",
                        "footprintM2",
                        "surfaceM2",
                        "volumeM3",
                        "triangles",
                        "bounds"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "tag": {
                          "type": "string"
                        },
                        "footprintM2": {
                          "type": "number"
                        },
                        "surfaceM2": {
                          "type": "number"
                        },
                        "volumeM3": {
                          "type": "number"
                        },
                        "triangles": {
                          "type": "integer"
                        },
                        "bounds": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "min",
                            "max",
                            "size"
                          ],
                          "properties": {
                            "min": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 3,
                              "items": {
                                "type": "number"
                              }
                            },
                            "max": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 3,
                              "items": {
                                "type": "number"
                              }
                            },
                            "size": {
                              "type": "array",
                              "minItems": 3,
                              "maxItems": 3,
                              "items": {
                                "type": "number"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "tag",
                        "count",
                        "surfaceM2",
                        "volumeM3"
                      ],
                      "properties": {
                        "tag": {
                          "type": "string"
                        },
                        "count": {
                          "type": "integer"
                        },
                        "surfaceM2": {
                          "type": "number"
                        },
                        "volumeM3": {
                          "type": "number"
                        }
                      }
                    }
                  }
                }
              },
              "exports": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "obj",
                  "stl",
                  "project"
                ],
                "properties": {
                  "obj": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "stl": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  },
                  "project": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "artifactId",
                      "filename",
                      "mime",
                      "bytes",
                      "sha256",
                      "path"
                    ],
                    "properties": {
                      "artifactId": {
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "mime": {
                        "type": "string"
                      },
                      "bytes": {
                        "type": "integer"
                      },
                      "sha256": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string",
                        "description": "Download path on the same site (valid for about 2 hours)."
                      }
                    }
                  }
                }
              },
              "openInApp": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}