# lsdtools.animation reference
URL: https://lsd.tools/docs/sdk-lsdtools-animation
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
Character assets and Animation Studio, lazily composed over existing LSD owners.
```


## `lsdtools.animation.AnimationBinding`

Kind: class. Source: `services/animation/src/lsd_animation/persistence.py:124`.

Implementation alias: `lsd_animation.persistence.AnimationBinding`.

### `lsdtools.animation.AnimationBinding.object_eid`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:125`.

```python
object_eid: int
```


### `lsdtools.animation.AnimationBinding.asset`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:126`.

```python
asset: str
```


### `lsdtools.animation.AnimationBinding.clip`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:127`.

```python
clip: str
```


### `lsdtools.animation.AnimationBinding.playback`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:128`.

```python
playback: Playback
```


### `lsdtools.animation.AnimationBinding.layers`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:129`.

```python
layers: tuple[BlendLayer, ...]
```


```python
layers = ()
```


### `lsdtools.animation.AnimationBinding.live`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:130`.

```python
live: bool
```


```python
live = False
```


### `lsdtools.animation.AnimationBinding.motion`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:131`.

```python
motion: object | None
```


```python
motion = None
```


### `lsdtools.animation.AnimationBinding.neural`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:132`.

```python
neural: NeuralBinding | None
```


```python
neural = None
```


### `lsdtools.animation.AnimationBinding.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:157`.

```python
to_dict(self)
```


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


## `lsdtools.animation.AnimationDocument`

Kind: class. Source: `services/animation/src/lsd_animation/persistence.py:165`.

Implementation alias: `lsd_animation.persistence.AnimationDocument`.

### `lsdtools.animation.AnimationDocument.assets`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:166`.

```python
assets: Mapping[str, CharacterAsset]
```


### `lsdtools.animation.AnimationDocument.instances`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:167`.

```python
instances: tuple[AnimationBinding, ...]
```


### `lsdtools.animation.AnimationDocument.neural_profiles`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:168`.

```python
neural_profiles: Mapping[str, NeuralProfile]
```


```python
neural_profiles = field(default_factory=dict)
```


### `lsdtools.animation.AnimationDocument.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:169`.

```python
digest: str
```


```python
digest = field(init=False)
```


### `lsdtools.animation.AnimationDocument.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:245`.

```python
to_dict(self)
```


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


### `lsdtools.animation.AnimationDocument.canonical_bytes`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:250`.

```python
canonical_bytes(self)
```


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


### `lsdtools.animation.AnimationDocument.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:254`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.AnimationError`

Kind: class. Source: `services/animation/src/lsd_animation/assets.py:27`.

Source docstring:

```text
Invalid or unsupported character data or sample.
```


Implementation alias: `lsd_animation.assets.AnimationError`.

Declared bases: `ValueError`.

## `lsdtools.animation.BlendLayer`

Kind: class. Source: `services/animation/src/lsd_animation/persistence.py:75`.

Implementation alias: `lsd_animation.persistence.BlendLayer`.

### `lsdtools.animation.BlendLayer.id`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:76`.

```python
id: str
```


### `lsdtools.animation.BlendLayer.clip`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:77`.

```python
clip: str
```


### `lsdtools.animation.BlendLayer.playback`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:78`.

```python
playback: Playback
```


### `lsdtools.animation.BlendLayer.start_tick`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:79`.

```python
start_tick: int
```


### `lsdtools.animation.BlendLayer.weight`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:80`.

```python
weight: float
```


### `lsdtools.animation.BlendLayer.mask`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:81`.

```python
mask: Mapping[str, float]
```


### `lsdtools.animation.BlendLayer.mode`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:82`.

```python
mode: str
```


```python
mode = 'override'
```


### `lsdtools.animation.BlendLayer.reference`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:83`.

```python
reference: BlendReference | None
```


```python
reference = None
```


### `lsdtools.animation.BlendLayer.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:108`.

