# lsdtools.procedural reference
URL: https://lsd.tools/docs/sdk-lsdtools-procedural
Updated: 2026-10-16

SDK distribution **1.0.0**; API contract **1.0**; generator **1.0.0**.

Product source digest: `13800cef04184609594a0b15f310d52e8ece337faa4be2176039a5286946127b`.

Generated from declared public exports and source syntax. Signatures and annotations are declaration spellings; decorators, factories and annotations are never executed. Class members below are declared members; base classes remain explicit. Source docstrings describe their owning implementation; they do not grant app permissions.

```text
Lazy mesh authoring facade over the numerical service and native Mesh Studio.

Games may evaluate recipes without Engine or GTK. Pipeline adapters import Engine
only when selected; editor construction consumes explicit frontend project ports.
```


## `lsdtools.procedural.BuildProceduralMesh`

Kind: class. Source: `services/procedural/src/lsd_procedural/steps.py:119`.

Source docstring:

```text
Evaluate an explicit retained recipe into a lossless typed mesh product.
```


Implementation alias: `lsd_procedural.steps.BuildProceduralMesh`.

Declared bases: `LoadStep`.

### `lsdtools.procedural.BuildProceduralMesh.type_id`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:121`.

```python
type_id = 'lsd-procedural.build_mesh'
```


### `lsdtools.procedural.BuildProceduralMesh.output_ports`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:122`.

```python
output_ports = ['mesh']
```


### `lsdtools.procedural.BuildProceduralMesh.cache_pin`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:123`.

```python
cache_pin = 'lsd-procedural-mesh-product-v1'
```


### `lsdtools.procedural.BuildProceduralMesh.recipe`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:124`.

```python
recipe = param(dict, required=True, label='Mesh recipe', validators=[_validate_recipe], description='Bounded version-1 recipe with stable parts and retained procedural inputs.')
```


### `lsdtools.procedural.BuildProceduralMesh.run`

Kind: method. Source: `services/procedural/src/lsd_procedural/steps.py:127`.

```python
run(self)
```


```python
self: (unannotated)
```


## `lsdtools.procedural.ExportProceduralMesh`

Kind: class. Source: `services/procedural/src/lsd_procedural/steps.py:210`.

Source docstring:

```text
Deliver a tracked mesh product, interchange assets and runtime objects table.
```


Implementation alias: `lsd_procedural.steps.ExportProceduralMesh`.

Declared bases: `DeliverStep`.

### `lsdtools.procedural.ExportProceduralMesh.type_id`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:212`.

```python
type_id = 'lsd-procedural.export_mesh'
```


### `lsdtools.procedural.ExportProceduralMesh.input_ports`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:213`.

```python
input_ports = ['mesh']
```


### `lsdtools.procedural.ExportProceduralMesh.output_ports`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:214`.

```python
output_ports = ['product', 'glb', 'obj', 'objects']
```


### `lsdtools.procedural.ExportProceduralMesh.cache_pin`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:215`.

```python
cache_pin = 'lsd-procedural-export-v1:' + hashlib.sha256(_canonical(_DELIVERY_PROFILE)).hexdigest()
```


### `lsdtools.procedural.ExportProceduralMesh.run`

Kind: method. Source: `services/procedural/src/lsd_procedural/steps.py:217`.

```python
run(self, inputs)
```


```python
inputs: (unannotated)
self: (unannotated)
```


## `lsdtools.procedural.MeshError`

Kind: class. Source: `services/procedural/src/lsd_procedural/geometry.py:23`.

Source docstring:

```text
An invalid or over-budget mesh description.
```


Implementation alias: `lsd_procedural.geometry.MeshError`.

Declared bases: `ValueError`.

## `lsdtools.procedural.MeshSession`

Kind: class. Source: `services/procedural/src/lsd_procedural/model.py:274`.

```python
MeshSession(self, recipe=None)
```


Source docstring:

```text
One bounded authoring document; hosts retain responsibility for role/approval.

The local command boundary is not a replacement wire or an authorization broker.
A composing LSD View maps its declared actions to dispatch after normal approval.
```


Implementation alias: `lsd_procedural.model.MeshSession`.

### `lsdtools.procedural.MeshSession.__init__`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:280`.

```python
__init__(self, recipe=None)
```


```python
recipe: (unannotated)
self: (unannotated)
```


### `lsdtools.procedural.MeshSession.revision`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:292`.

```python
revision(self)
```


```python
self: (unannotated)
```


### `lsdtools.procedural.MeshSession.asset`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:297`.

