Dress a level: placements for every zone, previews and a 3D viewer link. Price: $1.00 USDC via x402, charged only on success. Part of Level design: Level dressing for 3D games.
View input schema
{
"type": "object",
"properties": {
"catalogId": {
"type": "string"
},
"catalog": {
"type": "object",
"properties": {
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Your prefab / asset name. Placements refer to it."
},
"glb": {
"type": "string",
"description": "Base64 GLB. Footprint, height and pivot are computed from the mesh."
},
"glbUrl": {
"type": "string",
"format": "uri",
"description": "URL of a GLB, used when glb is not given."
},
"bounds": {
"type": "object",
"properties": {
"min": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
]
},
"max": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
]
}
},
"required": [
"min",
"max"
],
"additionalProperties": false,
"description": "Meters, model space, Y up. Used only when no mesh is given."
},
"category": {
"type": "string",
"enum": [
"house",
"tree",
"rock",
"bush",
"fence",
"wall",
"prop",
"light",
"path",
"water",
"other"
],
"description": "Overrides automatic classification."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 20
}
},
"required": [
"id"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 300
},
"upAxis": {
"type": "string",
"enum": [
"y",
"z"
],
"default": "y"
}
},
"required": [
"assets"
],
"additionalProperties": false
},
"layout": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "zones"
},
"width": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 400,
"description": "World size along x, meters."
},
"depth": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 400,
"description": "World size along z, meters."
},
"zones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"kind": {
"type": "string",
"enum": [
"road",
"plaza",
"water",
"forest",
"field",
"building-lot",
"keep-clear",
"spawn",
"open"
]
},
"polygon": {
"type": "array",
"items": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": [
{
"type": "number"
},
{
"type": "number"
}
]
},
"minItems": 3,
"maxItems": 400,
"description": "World meters (x, z). x right, z down on a top-down map."
},
"polyline": {
"type": "array",
"items": {
"$ref": "#/properties/layout/anyOf/0/properties/zones/items/properties/polygon/items"
},
"minItems": 2,
"maxItems": 400,
"description": "For roads and rivers: centerline plus width."
},
"width": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"kind"
],
"additionalProperties": false
},
"maxItems": 200
},
"requiredPoints": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"x": {
"type": "number"
},
"z": {
"type": "number"
}
},
"required": [
"id",
"x",
"z"
],
"additionalProperties": false
},
"maxItems": 20,
"default": []
}
},
"required": [
"kind",
"width",
"depth",
"zones"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "image"
},
"image": {
"type": "string",
"description": "Base64 PNG of a top-down sketch or map."
},
"imageUrl": {
"type": "string",
"format": "uri"
},
"width": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 400
},
"depth": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 400
},
"requiredPoints": {
"type": "array",
"items": {
"$ref": "#/properties/layout/anyOf/0/properties/requiredPoints/items"
},
"maxItems": 20,
"default": []
}
},
"required": [
"kind",
"width",
"depth"
],
"additionalProperties": false
}
]
},
"heightmap": {
"type": "object",
"properties": {
"image": {
"type": "string",
"description": "Base64 grayscale PNG covering the whole map."
},
"imageUrl": {
"type": "string",
"format": "uri"
},
"minHeight": {
"type": "number",
"default": 0
},
"maxHeight": {
"type": "number"
}
},
"required": [
"maxHeight"
],
"additionalProperties": false
},
"brief": {
"type": "string",
"maxLength": 4000,
"default": ""
},
"preset": {
"type": "string",
"enum": [
"fantasy-village"
],
"default": "fantasy-village"
},
"density": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.5
},
"seed": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string",
"maxLength": 64
}
],
"default": 1
},
"targetEngine": {
"type": "string",
"enum": [
"unity",
"threejs"
],
"default": "unity"
},
"plan": {
"type": "object",
"properties": {
"zones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"zoneId": {
"type": "string"
},
"rules": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scatter"
},
"assets": {
"type": "array",
"items": {
"type": "string"
},
"description": "Asset ids."
},
"categories": {
"type": "array",
"items": {
"$ref": "#/properties/catalog/properties/assets/items/properties/category"
},
"description": "Pick from the catalog by category."
},
"density": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"minSpacing": {
"type": "number",
"minimum": 0,
"maximum": 50
},
"falloff": {
"type": "object",
"properties": {
"from": {
"type": "string",
"enum": [
"edge",
"point"
]
},
"point": {
"$ref": "#/properties/layout/anyOf/0/properties/zones/items/properties/polygon/items"
},
"strength": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"from",
"strength"
],
"additionalProperties": false
}
},
"required": [
"kind",
"density"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "cluster"
},
"assets": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/assets"
},
"categories": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/categories"
},
"clusters": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"default": 1
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 60
},
"radius": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 60
},
"center": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"const": "centroid"
},
{
"$ref": "#/properties/layout/anyOf/0/properties/zones/items/properties/polygon/items"
}
]
},
{
"type": "string",
"const": "random"
}
],
"default": "random"
}
},
"required": [
"kind",
"count",
"radius"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "along"
},
"assets": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/assets"
},
"categories": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/categories"
},
"offset": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": [
{
"type": "number",
"minimum": 0
},
{
"type": "number",
"minimum": 0
}
],
"description": "Distance inside the zone edge, meters [min, max]."
},
"spacing": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "number",
"exclusiveMinimum": 0
}
]
},
"facing": {
"type": "string",
"enum": [
"along",
"toward",
"away",
"random"
],
"default": "along"
}
},
"required": [
"kind",
"offset",
"spacing"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "ring"
},
"assets": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/assets"
},
"categories": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/categories"
},
"center": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/1/properties/center/anyOf/0",
"default": "centroid"
},
"radius": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 80
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 60
},
"facing": {
"type": "string",
"enum": [
"inward",
"outward"
],
"default": "inward"
}
},
"required": [
"kind",
"radius",
"count"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "lot"
},
"assets": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/assets"
},
"categories": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/0/properties/categories"
}
},
"required": [
"kind"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "anchor"
},
"asset": {
"type": "string"
},
"category": {
"$ref": "#/properties/catalog/properties/assets/items/properties/category"
},
"at": {
"$ref": "#/properties/plan/properties/zones/items/properties/rules/items/anyOf/1/properties/center/anyOf/0",
"default": "centroid"
},
"yawDeg": {
"type": "number"
}
},
"required": [
"kind"
],
"additionalProperties": false
}
]
},
"maxItems": 12
}
},
"required": [
"zoneId",
"rules"
],
"additionalProperties": false
},
"maxItems": 200
},
"notes": {
"type": "string",
"maxLength": 2000
}
},
"required": [
"zones"
],
"additionalProperties": false,
"description": "Optional: skip the planner and solve this plan exactly."
}
},
"required": [
"layout"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}