```python
to_dict(self)
```


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


### `lsdtools.animation.BlendLayer.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:114`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.BlendReference`

Kind: class. Source: `services/animation/src/lsd_animation/library.py:22`.

Source docstring:

```text
An explicit rest pose (None, 0) or one named clip at an exact local tick.
```


Implementation alias: `lsd_animation.library.BlendReference`.

### `lsdtools.animation.BlendReference.clip`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:25`.

```python
clip: str | None
```


### `lsdtools.animation.BlendReference.tick`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:26`.

```python
tick: int
```


### `lsdtools.animation.BlendReference.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:36`.

```python
to_dict(self)
```


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


### `lsdtools.animation.BlendReference.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:40`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.BuildAnimation`

Kind: class. Source: `services/animation/src/lsd_animation/steps.py:19`.

Source docstring:

```text
Build bounded rig/skin/clip data for existing scene object identities.
```


Implementation alias: `lsd_animation.steps.BuildAnimation`.

Declared bases: `LoadStep`.

### `lsdtools.animation.BuildAnimation.output_ports`

Kind: attribute. Source: `services/animation/src/lsd_animation/steps.py:21`.

```python
output_ports = ['animation']
```


### `lsdtools.animation.BuildAnimation.cache_pin`

Kind: attribute. Source: `services/animation/src/lsd_animation/steps.py:22`.

```python
cache_pin = 'lsd-animation-document-v1'
```


### `lsdtools.animation.BuildAnimation.document`

Kind: attribute. Source: `services/animation/src/lsd_animation/steps.py:23`.

```python
document = param(dict, required=True, label='Animation assets', validators=[_validate_document], description='Contained character resources and bindings to scene object eids.')
```


### `lsdtools.animation.BuildAnimation.run`

Kind: method. Source: `services/animation/src/lsd_animation/steps.py:26`.

```python
run(self)
```


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


## `lsdtools.animation.CharacterAsset`

Kind: class. Source: `services/animation/src/lsd_animation/library.py:84`.

Source docstring:

```text
A shared rig, skin and bounded named clip library; no mutable pose buffers.

Each clip is prepared once. The single-clip PreparedCharacter reference remains the
numerical authority; all its plans share this asset's immutable skeleton and skin.
```


Implementation alias: `lsd_animation.library.CharacterAsset`.

### `lsdtools.animation.CharacterAsset.skeleton`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:91`.

```python
skeleton: Skeleton
```


### `lsdtools.animation.CharacterAsset.skin`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:92`.

```python
skin: SkinBinding
```


### `lsdtools.animation.CharacterAsset.clips`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:93`.

```python
clips: Mapping[str, Clip]
```


### `lsdtools.animation.CharacterAsset.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:94`.

```python
digest: str
```


```python
digest = field(init=False)
```


### `lsdtools.animation.CharacterAsset.duration`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:114`.

```python
duration(self)
```


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


### `lsdtools.animation.CharacterAsset.prepared`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:117`.

```python
prepared(self, clip: str) -> PreparedCharacter
```


```python
clip: str
self: (unannotated)
```


### `lsdtools.animation.CharacterAsset.instance`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:123`.

```python
instance(self)
```


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


### `lsdtools.animation.CharacterAsset.reference_pose`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:136`.

```python
reference_pose(self, reference: BlendReference) -> PreparedReferencePose
```


```python
reference: BlendReference
self: (unannotated)
```


Source docstring:

```text
Prepare local TRS once; callers deduplicate references outside frame sampling.
```


### `lsdtools.animation.CharacterAsset.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:149`.

```python
to_dict(self)
```


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


### `lsdtools.animation.CharacterAsset.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:154`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


### `lsdtools.animation.CharacterAsset.from_character`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:164`.

```python
from_character(cls, character: PreparedCharacter, *, clip: str)
```


```python
character: PreparedCharacter
clip: str
cls: (unannotated)
```