```python
asset(self)
```


```python
self: (unannotated)
```


### `lsdtools.procedural.MeshSession.snapshot`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:301`.

```python
snapshot(self)
```


```python
self: (unannotated)
```


Source docstring:

```text
Read an immutable asset and its revision together under one lock.
```


### `lsdtools.procedural.MeshSession.dispatch_snapshot`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:306`.

```python
dispatch_snapshot(self, action, params=None)
```


```python
action: (unannotated)
params: (unannotated)
self: (unannotated)
```


Source docstring:

```text
Bind a command receipt to its exact asset, recipe and inspection state.

Native hosts may call this in a worker and publish the returned detached
data on their UI thread. No callback runs while this lock is held.
```


### `lsdtools.procedural.MeshSession.recipe`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:317`.

```python
recipe(self)
```


```python
self: (unannotated)
```


### `lsdtools.procedural.MeshSession.describe`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:321`.

```python
describe(self)
```


```python
self: (unannotated)
```


### `lsdtools.procedural.MeshSession.dispatch`

Kind: method. Source: `services/procedural/src/lsd_procedural/model.py:435`.

```python
dispatch(self, action, params=None)
```


```python
action: (unannotated)
params: (unannotated)
self: (unannotated)
```


Source docstring:

```text
Return a JSON-safe receipt; rejected edits preserve geometry and history.
```


## `lsdtools.procedural.RenderProceduralMesh`

Kind: class. Source: `services/procedural/src/lsd_procedural/steps.py:151`.

Source docstring:

```text
Preview geometry and authored corner shading through the existing mesh viewer.
```


Implementation alias: `lsd_procedural.steps.RenderProceduralMesh`.

Declared bases: `DeliverStep`.

### `lsdtools.procedural.RenderProceduralMesh.type_id`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:153`.

```python
type_id = 'lsd-procedural.render_mesh'
```


### `lsdtools.procedural.RenderProceduralMesh.input_ports`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:154`.

```python
input_ports = ['mesh']
```


### `lsdtools.procedural.RenderProceduralMesh.viewer_payload_type`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:155`.

```python
viewer_payload_type = LayerPayload
```


### `lsdtools.procedural.RenderProceduralMesh.layer_kind`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:156`.

```python
layer_kind = 'mesh'
```


### `lsdtools.procedural.RenderProceduralMesh.value_binding`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:157`.

```python
value_binding = 'column'
```


### `lsdtools.procedural.RenderProceduralMesh.cache_pin`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:158`.

```python
cache_pin = 'lsd-procedural-preview-v1'
```


### `lsdtools.procedural.RenderProceduralMesh.layer`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:159`.

```python
layer = param(str, default='', group='Render', description='Layer id; blank uses entity and step.')
```


### `lsdtools.procedural.RenderProceduralMesh.view`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:160`.

```python
view = param(str, default='', group='Render', description='In-scene view; blank uses current.')
```


### `lsdtools.procedural.RenderProceduralMesh.target`

Kind: attribute. Source: `services/procedural/src/lsd_procedural/steps.py:161`.

```python
target = param(str, default='', group='Render', description='Main-view target; blank uses active viewer.')
```


### `lsdtools.procedural.RenderProceduralMesh.run`

Kind: method. Source: `services/procedural/src/lsd_procedural/steps.py:163`.

```python
run(self, inputs)
```


```python
inputs: (unannotated)
self: (unannotated)
```


## `lsdtools.procedural.build_mesh_product`

Kind: function. Source: `services/procedural/src/lsd_procedural/product.py:154`.

```python
build_mesh_product(asset: Asset, recipe: dict, *, source: dict | None=None) -> Mapping[str, bytes]
```


```python
asset: Asset
recipe: dict
source: dict | None
```


Source docstring:

```text
Encode an exact evaluated recipe as immutable portable product files.

The supplied asset is checked against a fresh evaluation so an accidental
stale asset/recipe pair cannot acquire false lineage. Reads never evaluate
the recipe. ``source`` is None offline, or the complete detached canonical
configuration SourceBinding record; an editor draft revision is not one.
```


Implementation alias: `lsd_procedural.product.build_mesh_product`.

## `lsdtools.procedural.can_edit_mesh`

Kind: function. Source: `sdk/src/lsdtools/procedural.py:113`.

```python
can_edit_mesh(entity)
```


```python
entity: (unannotated)
```


Source docstring:

```text
Coarse entity eligibility; opening always validates an exact published source.

A published entity deliberately has no executable configurable instances.
It is an eligible route carrier; the exact source belongs to its project
snapshot and is checked by create_mesh_editor/open_mesh_editor.
```


