Capabilities and limits
Generated from the catalog build of stylized-town@0.4.0: what each asset can change without Blender, what is refused on purpose and what to do instead, and what a purchase includes. Agents can read the same facts as JSON at /data/capabilities.json.
What works without Blender, and what does not
| Level | What | Blender | In this kit |
|---|---|---|---|
| L1 | Load and place the published GLB as-is — every asset can be loaded and placed; L1 assets declare no customization | not needed | 22 assets |
| L2 | Declared runtime capabilities: recolours and swatches, uniform scale, visibility toggles, part swaps — per instance, in the browser through the SDK; validated, all-or-nothing | not needed | 8 assets |
| L3 | Scene assembly: connector snapping (scene 1.1.0 attach_to) and animation clips — 30 snappable assets; scenes are validated with scene validate and assembleScene | not needed | 30 assets |
| L4 | Geometry authoring: new shapes, extra storeys, roof pitch, slat counts — not part of this kit: the kit package has 0 .blend files of 256, and the SDK never runs Blender | needed (or another 3D tool) | not included |
L1–L3 need only Node.js, the SDK and a browser: no Blender, no Blender MCP, no server-side rendering. Producer recipe parameters of the assets are not customer capabilities.
Assets and their declared modifications
30 assets; 8 assets declare modifications. Each instance owns its change; other instances and the cached GLB stay unchanged. Anything not listed is refused (below). For several buildings that differ only by parts and colours, use variants of one base asset.
| Asset | Level | Declared modifications (values) | Snapping · clips |
|---|---|---|---|
| Awning part — stylized-town/awning-01@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | awning-plug |
| Park bench — stylized-town/bench-01@0.4.0 · Props and vegetation · public sample (free sampler) | L2 |
| prop-base |
| Bus stop shelter — stylized-town/bus-stop-01@0.1.0 · Props and vegetation · kit access | L1 | none: load and place as-is | prop-base |
| Cafe with terrace — stylized-town/cafe-01@0.1.0 · Buildings · kit access | L2 |
| awning-socket, lot-front |
| Door part: panelled door — stylized-town/door-01@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | door-plug ; clips: open |
| Door part: glazed door — stylized-town/door-02@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | door-plug ; clips: open |
| Picket fence segment (2 m) — stylized-town/fence-01@0.2.0 · Props and vegetation · kit access | L1 | none: load and place as-is | fence-2m |
| Hedge segment (2 m) — stylized-town/hedge-01@0.1.0 · Props and vegetation · kit access | L1 | none: load and place as-is | hedge-2m |
| Town house with swappable parts — stylized-town/house-01@0.2.0 · Buildings · kit access | L2 |
| lot-front |
| Cottage with swappable parts — stylized-town/house-02@0.1.0 · Buildings · kit access | L2 |
| lot-front |
| Lawn tile (4 m) — stylized-town/lawn-tile-01@0.1.0 · Ground tiles · public sample (free sampler) | L1 | none: load and place as-is | ground-edge, prop-socket |
| Mailbox — stylized-town/mailbox-01@0.1.0 · Props and vegetation · kit access | L1 | none: load and place as-is | prop-base ; clips: flag-up |
| Market stall — stylized-town/market-stall-01@0.1.0 · Props and vegetation · kit access | L2 |
| prop-base |
| Paved plaza tile (4 m) — stylized-town/plaza-tile-01@0.1.0 · Ground tiles · kit access | L1 | none: load and place as-is | ground-edge, prop-socket |
| Road corner tile (4 m, 90 degrees) — stylized-town/road-corner-01@0.2.0 · Ground tiles · public sample (free sampler) | L1 | none: load and place as-is | prop-socket, road-4m, road-side |
| Road crossroads tile (4 m) — stylized-town/road-cross-01@0.1.0 · Ground tiles · kit access | L1 | none: load and place as-is | road-4m |
| Road crosswalk tile (4 m) — stylized-town/road-crosswalk-01@0.1.0 · Ground tiles · kit access | L1 | none: load and place as-is | road-4m, road-side |
| Straight road tile (4 m) — stylized-town/road-straight-01@0.3.0 · Ground tiles · public sample (free sampler) | L1 | none: load and place as-is | prop-socket, road-4m, road-side |
| Road T-junction tile (4 m) — stylized-town/road-tee-01@0.2.0 · Ground tiles · kit access | L1 | none: load and place as-is | prop-socket, road-4m, road-side |
| Roof part: gable roof — stylized-town/roof-gable-01@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | roof-plug-house |
| Roof part: hip roof — stylized-town/roof-hip-01@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | roof-plug-house |
| Corner shop with swappable parts — stylized-town/shop-01@0.2.0 · Buildings · kit access | L2 |
| awning-socket, lot-front |
| Shrub — stylized-town/shrub-01@0.2.0 · Props and vegetation · kit access | L1 | none: load and place as-is | prop-base |
| Street lamp — stylized-town/street-lamp-01@0.3.0 · Props and vegetation · public sample (free sampler) | L2 |
| prop-base |
| Town hall (landmark) — stylized-town/townhall-01@0.1.0 · Buildings · kit access | L2 |
| lot-front |
| Litter bin — stylized-town/trash-bin-01@0.2.0 · Props and vegetation · kit access | L1 | none: load and place as-is | prop-base |
| Street tree — stylized-town/tree-01@0.2.0 · Props and vegetation · public sample (free sampler) | L1 | none: load and place as-is | prop-base |
| Conifer — stylized-town/tree-02@0.1.0 · Props and vegetation · kit access | L1 | none: load and place as-is | prop-base |
| Window part: framed window — stylized-town/window-01@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | window-plug |
| Window part: shuttered window — stylized-town/window-02@0.1.0 · Building parts · kit access | L1 | none: load and place as-is | window-plug |
Buildings: storeys, lot, height and roof
From each building's manifest (declared recipe parameters, its roof part swap, its tags). Another footprint, height, storey count or roof shape means another asset, not a customization.
| Building | Storeys | Lot | Height | Roof (declared facts) |
|---|---|---|---|---|
| Cafe with terrace — stylized-town/cafe-01@0.1.0 | 1 | 4.00 × 8.00 m | 5.53 m | parapet 0.45 m high around the roof |
| Town house with swappable parts — stylized-town/house-01@0.2.0 | 2 | 4.00 × 6.20 m | 8.61 m | part swap roof: roof-gable-01, roof-hip-01 (default roof-gable-01) |
| Cottage with swappable parts — stylized-town/house-02@0.1.0 | 1 | 4.00 × 7.20 m | 6.02 m | part swap roof: roof-gable-01, roof-hip-01 (default roof-hip-01) |
| Corner shop with swappable parts — stylized-town/shop-01@0.2.0 | 1 | 4.00 × 6.40 m | 4.56 m | parapet 0.45 m high around the roof |
| Town hall (landmark) — stylized-town/townhall-01@0.1.0 | 2 | 8.00 × 8.00 m | 13.72 m | roof pitch 30° |
Refused on purpose, and what to do instead
Each request below was sent to the SDK's own validator when this page was built; the code, reason and hint are what npx agent-ready-assets customize, scene validate, library.instantiate and assembleScene return for it (exit 1, nothing written or rendered). A coding agent should report these limits instead of approximating them.
| Request | Structured refusal | Documented alternative |
|---|---|---|
Extra storeys or floors on Town house with swappable parts: · {"values":{"storeys":3}} | UNSUPPORTED_OPERATION/UNKNOWN_CAPABILITY — "storeys" is not an advertised Blender-free capability; supported Blender-free capabilities of stylized-town/house-01@0.2.0: front-door (modular-swap, part… Show all"storeys" is not an advertised Blender-free capability; supported Blender-free capabilities of stylized-town/house-01@0.2.0: front-door (modular-swap, part, one of "door-01" (stylized-town/door-01@0.1.0), "door-02" (stylized-town/door-02@0.1.0) (default "door-01")); window-style (modular-swap, part, one of "window-01" (stylized-town/window-01@0.1.0), "window-02" (stylized-town/window-02@0.1.0) (default "window-01")); roof (modular-swap, part, one of "roof-gable-01" (stylized-town/roof-gable-01@0.1.0), "roof-hip-01" (stylized-town/roof-hip-01@0.1.0) (default "roof-gable-01")); chimney (node-visibility, boolean true/false (default true); false hides chimney); wall-color (material-color, palette swatch, one of "ivory" (#EDE3CF), "paving" (#E3C2AC), "leaf" (#7FA36B) (default "ivory")); roof-color (material-color, palette swatch, one of "terracotta" (#C97755), "curb-stone" (#A9A398) (default "terracotta")); hint: storeys is a publisher-only Blender recipe parameter (declared.recipe_parameters), not a Blender-free consumer capability; changing it needs advanced authoring (L4), which this SDK does not do | No geometry operation exists in this kit, and no building of it has more than 2 storeys (from the manifests: cafe-01 1, house-01 2, house-02 1, shop-01 1, townhall-01 2). For another footprint or height use another asset; for variants of this one use its declared capabilities (front-door, window-style, roof, chimney, wall-color, roof-color). Geometry changes are L4 authoring in your own 3D tool: not part of this kit (the package has no .blend sources), and the licence in effect (ARA-COMMERCIAL-1.0) covers: use and modify the assets in your own games, sites and apps, ship them inside compiled or deployed products and client work; no redistribution of the asset files themselves. |
A producer recipe parameter (width_m) as a customization: · {"values":{"width-m":3}} | UNSUPPORTED_OPERATION/UNKNOWN_CAPABILITY — "width-m" is not an advertised Blender-free capability; supported Blender-free capabilities of stylized-town/house-01@0.2.0: front-door (modular-swap, part… Show all"width-m" is not an advertised Blender-free capability; supported Blender-free capabilities of stylized-town/house-01@0.2.0: front-door (modular-swap, part, one of "door-01" (stylized-town/door-01@0.1.0), "door-02" (stylized-town/door-02@0.1.0) (default "door-01")); window-style (modular-swap, part, one of "window-01" (stylized-town/window-01@0.1.0), "window-02" (stylized-town/window-02@0.1.0) (default "window-01")); roof (modular-swap, part, one of "roof-gable-01" (stylized-town/roof-gable-01@0.1.0), "roof-hip-01" (stylized-town/roof-hip-01@0.1.0) (default "roof-gable-01")); chimney (node-visibility, boolean true/false (default true); false hides chimney); wall-color (material-color, palette swatch, one of "ivory" (#EDE3CF), "paving" (#E3C2AC), "leaf" (#7FA36B) (default "ivory")); roof-color (material-color, palette swatch, one of "terracotta" (#C97755), "curb-stone" (#A9A398) (default "terracotta")); hint: width_m, trim_width_m, door_width_m, chimney_width_m are publisher-only Blender recipe parameters (declared.recipe_parameters), not Blender-free consumer capabilities; changing them needs advanced… Show allwidth_m, trim_width_m, door_width_m, chimney_width_m are publisher-only Blender recipe parameters (declared.recipe_parameters), not Blender-free consumer capabilities; changing them needs advanced authoring (L4), which this SDK does not do | No geometry operation exists in this kit. For another shape or footprint use another asset (stylized-town/cafe-01@0.1.0, stylized-town/house-02@0.1.0, stylized-town/shop-01@0.2.0, stylized-town/townhall-01@0.1.0); for variants of this one use its declared capabilities (front-door, window-style, roof, chimney, wall-color, roof-color). Geometry changes are L4 authoring in your own 3D tool: not part of this kit (the package has no .blend sources), and the licence in effect (ARA-COMMERCIAL-1.0) covers: use and modify the assets in your own games, sites and apps, ship them inside compiled or deployed products and client work; no redistribution of the asset files themselves. |
A flat roof on Town house with swappable parts: · {"values":{"roof":"flat"}} | INCOMPATIBLE_PART/PART_NOT_ALLOWED — roof: "flat" is not an allowlisted part for this slot; allowed: "roof-gable-01" (stylized-town/roof-gable-01@0.1.0), "roof-hip-01"… Show allroof: "flat" is not an allowlisted part for this slot; allowed: "roof-gable-01" (stylized-town/roof-gable-01@0.1.0), "roof-hip-01" (stylized-town/roof-hip-01@0.1.0); hint: only parts declared by roof can be mounted (same kit, compatible plug); other parts are refused rather than approximated | Use one of the declared roof choices: roof-gable-01, roof-hip-01. A roof shape outside them is new geometry (L4, not included). No asset offers a flat roof as a customization; the roofs of the other buildings, from their manifests: cafe-01: parapet 0.45 m high around the roof; house-02: part swap roof: roof-gable-01, roof-hip-01 (default roof-hip-01); shop-01: parapet 0.45 m high around the roof; townhall-01: roof pitch 30°. |
A free colour on the palette capability wall-color: · {"values":{"wall-color":"#FF0000"}} | INVALID_PARAMETER/NOT_IN_CHOICES — wall-color: expected one of ["ivory","paving","leaf"], got "#FF0000" ; hint: wall-color takes a palette swatch name, not a free colour; allowed: palette swatch, one of "ivory" (#EDE3CF), "paving" (#E3C2AC), "leaf" (#7FA36B) (default "ivory") | Use a swatch name: ivory, paving, leaf. |
The part's asset reference instead of the choice id for front-door: · {"values":{"front-door":"stylized-town/door-02@0.1.0"}} | INCOMPATIBLE_PART/PART_NOT_ALLOWED — front-door: "stylized-town/door-02@0.1.0" is not an allowlisted part for this slot; allowed: "door-01" (stylized-town/door-01@0.1.0), "door-02"… Show allfront-door: "stylized-town/door-02@0.1.0" is not an allowlisted part for this slot; allowed: "door-01" (stylized-town/door-01@0.1.0), "door-02" (stylized-town/door-02@0.1.0); hint: write the choice id "door-02" (it mounts stylized-town/door-02@0.1.0), not the asset reference | Write the choice id ("door-02"); the SDK mounts stylized-town/door-02@0.1.0 for it. |
Hiding a part that is not declared optional (the walls of Town house with swappable parts): · {"values":{"walls":false}} | UNSUPPORTED_OPERATION/UNKNOWN_CAPABILITY — "walls" is not an advertised Blender-free capability; supported Blender-free capabilities of stylized-town/house-01@0.2.0: front-door (modular-swap, part, one… Show all"walls" is not an advertised Blender-free capability; supported Blender-free capabilities of stylized-town/house-01@0.2.0: front-door (modular-swap, part, one of "door-01" (stylized-town/door-01@0.1.0), "door-02" (stylized-town/door-02@0.1.0) (default "door-01")); window-style (modular-swap, part, one of "window-01" (stylized-town/window-01@0.1.0), "window-02" (stylized-town/window-02@0.1.0) (default "window-01")); roof (modular-swap, part, one of "roof-gable-01" (stylized-town/roof-gable-01@0.1.0), "roof-hip-01" (stylized-town/roof-hip-01@0.1.0) (default "roof-gable-01")); chimney (node-visibility, boolean true/false (default true); false hides chimney); wall-color (material-color, palette swatch, one of "ivory" (#EDE3CF), "paving" (#E3C2AC), "leaf" (#7FA36B) (default "ivory")); roof-color (material-color, palette swatch, one of "terracotta" (#C97755), "curb-stone" (#A9A398) (default "terracotta")) | Only the declared toggles can hide parts: chimney (hides chimney). |
Scaling Town house with swappable parts in a scene (uniform_scale 2): · {"scene_instance":{"instance_id":"house-01-1","asset":"stylized-town/house-01@0.2.0","position_m":[0,0,0],"rotation_euler_rad":[0,0,0],"uniform_scale":2,"customize":{}}} | UNSUPPORTED_OPERATION/SCENE_SCALE_UNSUPPORTED — free scene scaling (uniform_scale 2) is not supported; keep uniform_scale 1 so assets stay in their authored 1 m units ; hint: stylized-town/house-01@0.2.0 declares no uniform-scale capability | Keep uniform_scale 1 (assets stay in metres); stylized-town/house-01@0.2.0 declares no uniform-scale capability. Assets with a declared uniform-scale capability: stylized-town/bench-01@0.4.0. |
Recolouring an L1 asset (Bus stop shelter): · {"values":{"color":"#00FF00"}} | UNSUPPORTED_OPERATION/UNKNOWN_CAPABILITY — "color" is not an advertised Blender-free capability; stylized-town/bus-stop-01@0.1.0 is L1-only: it advertises no Blender-free customization capability (load… Show all"color" is not an advertised Blender-free capability; stylized-town/bus-stop-01@0.1.0 is L1-only: it advertises no Blender-free customization capability (load and place it as-is) | Load and place it as-is. Assets that declare a recolour: stylized-town/bench-01@0.4.0, stylized-town/cafe-01@0.1.0, stylized-town/house-01@0.2.0, stylized-town/house-02@0.1.0, stylized-town/market-stall-01@0.1.0, stylized-town/shop-01@0.2.0, stylized-town/townhall-01@0.1.0. |
The refusal rules of the customization guide (14)
| Request | Result |
|---|---|
{ "kind": ... } | UNSUPPORTED_OPERATION: producer recipe parameter, not a Blender-free capability (needs L4 authoring) |
{ "width-m": ... } | UNSUPPORTED_OPERATION: producer recipe parameter, not a Blender-free capability (needs L4 authoring) |
{ "depth-m": ... } | UNSUPPORTED_OPERATION: producer recipe parameter, not a Blender-free capability (needs L4 authoring) |
{ "body-z-m": ... } | UNSUPPORTED_OPERATION: producer recipe parameter, not a Blender-free capability (needs L4 authoring) |
{ "plinth-height-m": ... } | UNSUPPORTED_OPERATION: producer recipe parameter, not a Blender-free capability (needs L4 authoring) |
{ "storey-height-m": ... } | UNSUPPORTED_OPERATION: producer recipe parameter, not a Blender-free capability (needs L4 authoring) |
recolor or edit a baked texture | UNSUPPORTED_OPERATION: only declared material colours can change |
add, remove or reshape geometry (e.g. extra floors or storeys, a taller tower, a roof pitch) | UNSUPPORTED_OPERATION: only the declared parts can be swapped or hidden; no geometry operation is offered |
a part that is not in the swap allowlist (or the part ref instead of the choice id) | INCOMPATIBLE_PART/PART_NOT_ALLOWED: only the declared choices exist; the hint lists them |
a free #RRGGBB colour on a palette-swatch capability | INVALID_PARAMETER/NOT_IN_CHOICES: use one of the swatch names |
a visibility toggle given as a string ("false") | INVALID_PARAMETER/WRONG_TYPE: toggles are booleans |
hiding a part that is not declared optional (walls, roof, a slot part) | UNSUPPORTED_OPERATION/UNKNOWN_CAPABILITY: only declared node-visibility capabilities exist |
a swap part that is not installed in your kit | INCOMPATIBLE_PART/PART_NOT_IN_KIT: install the complete kit (or `add` the host, which installs its pinned parts) |
snapping a part instance into a host slot in scene.json | VALIDATION_FAILED/SNAP_OCCUPIED: slots change only through the modular-swap capability |
Support matrix over all assets
The SDK's own support matrix (the rows each asset page shows), counted over the 30 assets of the kit.
| Feature | Supported | Not supported | Advanced only (L4) |
|---|---|---|---|
| Material recolor (runtime, Blender-free) | 7 | 23 | 0 |
| Uniform scale (runtime, Blender-free) | 1 | 29 | 0 |
| Placement (position / rotation in a scene) | 30 | 0 | 0 |
| Connector snapping (scene 1.1.0 attach_to) | 30 | 0 | 0 |
| Node visibility toggles | 6 | 24 | 0 |
| Modular part swap | 4 | 26 | 0 |
| Animations | 3 | 27 | 0 |
| Custom mesh editing / parametric geometry (e.g. slat count) | 0 | 0 | 30 |
| Baked texture recolor | 0 | 30 | 0 |
| GLB re-export of a customized asset | 0 | 30 | 0 |
What a purchase includes
- Product
- Stylized Town - complete kit · $39.00 one-time
- Downloads covered (update scope)
stylized-town@>=0.4.0 <1.0.0- Licence of a purchase
- The commercial licence, version 1.0
Package contents
stylized-town@0.4.0: 2.17 MB, 256 files, sha256 daaecd9394bcdccf…. Counted from the package itself:
| GLB models | 30 |
| asset manifests (manifest.json) | 30 |
| preview images | 180 |
| tested scenes (*.scene.json) | 2 |
| integration examples (Three.js, R3F) | 10 |
| kit index (kit.json) | 1 |
| README | 1 |
| licence texts | 1 |
| other files (package index and metadata) | 1 |
| .blend source files | 0 |
The free sampler
stylized-town-sampler@0.1.0 (Stylized Town free sampler): stylized-town/road-straight-01@0.3.0, stylized-town/road-corner-01@0.2.0, stylized-town/lawn-tile-01@0.1.0, stylized-town/bench-01@0.4.0, stylized-town/street-lamp-01@0.3.0, stylized-town/tree-01@0.2.0. Released; licence of the released sampler: version 1.0. Install the free sampler.
Source: the catalog this site was built from (sha256 cb74520a56a3…), the kit package and the product configuration. Machine-readable: /data/capabilities.json. See also pricing and the licence.