Source docstring:

```text
Explicit authoring conversion of the single-clip reference into a named library.
```


## `lsdtools.animation.CharacterInstance`

Kind: class. Source: `services/animation/src/lsd_animation/evaluate.py:79`.

```python
CharacterInstance(self, character: PreparedCharacter)
```


Source docstring:

```text
Per-instance storage and a pure absolute-tick sampler; no clock, worker or actor state.
```


Implementation alias: `lsd_animation.evaluate.CharacterInstance`.

### `lsdtools.animation.CharacterInstance.__init__`

Kind: method. Source: `services/animation/src/lsd_animation/evaluate.py:82`.

```python
__init__(self, character: PreparedCharacter)
```


```python
character: PreparedCharacter
self: (unannotated)
```


### `lsdtools.animation.CharacterInstance.sample`

Kind: method. Source: `services/animation/src/lsd_animation/evaluate.py:127`.

```python
sample(self, tick: int) -> CharacterOutput
```


```python
self: (unannotated)
tick: int
```


## `lsdtools.animation.CharacterOutput`

Kind: class. Source: `services/animation/src/lsd_animation/evaluate.py:60`.

Source docstring:

```text
Borrowed read-only views, valid until the next successful sample on this instance.

Arrays and matrices are float64 in skeleton-local space. ``world`` composes the joint
hierarchy; it does not include the scene object's transform. Copy retained values before
the next sample. Invalid samples leave all published output and ``tick`` unchanged.
```


Implementation alias: `lsd_animation.evaluate.CharacterOutput`.

### `lsdtools.animation.CharacterOutput.tick`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:68`.

```python
tick: int | None
```


### `lsdtools.animation.CharacterOutput.translation`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:69`.

```python
translation: np.ndarray
```


### `lsdtools.animation.CharacterOutput.rotation`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:70`.

```python
rotation: np.ndarray
```


### `lsdtools.animation.CharacterOutput.scale`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:71`.

```python
scale: np.ndarray
```


### `lsdtools.animation.CharacterOutput.world`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:72`.

```python
world: np.ndarray
```


### `lsdtools.animation.CharacterOutput.palette`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:73`.

```python
palette: np.ndarray
```


### `lsdtools.animation.CharacterOutput.positions`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:74`.

```python
positions: np.ndarray
```


### `lsdtools.animation.CharacterOutput.normals`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:75`.

```python
normals: np.ndarray
```


### `lsdtools.animation.CharacterOutput.bounds`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:76`.

```python
bounds: np.ndarray
```


## `lsdtools.animation.CharacterSampler`

Kind: class. Source: `services/animation/src/lsd_animation/library.py:171`.

```python
CharacterSampler(self, asset: CharacterAsset)
```


Source docstring:

```text
One geometry scratch allocation per caller, with small per-clip Tween batches.

A successful sample retires the previous borrowed output, including when the clip changes.
Neither preparing a clip nor switching it allocates another geometry buffer.
Before the first sample, output is the admitted bind pose with tick and clip both None.
```


Implementation alias: `lsd_animation.library.CharacterSampler`.

### `lsdtools.animation.CharacterSampler.__init__`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:179`.

```python
__init__(self, asset: CharacterAsset)
```


```python
asset: CharacterAsset
self: (unannotated)
```


### `lsdtools.animation.CharacterSampler.output`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:196`.

```python
output(self)
```


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


### `lsdtools.animation.CharacterSampler.sample`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:199`.

```python
sample(self, tick: int, *, clip: str)
```


```python
clip: str
self: (unannotated)
tick: int
```


### `lsdtools.animation.CharacterSampler.sample_layers`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:211`.

```python
sample_layers(self, tick: int, *, clip: str, layers: tuple=())
```


```python
clip: str
layers: tuple
self: (unannotated)
tick: int
```


### `lsdtools.animation.CharacterSampler.sample_local`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:214`.