## `lsdtools.procedural.compile_recipe`

Kind: function. Source: `services/procedural/src/lsd_procedural/model.py:153`.

```python
compile_recipe(recipe: dict) -> Asset
```


```python
recipe: dict
```


Source docstring:

```text
Compile v1 JSON into detached geometry; never execute code or touch files.
```


Implementation alias: `lsd_procedural.model.compile_recipe`.

## `lsdtools.procedural.create_mesh_editor`

Kind: function. Source: `sdk/src/lsdtools/procedural.py:148`.

```python
create_mesh_editor(context, *, configurable_id, entity=None, view_id)
```


```python
configurable_id: (unannotated)
context: (unannotated)
entity: (unannotated)
view_id: (unannotated)
```


Source docstring:

```text
Compose one source-bound editor; its ConfigurationDraft owns history and Save.
```


## `lsdtools.procedural.example_recipe`

Kind: function. Source: `services/procedural/src/lsd_procedural/presets.py:27`.

```python
example_recipe(name: str, seed: int=0) -> dict
```


```python
name: str
seed: int
```


Implementation alias: `lsd_procedural.presets.example_recipe`.

## `lsdtools.procedural.expanded_mesh_arrays`

Kind: function. Source: `services/procedural/src/lsd_procedural/product.py:341`.

```python
expanded_mesh_arrays(mesh: MeshData) -> ExpandedMeshArrays
```


```python
mesh: MeshData
```


Source docstring:

```text
Split corners only when geometric index, normal or UV differs.

A downstream assembly must pair source_vertices with its component identity;
vertex zero in two components is two different geometric vertices. A UV-less
preview may use positions/normals and factor colors while preserving UVs and
PBR material values in the typed product. That is an explicit preview profile,
not a lossless renderer mesh-asset or GLB import/export claim.
```


Implementation alias: `lsd_procedural.product.expanded_mesh_arrays`.

## `lsdtools.procedural.export_glb`

Kind: function. Source: `services/procedural/src/lsd_procedural/export.py:52`.

```python
export_glb(asset: Asset) -> bytes
```


```python
asset: Asset
```


Source docstring:

```text
Export a self-contained glTF 2.0 binary, rotating Z-up assets to Y-up.

Each named part is one node/mesh/primitive and shares the asset's named PBR
materials. Each part uses local float32 vertex buffers and a node translation
preserving its authored placement in meters. Its bounds center is subtracted
in float64 before conversion; normals and UVs retain their corner association.
Output has no timestamps, external resources or executable payloads.
```


Implementation alias: `lsd_procedural.export.export_glb`.

## `lsdtools.procedural.export_obj`

Kind: function. Source: `services/procedural/src/lsd_procedural/export.py:160`.

```python
export_obj(asset: Asset) -> str
```


```python
asset: Asset
```


Source docstring:

```text
Return geometry-only Wavefront OBJ text in the source meter/Z-up frame.

OBJ retains corner UVs/normals and named objects. Materials are deliberately
omitted; use GLB for color/PBR transport. No external MTL file is referenced.
```


Implementation alias: `lsd_procedural.export.export_obj`.

## `lsdtools.procedural.files_from_mesh_table`

Kind: function. Source: `services/procedural/src/lsd_procedural/steps.py:70`.

```python
files_from_mesh_table(table: pa.Table) -> Mapping[str, bytes]
```


```python
table: pa.Table
```


Source docstring:

```text
Decode independently, preserving required codec stamps beside host metadata.
```


Implementation alias: `lsd_procedural.steps.files_from_mesh_table`.

## `lsdtools.procedural.generator_catalog`

Kind: function. Source: `services/procedural/src/lsd_procedural/procedural.py:67`.

```python
generator_catalog()
```


Implementation alias: `lsd_procedural.procedural.generator_catalog`.

## `lsdtools.procedural.inspect_mesh`

Kind: function. Source: `services/procedural/src/lsd_procedural/inspect.py:13`.

```python
inspect_mesh(mesh: MeshData) -> dict
```


```python
mesh: MeshData
```


Source docstring:

```text
Return JSON-compatible measurements; never infer welded topology from UVs.

``closed`` means all indexed edges have two incident faces, with no duplicate
or degenerate triangles. This does not certify an embedded solid: triangle
intersections, nested-shell intent and vertex-link manifoldness are not tested.
Volume uses the oriented-surface integral, so callers must retain those caveats.
```