```python
sample_local(self, tick: int, *, clip: str, layers: tuple=(), out)
```


```python
clip: str
layers: tuple
out: (unannotated)
self: (unannotated)
tick: int
```


Source docstring:

```text
Compose local TRS only into an admitted caller stage; never skin a discarded pose.
```


### `lsdtools.animation.CharacterSampler.deform_local`

Kind: method. Source: `services/animation/src/lsd_animation/library.py:225`.

```python
deform_local(self, tick: int, pose)
```


```python
pose: (unannotated)
self: (unannotated)
tick: int
```


Source docstring:

```text
Validate and skin one final joint-local pose, preserving output on failure.
```


### `lsdtools.animation.CharacterSampler.asset`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:180`.

```python
asset: CharacterAsset
```


```python
asset = asset
```


### `lsdtools.animation.CharacterSampler.clip`

Kind: attribute. Source: `services/animation/src/lsd_animation/library.py:181`.

```python
clip: (unannotated)
```


```python
clip = None
```


## `lsdtools.animation.Clip`

Kind: class. Source: `services/animation/src/lsd_animation/assets.py:239`.

```python
Clip(self, skeleton, timeline)
```


Implementation alias: `lsd_animation.assets.Clip`.

### `lsdtools.animation.Clip.skeleton`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:240`.

```python
skeleton: Skeleton
```


### `lsdtools.animation.Clip.duration`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:242`.

```python
duration: int
```


### `lsdtools.animation.Clip.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:243`.

```python
digest: str
```


### `lsdtools.animation.Clip.__init__`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:245`.

```python
__init__(self, skeleton, timeline)
```


```python
self: (unannotated)
skeleton: (unannotated)
timeline: (unannotated)
```


### `lsdtools.animation.Clip.tween_prepared`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:271`.

```python
tween_prepared(self)
```


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


Source docstring:

```text
A detached owner-validated Tween plan, suitable for native.freeze or preparation.

Call once per prepared resource. Returning a new plan keeps callers from changing the
immutable Clip; PreparedCharacter shares its own private plan across its instances.
```


### `lsdtools.animation.Clip.marker_prepared`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:280`.

```python
marker_prepared(self)
```


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


Source docstring:

```text
Detached event-only Tween plan; joint curves are never sampled twice.
```


### `lsdtools.animation.Clip.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:290`.

```python
to_dict(self)
```


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


### `lsdtools.animation.Clip.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:294`.

```python
from_dict(cls, skeleton, value)
```


```python
cls: (unannotated)
skeleton: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.ContactConstraint`

Kind: class. Source: `services/animation/src/lsd_animation/motion.py:33`.

Implementation alias: `lsd_animation.motion.ContactConstraint`.

### `lsdtools.animation.ContactConstraint.hip`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:34`.

```python
hip: str
```


### `lsdtools.animation.ContactConstraint.knee`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:35`.

```python
knee: str
```


### `lsdtools.animation.ContactConstraint.ankle`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:36`.

```python
ankle: str
```


### `lsdtools.animation.ContactConstraint.support_eid`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:37`.

```python
support_eid: int
```


### `lsdtools.animation.ContactConstraint.point`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:38`.

```python
point: tuple[float, float, float]
```


### `lsdtools.animation.ContactConstraint.pole`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:39`.

```python
pole: tuple[float, float, float]
```


### `lsdtools.animation.ContactConstraint.weight`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:40`.

```python
weight: float
```


```python
weight = 1.0
```


### `lsdtools.animation.ContactConstraint.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/motion.py:54`.

```python
to_dict(self)
```


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


### `lsdtools.animation.ContactConstraint.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/motion.py:60`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.ImportedCharacter`

Kind: class. Source: `services/animation/src/lsd_animation/gltf.py:31`.

Implementation alias: `lsd_animation.gltf.ImportedCharacter`.

### `lsdtools.animation.ImportedCharacter.asset`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:32`.

```python
asset: CharacterAsset
```


### `lsdtools.animation.ImportedCharacter.source_sha256`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:33`.

```python
source_sha256: str
```


### `lsdtools.animation.ImportedCharacter.mesh_node`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:34`.

```python
mesh_node: int
```


### `lsdtools.animation.ImportedCharacter.ticks_per_second`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:35`.

```python
ticks_per_second: int
```


### `lsdtools.animation.ImportedCharacter.scale`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:36`.

```python
scale: float
```


### `lsdtools.animation.ImportedCharacter.bind_residual`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:37`.

```python
bind_residual: float
```


### `lsdtools.animation.ImportedCharacter.notices`

Kind: attribute. Source: `services/animation/src/lsd_animation/gltf.py:38`.

```python
notices: tuple[str, ...]
```


### `lsdtools.animation.ImportedCharacter.describe`

Kind: method. Source: `services/animation/src/lsd_animation/gltf.py:40`.

```python
describe(self)
```


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


## `lsdtools.animation.LOCAL_ROTATION`

Kind: value. Source: `services/animation/src/lsd_animation/assets.py:22`.

```python
LOCAL_ROTATION = 'lsd-animation/local-rotation'
```


Implementation alias: `lsd_animation.assets.LOCAL_ROTATION`.

## `lsdtools.animation.LOCAL_SCALE`

Kind: value. Source: `services/animation/src/lsd_animation/assets.py:23`.

```python
LOCAL_SCALE = 'lsd-animation/local-scale'
```


Implementation alias: `lsd_animation.assets.LOCAL_SCALE`.

## `lsdtools.animation.LOCAL_TRANSLATION`

Kind: value. Source: `services/animation/src/lsd_animation/assets.py:21`.

```python
LOCAL_TRANSLATION = 'lsd-animation/local-translation'
```


Implementation alias: `lsd_animation.assets.LOCAL_TRANSLATION`.

## `lsdtools.animation.MotionBinding`

Kind: class. Source: `services/animation/src/lsd_animation/motion.py:69`.

Implementation alias: `lsd_animation.motion.MotionBinding`.

### `lsdtools.animation.MotionBinding.root_joint`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:70`.

```python
root_joint: str | None
```


```python
root_joint = None
```


### `lsdtools.animation.MotionBinding.axes`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:71`.

```python
axes: tuple[int, ...]
```


```python
axes = (0, 1, 2)
```


### `lsdtools.animation.MotionBinding.owner`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:72`.

```python
owner: str
```


```python
owner = 'scene'
```


### `lsdtools.animation.MotionBinding.contacts`

Kind: attribute. Source: `services/animation/src/lsd_animation/motion.py:73`.

```python
contacts: tuple[ContactConstraint, ...]
```


```python
contacts = ()
```


### `lsdtools.animation.MotionBinding.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/motion.py:90`.

```python
to_dict(self)
```


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


### `lsdtools.animation.MotionBinding.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/motion.py:95`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.NeuralBinding`

Kind: class. Source: `services/animation/src/lsd_animation/neural_binding.py:203`.

Implementation alias: `lsd_animation.neural_binding.NeuralBinding`.

### `lsdtools.animation.NeuralBinding.profile`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:204`.

```python
profile: str
```


### `lsdtools.animation.NeuralBinding.enabled`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:205`.

```python
enabled: bool
```


```python
enabled = True
```


### `lsdtools.animation.NeuralBinding.backend`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:206`.

```python
backend: str
```


```python
backend = 'auto'
```


### `lsdtools.animation.NeuralBinding.budget_ms`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:207`.

```python
budget_ms: float
```


```python
budget_ms = 16.0
```


### `lsdtools.animation.NeuralBinding.export_policy`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:208`.

```python
export_policy: str
```


```python
export_policy = 'optional'
```