Implementation alias: `lsd_procedural.inspect.inspect_mesh`.

## `lsdtools.procedural.inspect_mesh_product`

Kind: function. Source: `services/procedural/src/lsd_procedural/product.py:275`.

```python
inspect_mesh_product(files: Mapping[str, bytes]) -> dict
```


```python
files: Mapping[str, bytes]
```


Source docstring:

```text
Return bounded lineage and channel signatures after complete validation.

Signatures distinguish topology/vertex domain, positions, shading and material
changes. They identify bytes, not a promise that an old rig is compatible.
```


Implementation alias: `lsd_procedural.product.inspect_mesh_product`.

## `lsdtools.procedural.mesh_dependencies`

Kind: function. Source: `sdk/src/lsdtools/procedural.py:49`.

```python
mesh_dependencies(backend, *, configurable_id)
```


```python
backend: (unannotated)
configurable_id: (unannotated)
```


Source docstring:

```text
Inspect current data connections around one source without inferring rig compatibility.

Uses only published bindings. Source tags in exported tables are descriptive
hints and cannot authorize edits or substitute for this project graph.
```


## `lsdtools.procedural.mesh_product_recipe`

Kind: function. Source: `services/procedural/src/lsd_procedural/product.py:270`.

```python
mesh_product_recipe(files: Mapping[str, bytes]) -> dict
```


```python
files: Mapping[str, bytes]
```


Source docstring:

```text
Return detached source data after complete product validation; never evaluate it.
```


Implementation alias: `lsd_procedural.product.mesh_product_recipe`.

## `lsdtools.procedural.mesh_product_table`

Kind: function. Source: `services/procedural/src/lsd_procedural/steps.py:58`.

```python
mesh_product_table(files: Mapping[str, bytes]) -> pa.Table
```


```python
files: Mapping[str, bytes]
```


Source docstring:

```text
Persist a completely validated product as one strict typed Arrow value.
```


Implementation alias: `lsd_procedural.steps.mesh_product_table`.

## `lsdtools.procedural.mesh_sources`

Kind: function. Source: `sdk/src/lsdtools/procedural.py:30`.

```python
mesh_sources(backend, *, entity_id=None)
```


```python
backend: (unannotated)
entity_id: (unannotated)
```


Source docstring:

```text
Describe every exact mesh source in the held publication, never a guessed first step.
```


## `lsdtools.procedural.open_mesh_editor`

Kind: function. Source: `sdk/src/lsdtools/procedural.py:164`.

```python
open_mesh_editor(context, *, entity, configurable_id)
```


```python
configurable_id: (unannotated)
context: (unannotated)
entity: (unannotated)
```


Source docstring:

```text
Present one exact source through the shared native main-view route.
```


## `lsdtools.procedural.operation_catalog`

Kind: function. Source: `services/procedural/src/lsd_procedural/geometry.py:551`.

```python
operation_catalog()
```


Source docstring:

```text
Return detached JSON schemas for every supported operation.
```


Implementation alias: `lsd_procedural.geometry.operation_catalog`.

## `lsdtools.procedural.parse_recipe_text`

Kind: function. Source: `services/procedural/src/lsd_procedural/model.py:101`.

```python
parse_recipe_text(text: str)
```


```python
text: str
```


Source docstring:

```text
Bounded strict JSON parsing for recipe files, widget drafts and requests.

Duplicate keys and nonfinite literals are errors. This parses data only;
compile_recipe supplies the shape/semantic validation.
```


Implementation alias: `lsd_procedural.model.parse_recipe_text`.

## `lsdtools.procedural.read_mesh_product`

Kind: function. Source: `services/procedural/src/lsd_procedural/product.py:265`.

```python
read_mesh_product(files: Mapping[str, bytes]) -> Asset
```


```python
files: Mapping[str, bytes]
```


Source docstring:

```text
Validate every declared file and return an immutable, independently decoded asset.
```


Implementation alias: `lsd_procedural.product.read_mesh_product`.

## `lsdtools.procedural.recipe_schema`

Kind: function. Source: `services/procedural/src/lsd_procedural/schema.py:6`.

```python
recipe_schema()
```


Source docstring:

```text
Return a fresh schema; no caller can change another session's catalog.
```


Implementation alias: `lsd_procedural.schema.recipe_schema`.

## `lsdtools.procedural.template_catalog`

Kind: function. Source: `services/procedural/src/lsd_procedural/presets.py:23`.

```python
template_catalog()
```


Implementation alias: `lsd_procedural.presets.template_catalog`.