### `lsdtools.animation.NeuralBinding.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/neural_binding.py:219`.

```python
to_dict(self)
```


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


### `lsdtools.animation.NeuralBinding.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/neural_binding.py:224`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.NeuralProfile`

Kind: class. Source: `services/animation/src/lsd_animation/neural_binding.py:110`.

Implementation alias: `lsd_animation.neural_binding.NeuralProfile`.

### `lsdtools.animation.NeuralProfile.model`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:111`.

```python
model: ModelArtifact
```


### `lsdtools.animation.NeuralProfile.skeleton_digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:112`.

```python
skeleton_digest: str
```


### `lsdtools.animation.NeuralProfile.skin_digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:113`.

```python
skin_digest: str
```


### `lsdtools.animation.NeuralProfile.joint_ids`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:114`.

```python
joint_ids: tuple[str, ...]
```


### `lsdtools.animation.NeuralProfile.position_deltas`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:115`.

```python
position_deltas: np.ndarray
```


### `lsdtools.animation.NeuralProfile.normal_deltas`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:116`.

```python
normal_deltas: np.ndarray
```


### `lsdtools.animation.NeuralProfile.input_scale`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:117`.

```python
input_scale: float
```


### `lsdtools.animation.NeuralProfile.input_name`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:118`.

```python
input_name: str
```


### `lsdtools.animation.NeuralProfile.output_name`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:119`.

```python
output_name: str
```


### `lsdtools.animation.NeuralProfile.max_coefficient`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:120`.

```python
max_coefficient: float
```


### `lsdtools.animation.NeuralProfile.max_displacement`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:121`.

```python
max_displacement: float
```


### `lsdtools.animation.NeuralProfile.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/neural_binding.py:122`.

```python
digest: str
```


```python
digest = field(init=False)
```


### `lsdtools.animation.NeuralProfile.validate_asset`

Kind: method. Source: `services/animation/src/lsd_animation/neural_binding.py:158`.

```python
validate_asset(self, asset)
```


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


### `lsdtools.animation.NeuralProfile.describe`

Kind: method. Source: `services/animation/src/lsd_animation/neural_binding.py:164`.

```python
describe(self)
```


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


### `lsdtools.animation.NeuralProfile.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/neural_binding.py:175`.

```python
to_dict(self)
```


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


### `lsdtools.animation.NeuralProfile.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/neural_binding.py:185`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.Playback`

Kind: class. Source: `services/animation/src/lsd_animation/persistence.py:31`.

Implementation alias: `lsd_animation.persistence.Playback`.

### `lsdtools.animation.Playback.range`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:32`.

```python
range: tuple[int, int]
```


### `lsdtools.animation.Playback.phase`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:33`.

```python
phase: int
```


### `lsdtools.animation.Playback.wrap`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:34`.

```python
wrap: str
```


### `lsdtools.animation.Playback.direction`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:35`.

```python
direction: int
```


### `lsdtools.animation.Playback.rate`

Kind: attribute. Source: `services/animation/src/lsd_animation/persistence.py:36`.

```python
rate: tuple[int, int]
```


### `lsdtools.animation.Playback.cursor_at`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:49`.

```python
cursor_at(self, tick)
```


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


### `lsdtools.animation.Playback.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:55`.

```python
to_dict(self)
```


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


### `lsdtools.animation.Playback.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/persistence.py:60`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.PreparedCharacter`

Kind: class. Source: `services/animation/src/lsd_animation/evaluate.py:17`.

Source docstring:

```text
One immutable asset closure; instances own all mutable sample/output storage.
```


Implementation alias: `lsd_animation.evaluate.PreparedCharacter`.

### `lsdtools.animation.PreparedCharacter.skeleton`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:20`.

```python
skeleton: Skeleton
```


### `lsdtools.animation.PreparedCharacter.skin`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:21`.

```python
skin: SkinBinding
```


### `lsdtools.animation.PreparedCharacter.clip`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:22`.

```python
clip: Clip
```


### `lsdtools.animation.PreparedCharacter.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/evaluate.py:23`.

```python
digest: str
```


```python
digest = field(init=False)
```


### `lsdtools.animation.PreparedCharacter.duration`

Kind: method. Source: `services/animation/src/lsd_animation/evaluate.py:40`.

```python
duration(self)
```


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


### `lsdtools.animation.PreparedCharacter.instance`

Kind: method. Source: `services/animation/src/lsd_animation/evaluate.py:43`.

```python
instance(self)
```


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


### `lsdtools.animation.PreparedCharacter.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/evaluate.py:46`.

```python
to_dict(self)
```


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


### `lsdtools.animation.PreparedCharacter.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/evaluate.py:51`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.Skeleton`

Kind: class. Source: `services/animation/src/lsd_animation/assets.py:95`.

Implementation alias: `lsd_animation.assets.Skeleton`.

### `lsdtools.animation.Skeleton.joint_ids`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:96`.

```python
joint_ids: tuple[str, ...]
```


### `lsdtools.animation.Skeleton.parent_indices`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:97`.

```python
parent_indices: np.ndarray
```


### `lsdtools.animation.Skeleton.rest_translation`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:98`.

```python
rest_translation: np.ndarray
```


### `lsdtools.animation.Skeleton.rest_rotation`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:99`.

```python
rest_rotation: np.ndarray
```


### `lsdtools.animation.Skeleton.rest_scale`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:100`.

```python
rest_scale: np.ndarray | None
```


```python
rest_scale = None
```


### `lsdtools.animation.Skeleton.topological_order`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:101`.

```python
topological_order: tuple[int, ...]
```


```python
topological_order = field(init=False)
```


### `lsdtools.animation.Skeleton.bind_world`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:102`.

```python
bind_world: np.ndarray
```


```python
bind_world = field(init=False, repr=False)
```


### `lsdtools.animation.Skeleton.inverse_bind`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:103`.

```python
inverse_bind: np.ndarray
```


```python
inverse_bind = field(init=False, repr=False)
```


### `lsdtools.animation.Skeleton.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:104`.

```python
digest: str
```


```python
digest = field(init=False)
```


### `lsdtools.animation.Skeleton.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:151`.

```python
to_dict(self)
```


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


### `lsdtools.animation.Skeleton.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:157`.

```python
from_dict(cls, value)
```


```python
cls: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.SkinBinding`

Kind: class. Source: `services/animation/src/lsd_animation/assets.py:163`.

Implementation alias: `lsd_animation.assets.SkinBinding`.

### `lsdtools.animation.SkinBinding.skeleton`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:164`.

```python
skeleton: Skeleton
```


### `lsdtools.animation.SkinBinding.positions`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:165`.

```python
positions: np.ndarray
```


### `lsdtools.animation.SkinBinding.triangles`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:166`.

```python
triangles: np.ndarray
```


### `lsdtools.animation.SkinBinding.joint_indices`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:167`.

```python
joint_indices: np.ndarray
```


### `lsdtools.animation.SkinBinding.weights`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:168`.

```python
weights: np.ndarray
```


### `lsdtools.animation.SkinBinding.normals`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:169`.

```python
normals: np.ndarray | None
```


```python
normals = None
```


### `lsdtools.animation.SkinBinding.digest`

Kind: attribute. Source: `services/animation/src/lsd_animation/assets.py:170`.

```python
digest: str
```


```python
digest = field(init=False)
```


### `lsdtools.animation.SkinBinding.to_dict`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:216`.

```python
to_dict(self)
```


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


### `lsdtools.animation.SkinBinding.from_dict`

Kind: method. Source: `services/animation/src/lsd_animation/assets.py:223`.

```python
from_dict(cls, skeleton, value)
```


```python
cls: (unannotated)
skeleton: (unannotated)
value: (unannotated)
```


## `lsdtools.animation.animation_timeline_spec`

Kind: function. Source: `services/animation/src/lsd_animation/timeline.py:105`.

```python
animation_timeline_spec()
```


Source docstring:

```text
Return the package-owned declaration for headless compiler catalog validation.
```


Implementation alias: `lsd_animation.timeline.animation_timeline_spec`.

## `lsdtools.animation.asymmetric_character`

Kind: function. Source: `services/animation/src/lsd_animation/fixtures.py:13`.

```python
asymmetric_character() -> PreparedCharacter
```


Source docstring:

```text
Three joints and a six-vertex strip, bending through 90 degrees at tick 60.

The offset upper edge and mixed pivot weights make wrong hierarchy order, inverse bind,
quaternion convention, and weight application observable. The fixed clip lasts 120 ticks.
```


Implementation alias: `lsd_animation.fixtures.asymmetric_character`.

## `lsdtools.animation.can_edit_animation`

Kind: function. Source: `sdk/src/lsdtools/animation.py:10`.

```python
can_edit_animation(entity) -> bool
```


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


Source docstring:

```text
Whether this entity owns exactly one authored Build Animation document.
```


## `lsdtools.animation.clip_catalog`

Kind: function. Source: `services/animation/src/lsd_animation/assets.py:230`.

```python
clip_catalog()
```


Implementation alias: `lsd_animation.assets.clip_catalog`.

## `lsdtools.animation.create_animation_binding`

Kind: function. Source: `sdk/src/lsdtools/animation.py:16`.

```python
create_animation_binding(scene)
```


```python
scene: (unannotated)
```


Source docstring:

```text
Bind immutable animation resources and borrowed publications to the existing renderer.
```


## `lsdtools.animation.create_animation_editor`

Kind: function. Source: `sdk/src/lsdtools/animation.py:22`.

```python
create_animation_editor(host, *, entity=None, view_id)
```


```python
entity: (unannotated)
host: (unannotated)
view_id: (unannotated)
```


Source docstring:

```text
Compose actor-scoped authoring with the host's existing runtime viewport and transport.
```


## `lsdtools.animation.document_from_table`

Kind: function. Source: `services/animation/src/lsd_animation/persistence.py:298`.

```python
document_from_table(table)
```


```python
table: (unannotated)
```


Implementation alias: `lsd_animation.persistence.document_from_table`.

## `lsdtools.animation.document_table`

Kind: function. Source: `services/animation/src/lsd_animation/persistence.py:283`.

```python
document_table(document)
```


```python
document: (unannotated)
```


Implementation alias: `lsd_animation.persistence.document_table`.

## `lsdtools.animation.extruded_character`

Kind: function. Source: `services/animation/src/lsd_animation/fixtures.py:33`.

```python
extruded_character() -> PreparedCharacter
```


Source docstring:

```text
Closed 12-vertex, 20-triangle version of the analytic strip, with 0.3 m thickness.
```


Implementation alias: `lsd_animation.fixtures.extruded_character`.

## `lsdtools.animation.import_glb`

Kind: function. Source: `services/animation/src/lsd_animation/gltf.py:208`.

```python
import_glb(data: bytes, *, mesh_node: int | None=None, ticks_per_second: int=60, scale: float=1.0, render_profile: str) -> ImportedCharacter
```


```python
data: bytes
mesh_node: int | None
render_profile: str
scale: float
ticks_per_second: int
```


Source docstring:

```text
Import the explicitly selected GLB skin as conventional geometry, offline.

``render_profile='geometry'`` explicitly omits materials, textures and tangents.
LINEAR/STEP clips are sampled at every integer tick (end rounded up, clamped).
Float32 normalization corrections are limited to 1e-5; existing LSD admission
remains strict. No code, filesystem path, external URI or network is evaluated.
```


Implementation alias: `lsd_animation.gltf.import_glb`.
