@lovelace_lol/embody 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -87,6 +87,11 @@ spent. Each native mesh raycast is indivisible; a large mesh can still cause a
87
87
  frame drop, and slicing does not reduce total raycast CPU time. Interactive
88
88
  annotation changes retain synchronous queries so a marker samples one pose.
89
89
  Replacement, clearing and disposal cancel stale loads before scene commits.
90
+ New 3D markers and separated endpoints invalidate the cached camera layout.
91
+ Visible markers receive the current zoom sizing and Rust viewport constraints
92
+ before paint; hidden markers receive that layout before reveal captures label
93
+ scales. Viewport clipping also follows the animated label size during reveal
94
+ overshoot. Markers added during a reveal stay hidden until its layout pass resumes.
90
95
 
91
96
  For first reveal, call `controller.prepareModelForRender(model, { signal })`
92
97
  from the existing `beforeReveal` callback (or directly before attaching the
@@ -289,7 +294,7 @@ step/linear clip conversion, and remaining import work.
289
294
 
290
295
  `humanoid.getSpecification` exposes all 55 VRM 1.0 anatomical roles and their
291
296
  parent/required rules. CC4 maps all 55 to distinct authored bones and supplies
292
- 58 body controls for fingers, wrists, shoulders, feet, whole body motion, the
297
+ authored AU mappings for fingers, wrists, shoulders, feet, whole body motion, the
293
298
  spine, head, eyes and jaw. `profile.setHumanoidRoleBinding` edits or clears a role and
294
299
  retargets its existing actuators. The runtime keeps the same bone/morph evaluator;
295
300
  other rigs must author their own calibrated axes/ranges and optional muscle
@@ -520,42 +525,27 @@ the package; CI checks and publishes that same build.
520
525
 
521
526
  MIT. See [LICENSE](LICENSE) and [AUTHORS.md](AUTHORS.md).
522
527
 
523
- ### Semantic poses and generated motion
524
-
525
- `RuntimeCore.get_semantic_pose_catalog_json()` returns the configured profile's
526
- motion identifiers, direction labels, VRM roles, resolved bone/morph names and
527
- per-direction model support and available sides. VRM names anatomy; profile motion IDs name authored
528
- actions. Hosts should send only supported directions to generation prompts,
529
- along with their bounds: intensity and morph strength `0..1`, bilateral balance
530
- `-1` character-left, `0` both, `1` character-right. Amounts are normalized authored
531
- motion, not radians or world-space rotation.
532
-
533
- `capture_semantic_pose_json()` returns `{version:1,controls:[{controlId,positive,
534
- negative?}]}`. Each direction stores intensity, balance and morphStrength
535
- independently, preserving opposed action values. These are manual runtime
536
- controls; capturing an arbitrary mixer/baked pose would require pose inference.
537
- `validate_semantic_pose_json()` fills omitted settings without mutation.
538
- `apply_semantic_pose_json()` validates the complete input before replacing Body
539
- actions, preserving unrelated facial state. Either direction may be omitted;
540
- a control requires at least one. Known missing outputs remain portable to partial
541
- rigs; unknown IDs, duplicate actions and invalid bounds fail. Applying a semantic pose releases prior direct overrides on its exact mapped
542
- mesh/target IDs, preserving unrelated facial overrides and same-named targets on
543
- unmapped meshes.
544
-
545
- `build_semantic_clip(name, animationJson, optionsJson)` compiles
546
- `{version:1,durationSeconds,tracks:[{controlId,direction,balance?,morphStrength?,
547
- keyframes:[{time,intensity}]}]}` through the same AU/bone/morph evaluator.
548
- Direction is `positive` or `negative`; time is seconds. Unsupported directions,
549
- unknown controls, duplicate actions and non-increasing/out-of-range keys fail.
550
- `options.faceCurves` accepts additional non-Body AU curves so face and body compile
551
- together, including overlapping mapped bones. Compilation preserves live state;
552
- per-track morph strength changes only the compiled output. The host mixer owns
553
- playback and interpolation, as with existing snippets.
554
-
555
- Catalog `availableSides` identifies actual mapped left/right/center outputs.
556
- Generated animations reject a negative balance without a left output or positive
557
- balance without a right output; balance zero may drive the remaining side of a
558
- partial rig. Stored static poses retain their portability across missing outputs.
559
- `evaluate_semantic_body_bone_frame()` returns exact Body-owned properties including
560
- neutral values, allowing an explicit semantic pose/reset to replace old raw bone
561
- edits without touching unrelated properties.
528
+ ### AU controls and authored animation
529
+
530
+ Character controls come from the character's saved `auInfo`/`actionInfo`,
531
+ `auToBones`, `auToMorphs`, `compositeRotations` and `continuumPairs`. There is
532
+ no named body-control catalog or fixed control count. `engine.getAUDescriptors()`
533
+ and initialized `getAUDescriptors(profile, modelDescriptor?)` return per-AU
534
+ metadata and resolved output support, including labels, signed pair IDs,
535
+ bilateral sides, saved morph strength and resolved bone/morph names.
536
+
537
+ Use `setAU`/`transitionAU`, `setContinuum`, `getAUBalance` and
538
+ `setAUMixWeight` for live controls. `buildClip`/`playSnippet` compile numeric
539
+ AU curves through the same saved bone/morph evaluator; `balanceMap` and
540
+ `mixWeights` are per-AU compilation options. Compilation preserves live state.
541
+ Native playback owns interpolation, pause, resume, cancellation and blending.
542
+ Reset an authored control by setting its mapped AU values to zero. Hosts select
543
+ which mapped AU IDs to reset; unrelated face state and saved mix strengths remain
544
+ under their existing owners.
545
+
546
+ Named semantic pose/animation APIs and profile `bodyControls` are retired.
547
+ Persisted named records must be decoded at the storage boundary to numeric AU
548
+ values/curves, using their original profile mappings. `LEGACY_BODY_CONTROL_AUS`
549
+ is a deprecated reader-only historical identity snapshot for old CC4 records;
550
+ it is never consulted for current controls, actuation or profile compilation.
551
+ Unknown legacy names must be reported rather than silently omitted.
@@ -0,0 +1,35 @@
1
+ export interface AUDescriptor {
2
+ auId: number;
3
+ label: string;
4
+ faceArea?: string | null;
5
+ facePart?: string | null;
6
+ negativeAuId?: number | null;
7
+ positiveAuId?: number | null;
8
+ /** At least one left/right output supports balance; inspect availableSides for the actual sides. */
9
+ bilateral: boolean;
10
+ boneBindings: Array<Record<string, unknown> & {
11
+ auId: number;
12
+ boneName: string;
13
+ }>;
14
+ boneNames: string[];
15
+ morphBindings: {
16
+ left: unknown[];
17
+ right: unknown[];
18
+ center: unknown[];
19
+ };
20
+ morphNames: string[];
21
+ morphStrength: number;
22
+ availableSides: Array<'left' | 'right' | 'center'>;
23
+ hasBones: boolean;
24
+ hasMorphs: boolean;
25
+ available: boolean;
26
+ diagnostics: string[];
27
+ }
28
+ /** Inspect saved AU metadata. Optional model is a renderer-neutral model descriptor. */
29
+ export declare function getAUDescriptors(profile: object, model?: object): AUDescriptor[];
30
+ /** @deprecated Reader-only identity snapshot for persisted named poses/animations. Never use for active controls. */
31
+ export declare const LEGACY_BODY_CONTROL_AUS: Readonly<Record<string, Readonly<{
32
+ positiveAuId: number;
33
+ negativeAuId?: number;
34
+ bilateral: boolean;
35
+ }>>>;
@@ -83,10 +83,6 @@ export class NativePlaybackSession {
83
83
  export class RuntimeCore {
84
84
  free(): void;
85
85
  [Symbol.dispose](): void;
86
- /**
87
- * Validate every channel before replacing Body state. Other FACS state remains.
88
- */
89
- apply_semantic_pose_json(json: string): void;
90
86
  static au_morph_binding_stride(): number;
91
87
  /**
92
88
  * Begin one host command; its concrete destinations determine which native
@@ -110,15 +106,7 @@ export class RuntimeCore {
110
106
  * this clip with finalPose=release so native ownership ends at completion.
111
107
  */
112
108
  build_live_release_clip(name: string, previous_clip_json: string, duration_seconds: number): string;
113
- /**
114
- * Compile semantic motions and optional facial curves together without changing live state.
115
- */
116
- build_semantic_clip(name: string, json: string, options_json: string): string;
117
109
  build_typed_clip(clip_name: string, channels_json: string, options_json: string): string;
118
- /**
119
- * Captures manual semantic state; does not infer actions from a mixer pose.
120
- */
121
- capture_semantic_pose_json(): string;
122
110
  cleanup_snippet(clip_name: string): boolean;
123
111
  clear(): void;
124
112
  /**
@@ -190,11 +178,6 @@ export class RuntimeCore {
190
178
  * are owned by the host mixer, so this returns an empty frame.
191
179
  */
192
180
  evaluate_scene_frame(): string;
193
- /**
194
- * Full Body property writes, including neutral reference values. Hosts use
195
- * this once when an explicit pose replaces direct legacy bone edits.
196
- */
197
- evaluate_semantic_body_bone_frame(): Float32Array;
198
181
  get_animation_clips(): string;
199
182
  get_au(id: number): number;
200
183
  /**
@@ -202,14 +185,13 @@ export class RuntimeCore {
202
185
  */
203
186
  get_au_balance(id: number): number;
204
187
  /**
205
- * Current runtime tissue strength, independent of persisted profile defaults.
188
+ * Observed AU metadata and resolved outputs. AU mappings remain the source of truth.
206
189
  */
207
- get_au_mix_weight(id: number): number;
190
+ get_au_descriptors_json(): string;
208
191
  /**
209
- * Resolved Body descriptors for the configured profile/model. Model
210
- * inspection and descriptor resolution are cached until reconfiguration.
192
+ * Current runtime tissue strength, independent of persisted profile defaults.
211
193
  */
212
- get_body_controls_json(): string;
194
+ get_au_mix_weight(id: number): number;
213
195
  get_continuum(neg_au: number, pos_au: number): number;
214
196
  /**
215
197
  * Normalized hair configuration belongs to the selected profile, never an
@@ -217,10 +199,6 @@ export class RuntimeCore {
217
199
  */
218
200
  get_hair_config_json(): string;
219
201
  get_missing_hair_morph_targets_json(available_json: string): string;
220
- /**
221
- * Profile-derived motions and resolved model support for prompt/pose editors.
222
- */
223
- get_semantic_pose_catalog_json(): string;
224
202
  /**
225
203
  * Stored direct viseme value, or zero for an unset or out-of-range slot.
226
204
  * Host mixer output is not part of this live control state.
@@ -278,12 +256,6 @@ export class RuntimeCore {
278
256
  */
279
257
  release_procedural_morph_frame(): Float32Array;
280
258
  remove_animation_clip(clip_name: string): boolean;
281
- /**
282
- * Clear each unique configured Body action and bilateral balance together.
283
- * Shared facial aliases are Body actions too. Preserve other actions,
284
- * visemes, direct morph overrides, and authored/current morph mix weights.
285
- */
286
- reset_body_controls(): void;
287
259
  /**
288
260
  * Forget ownership when renderer bindings are discarded. Before replacing
289
261
  * bindings, apply release_procedural_morph_frame through the old IDs.
@@ -311,14 +283,6 @@ export class RuntimeCore {
311
283
  set_viseme(index: number, value: number): void;
312
284
  set_viseme_jaw_scale(index: number, jaw_scale: number): void;
313
285
  set_viseme_slot_count(count: number): void;
314
- /**
315
- * Compile and validate without registering a clip or changing live controls.
316
- */
317
- validate_semantic_animation_json(json: string, options_json: string): void;
318
- /**
319
- * Validate and fill optional settings without changing runtime or renderer state.
320
- */
321
- validate_semantic_pose_json(json: string): string;
322
286
  static viseme_morph_binding_stride(): number;
323
287
  viseme_slot_index(slot_id: string): number;
324
288
  }
@@ -636,16 +600,22 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
636
600
 
637
601
  export interface InitOutput {
638
602
  readonly memory: WebAssembly.Memory;
639
- readonly __wbg_nativeplaybacksession_free: (a: number, b: number) => void;
603
+ readonly default_hair_color_appearance_json: () => [number, number, number, number];
604
+ readonly hair_color_presets_json: () => [number, number, number, number];
605
+ readonly normalize_hair_color_appearance_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
606
+ readonly embody_request: (a: number, b: number) => [number, number, number, number];
607
+ readonly compute_humanoid_skeleton_template_rest_bounds: (a: number, b: number) => [number, number, number, number];
608
+ readonly core_abi_version: () => number;
609
+ readonly create_validation_skeleton_json: (a: number, b: number) => [number, number, number, number];
610
+ readonly extract_humanoid_skeleton_template_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
611
+ readonly get_humanoid_skeleton_template_json: (a: number, b: number) => [number, number, number, number];
612
+ readonly humanoid_skeleton_template_bone_names: (a: number, b: number) => [number, number, number, number];
613
+ readonly list_humanoid_skeleton_templates_json: () => [number, number, number, number];
640
614
  readonly marker_endpoint_stride: () => number;
641
615
  readonly marker_visibility_animation_factors: (a: number, b: number) => [number, number];
642
- readonly nativeplaybacksession_control: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
643
- readonly nativeplaybacksession_dispose: (a: number) => [number, number, number, number];
644
- readonly nativeplaybacksession_new: () => [number, number, number];
645
- readonly nativeplaybacksession_notify: (a: number, b: number, c: number) => [number, number, number, number];
646
- readonly nativeplaybacksession_play: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
647
- readonly nativeplaybacksession_rebind: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
648
- readonly nativeplaybacksession_replace_clip: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
616
+ readonly pack_morph_frame_delta: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
617
+ readonly packed_bone_frame_delta_stride: () => number;
618
+ readonly packed_morph_frame_delta_stride: () => number;
649
619
  readonly passes_marker_camera_angle_gate: (a: number, b: number, c: number) => number;
650
620
  readonly resolve_viewport_constrained_line_scale: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
651
621
  readonly resolve_viewport_safe_bounds: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
@@ -654,14 +624,9 @@ export interface InitOutput {
654
624
  readonly separate_overlapping_marker_endpoints: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
655
625
  readonly should_show_marker: (a: number, b: number, c: number, d: number) => number;
656
626
  readonly marker_visibility_factors_stride: () => number;
657
- readonly default_hair_color_appearance_json: () => [number, number, number, number];
658
- readonly hair_color_presets_json: () => [number, number, number, number];
659
- readonly normalize_hair_color_appearance_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
660
- readonly solve_axis_quaternion: (a: number, b: number, c: number, d: number) => [number, number];
661
- readonly solve_bilateral_values: (a: number, b: number) => [number, number];
662
- readonly solve_morph_batch: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
663
627
  readonly __wbg_cameraflight_free: (a: number, b: number) => void;
664
628
  readonly __wbg_cameraorbit_free: (a: number, b: number) => void;
629
+ readonly __wbg_runtimecore_free: (a: number, b: number) => void;
665
630
  readonly analyze_mesh_proportions: (a: number, b: number, c: number) => [number, number];
666
631
  readonly annotation_camera_framing_stride: () => number;
667
632
  readonly cameraflight_duration_ms: (a: number) => number;
@@ -671,48 +636,18 @@ export interface InitOutput {
671
636
  readonly cameraorbit_new: (a: number, b: number, c: number, d: number, e: number) => number;
672
637
  readonly cameraorbit_sample: (a: number, b: number) => [number, number];
673
638
  readonly compose_template_fit_adjustment: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
674
- readonly compute_humanoid_skeleton_template_rest_bounds: (a: number, b: number) => [number, number, number, number];
675
- readonly create_validation_skeleton_json: (a: number, b: number) => [number, number, number, number];
676
- readonly extract_humanoid_skeleton_template_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
677
639
  readonly focus_padding_factor: (a: number, b: number, c: number, d: number) => number;
678
- readonly get_humanoid_skeleton_template_json: (a: number, b: number) => [number, number, number, number];
679
- readonly humanoid_skeleton_template_bone_names: (a: number, b: number) => [number, number, number, number];
680
- readonly list_humanoid_skeleton_templates_json: () => [number, number, number, number];
681
640
  readonly mesh_proportions_stride: () => number;
682
641
  readonly normalize_camera_angle_degrees: (a: number) => number;
683
642
  readonly resolve_auto_closeup_angle: (a: number, b: number, c: number, d: number, e: number) => number;
684
643
  readonly resolve_focus_camera_direction: (a: number, b: number, c: number, d: number, e: number) => [number, number];
685
- readonly solve_focus_framing: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => [number, number];
686
- readonly solve_full_body_framing: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => [number, number];
687
- readonly solve_template_skeleton_fit: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
688
- readonly template_skeleton_fit_solution_stride: () => number;
689
- readonly world_direction_for_camera_angle: (a: number, b: number, c: number) => [number, number];
690
- readonly camera_flight_sample_stride: () => number;
691
- readonly __wbg_hairphysicssolver_free: (a: number, b: number) => void;
692
- readonly __wbg_runtimecore_free: (a: number, b: number) => void;
693
- readonly core_abi_version: () => number;
694
- readonly default_hair_physics_config_values: () => [number, number];
695
- readonly hair_config_stride: () => number;
696
- readonly hair_head_state_stride: () => number;
697
- readonly hair_morph_output_stride: () => number;
698
- readonly hair_state_stride: () => number;
699
- readonly hairphysicssolver_get_config: (a: number) => [number, number];
700
- readonly hairphysicssolver_get_state: (a: number) => [number, number];
701
- readonly hairphysicssolver_new: (a: number, b: number) => number;
702
- readonly hairphysicssolver_reset: (a: number) => void;
703
- readonly hairphysicssolver_set_config: (a: number, b: number, c: number) => void;
704
- readonly hairphysicssolver_update: (a: number, b: number, c: number, d: number) => [number, number];
705
- readonly pack_morph_frame_delta: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
706
- readonly packed_bone_frame_delta_stride: () => number;
707
- readonly runtimecore_apply_semantic_pose_json: (a: number, b: number, c: number) => [number, number];
644
+ readonly runtimecore_au_morph_binding_stride: () => number;
708
645
  readonly runtimecore_begin_live_command: (a: number) => void;
709
646
  readonly runtimecore_build_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
710
647
  readonly runtimecore_build_hair_gravity_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
711
648
  readonly runtimecore_build_live_clip: (a: number, b: number, c: number, d: number) => [number, number, number, number];
712
649
  readonly runtimecore_build_live_release_clip: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
713
- readonly runtimecore_build_semantic_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
714
650
  readonly runtimecore_build_typed_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
715
- readonly runtimecore_capture_semantic_pose_json: (a: number) => [number, number];
716
651
  readonly runtimecore_cleanup_snippet: (a: number, b: number, c: number) => number;
717
652
  readonly runtimecore_clear: (a: number) => void;
718
653
  readonly runtimecore_configure: (a: number, b: number, c: number, d: number, e: number) => [number, number];
@@ -726,16 +661,14 @@ export interface InitOutput {
726
661
  readonly runtimecore_evaluate_procedural_bone_frame: (a: number) => [number, number];
727
662
  readonly runtimecore_evaluate_procedural_morph_frame: (a: number) => [number, number];
728
663
  readonly runtimecore_evaluate_scene_frame: (a: number) => [number, number, number, number];
729
- readonly runtimecore_evaluate_semantic_body_bone_frame: (a: number) => [number, number];
730
664
  readonly runtimecore_get_animation_clips: (a: number) => [number, number, number, number];
731
665
  readonly runtimecore_get_au: (a: number, b: number) => number;
732
666
  readonly runtimecore_get_au_balance: (a: number, b: number) => number;
667
+ readonly runtimecore_get_au_descriptors_json: (a: number) => [number, number];
733
668
  readonly runtimecore_get_au_mix_weight: (a: number, b: number) => number;
734
- readonly runtimecore_get_body_controls_json: (a: number) => [number, number];
735
669
  readonly runtimecore_get_continuum: (a: number, b: number, c: number) => number;
736
670
  readonly runtimecore_get_hair_config_json: (a: number) => [number, number, number, number];
737
671
  readonly runtimecore_get_missing_hair_morph_targets_json: (a: number, b: number, c: number) => [number, number, number, number];
738
- readonly runtimecore_get_semantic_pose_catalog_json: (a: number) => [number, number];
739
672
  readonly runtimecore_get_viseme: (a: number, b: number) => number;
740
673
  readonly runtimecore_get_viseme_jaw_scale: (a: number, b: number) => number;
741
674
  readonly runtimecore_has_left_right_bones: (a: number, b: number) => number;
@@ -753,7 +686,6 @@ export interface InitOutput {
753
686
  readonly runtimecore_release_morph: (a: number, b: number, c: number, d: number, e: number) => number;
754
687
  readonly runtimecore_release_morph_index: (a: number, b: number, c: number, d: number) => number;
755
688
  readonly runtimecore_release_procedural_morph_frame: (a: number) => [number, number];
756
- readonly runtimecore_reset_body_controls: (a: number) => void;
757
689
  readonly runtimecore_reset_procedural_frame_tracking: (a: number) => void;
758
690
  readonly runtimecore_resolve_hair_motion_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
759
691
  readonly runtimecore_set_au: (a: number, b: number, c: number, d: number) => void;
@@ -767,21 +699,23 @@ export interface InitOutput {
767
699
  readonly runtimecore_set_viseme: (a: number, b: number, c: number) => void;
768
700
  readonly runtimecore_set_viseme_jaw_scale: (a: number, b: number, c: number) => void;
769
701
  readonly runtimecore_set_viseme_slot_count: (a: number, b: number) => void;
770
- readonly runtimecore_validate_semantic_animation_json: (a: number, b: number, c: number, d: number, e: number) => [number, number];
771
- readonly runtimecore_validate_semantic_pose_json: (a: number, b: number, c: number) => [number, number, number, number];
772
- readonly runtimecore_viseme_slot_index: (a: number, b: number, c: number) => number;
773
- readonly packed_morph_frame_delta_stride: () => number;
774
- readonly runtimecore_au_morph_binding_stride: () => number;
775
702
  readonly runtimecore_viseme_morph_binding_stride: () => number;
703
+ readonly runtimecore_viseme_slot_index: (a: number, b: number, c: number) => number;
704
+ readonly solve_focus_framing: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => [number, number];
705
+ readonly solve_full_body_framing: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => [number, number];
706
+ readonly solve_template_skeleton_fit: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
707
+ readonly template_skeleton_fit_solution_stride: () => number;
708
+ readonly world_direction_for_camera_angle: (a: number, b: number, c: number) => [number, number];
709
+ readonly camera_flight_sample_stride: () => number;
776
710
  readonly runtimecore_remove_animation_clip: (a: number, b: number, c: number) => number;
777
711
  readonly analyze_model_descriptor: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
778
- readonly extract_model_data_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
779
712
  readonly build_hair_gravity_curves: (a: number, b: number) => [number, number, number, number];
780
713
  readonly build_hair_idle_curves: (a: number, b: number, c: number) => [number, number, number, number];
781
714
  readonly build_hair_impulse_curves: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
782
715
  readonly compile_clip: (a: number, b: number) => [number, number, number, number];
783
716
  readonly compile_clip_curves: (a: number, b: number) => [number, number, number, number];
784
717
  readonly compose_template_skeleton_fit_transform: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
718
+ readonly extract_model_data_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
785
719
  readonly get_preset_json: (a: number, b: number) => [number, number, number, number];
786
720
  readonly has_preset: (a: number, b: number) => number;
787
721
  readonly list_presets: () => [number, number];
@@ -789,11 +723,33 @@ export interface InitOutput {
789
723
  readonly merge_preset_profile: (a: number, b: number, c: number, d: number) => [number, number, number, number];
790
724
  readonly resolve_embedded_profile_view: (a: number, b: number, c: number, d: number) => [number, number, number, number];
791
725
  readonly resolve_profile_view: (a: number, b: number) => [number, number, number, number];
726
+ readonly solve_axis_quaternion: (a: number, b: number, c: number, d: number) => [number, number];
727
+ readonly solve_bilateral_values: (a: number, b: number) => [number, number];
728
+ readonly solve_morph_batch: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
792
729
  readonly template_skeleton_fit_transform_stride: () => number;
793
730
  readonly validate_generated_template_fit_metadata: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
794
731
  readonly validate_humanoid_characterization: (a: number, b: number, c: number, d: number) => [number, number, number, number];
795
732
  readonly validate_profile_model: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
796
- readonly embody_request: (a: number, b: number) => [number, number, number, number];
733
+ readonly __wbg_hairphysicssolver_free: (a: number, b: number) => void;
734
+ readonly __wbg_nativeplaybacksession_free: (a: number, b: number) => void;
735
+ readonly default_hair_physics_config_values: () => [number, number];
736
+ readonly hair_config_stride: () => number;
737
+ readonly hair_head_state_stride: () => number;
738
+ readonly hair_morph_output_stride: () => number;
739
+ readonly hair_state_stride: () => number;
740
+ readonly hairphysicssolver_get_config: (a: number) => [number, number];
741
+ readonly hairphysicssolver_get_state: (a: number) => [number, number];
742
+ readonly hairphysicssolver_new: (a: number, b: number) => number;
743
+ readonly hairphysicssolver_reset: (a: number) => void;
744
+ readonly hairphysicssolver_set_config: (a: number, b: number, c: number) => void;
745
+ readonly hairphysicssolver_update: (a: number, b: number, c: number, d: number) => [number, number];
746
+ readonly nativeplaybacksession_control: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
747
+ readonly nativeplaybacksession_dispose: (a: number) => [number, number, number, number];
748
+ readonly nativeplaybacksession_new: () => [number, number, number];
749
+ readonly nativeplaybacksession_notify: (a: number, b: number, c: number) => [number, number, number, number];
750
+ readonly nativeplaybacksession_play: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
751
+ readonly nativeplaybacksession_rebind: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
752
+ readonly nativeplaybacksession_replace_clip: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
797
753
  readonly __wbindgen_externrefs: WebAssembly.Table;
798
754
  readonly __wbindgen_malloc: (a: number, b: number) => number;
799
755
  readonly __wbindgen_free: (a: number, b: number, c: number) => void;
@@ -383,18 +383,6 @@ export class RuntimeCore {
383
383
  const ptr = this.__destroy_into_raw();
384
384
  wasm.__wbg_runtimecore_free(ptr, 0);
385
385
  }
386
- /**
387
- * Validate every channel before replacing Body state. Other FACS state remains.
388
- * @param {string} json
389
- */
390
- apply_semantic_pose_json(json) {
391
- const ptr0 = passStringToWasm0(json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
392
- const len0 = WASM_VECTOR_LEN;
393
- const ret = wasm.runtimecore_apply_semantic_pose_json(this.__wbg_ptr, ptr0, len0);
394
- if (ret[1]) {
395
- throw takeFromExternrefTable0(ret[0]);
396
- }
397
- }
398
386
  /**
399
387
  * @returns {number}
400
388
  */
@@ -528,37 +516,6 @@ export class RuntimeCore {
528
516
  wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);
529
517
  }
530
518
  }
531
- /**
532
- * Compile semantic motions and optional facial curves together without changing live state.
533
- * @param {string} name
534
- * @param {string} json
535
- * @param {string} options_json
536
- * @returns {string}
537
- */
538
- build_semantic_clip(name, json, options_json) {
539
- let deferred5_0;
540
- let deferred5_1;
541
- try {
542
- const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
543
- const len0 = WASM_VECTOR_LEN;
544
- const ptr1 = passStringToWasm0(json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
545
- const len1 = WASM_VECTOR_LEN;
546
- const ptr2 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
547
- const len2 = WASM_VECTOR_LEN;
548
- const ret = wasm.runtimecore_build_semantic_clip(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);
549
- var ptr4 = ret[0];
550
- var len4 = ret[1];
551
- if (ret[3]) {
552
- ptr4 = 0; len4 = 0;
553
- throw takeFromExternrefTable0(ret[2]);
554
- }
555
- deferred5_0 = ptr4;
556
- deferred5_1 = len4;
557
- return getStringFromWasm0(ptr4, len4);
558
- } finally {
559
- wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);
560
- }
561
- }
562
519
  /**
563
520
  * @param {string} clip_name
564
521
  * @param {string} channels_json
@@ -589,22 +546,6 @@ export class RuntimeCore {
589
546
  wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);
590
547
  }
591
548
  }
592
- /**
593
- * Captures manual semantic state; does not infer actions from a mixer pose.
594
- * @returns {string}
595
- */
596
- capture_semantic_pose_json() {
597
- let deferred1_0;
598
- let deferred1_1;
599
- try {
600
- const ret = wasm.runtimecore_capture_semantic_pose_json(this.__wbg_ptr);
601
- deferred1_0 = ret[0];
602
- deferred1_1 = ret[1];
603
- return getStringFromWasm0(ret[0], ret[1]);
604
- } finally {
605
- wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
606
- }
607
- }
608
549
  /**
609
550
  * @param {string} clip_name
610
551
  * @returns {boolean}
@@ -781,17 +722,6 @@ export class RuntimeCore {
781
722
  wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
782
723
  }
783
724
  }
784
- /**
785
- * Full Body property writes, including neutral reference values. Hosts use
786
- * this once when an explicit pose replaces direct legacy bone edits.
787
- * @returns {Float32Array}
788
- */
789
- evaluate_semantic_body_bone_frame() {
790
- const ret = wasm.runtimecore_evaluate_semantic_body_bone_frame(this.__wbg_ptr);
791
- var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();
792
- wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
793
- return v1;
794
- }
795
725
  /**
796
726
  * @returns {string}
797
727
  */
@@ -831,24 +761,14 @@ export class RuntimeCore {
831
761
  return ret;
832
762
  }
833
763
  /**
834
- * Current runtime tissue strength, independent of persisted profile defaults.
835
- * @param {number} id
836
- * @returns {number}
837
- */
838
- get_au_mix_weight(id) {
839
- const ret = wasm.runtimecore_get_au_mix_weight(this.__wbg_ptr, id);
840
- return ret;
841
- }
842
- /**
843
- * Resolved Body descriptors for the configured profile/model. Model
844
- * inspection and descriptor resolution are cached until reconfiguration.
764
+ * Observed AU metadata and resolved outputs. AU mappings remain the source of truth.
845
765
  * @returns {string}
846
766
  */
847
- get_body_controls_json() {
767
+ get_au_descriptors_json() {
848
768
  let deferred1_0;
849
769
  let deferred1_1;
850
770
  try {
851
- const ret = wasm.runtimecore_get_body_controls_json(this.__wbg_ptr);
771
+ const ret = wasm.runtimecore_get_au_descriptors_json(this.__wbg_ptr);
852
772
  deferred1_0 = ret[0];
853
773
  deferred1_1 = ret[1];
854
774
  return getStringFromWasm0(ret[0], ret[1]);
@@ -856,6 +776,15 @@ export class RuntimeCore {
856
776
  wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
857
777
  }
858
778
  }
779
+ /**
780
+ * Current runtime tissue strength, independent of persisted profile defaults.
781
+ * @param {number} id
782
+ * @returns {number}
783
+ */
784
+ get_au_mix_weight(id) {
785
+ const ret = wasm.runtimecore_get_au_mix_weight(this.__wbg_ptr, id);
786
+ return ret;
787
+ }
859
788
  /**
860
789
  * @param {number} neg_au
861
790
  * @param {number} pos_au
@@ -912,22 +841,6 @@ export class RuntimeCore {
912
841
  wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
913
842
  }
914
843
  }
915
- /**
916
- * Profile-derived motions and resolved model support for prompt/pose editors.
917
- * @returns {string}
918
- */
919
- get_semantic_pose_catalog_json() {
920
- let deferred1_0;
921
- let deferred1_1;
922
- try {
923
- const ret = wasm.runtimecore_get_semantic_pose_catalog_json(this.__wbg_ptr);
924
- deferred1_0 = ret[0];
925
- deferred1_1 = ret[1];
926
- return getStringFromWasm0(ret[0], ret[1]);
927
- } finally {
928
- wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
929
- }
930
- }
931
844
  /**
932
845
  * Stored direct viseme value, or zero for an unset or out-of-range slot.
933
846
  * Host mixer output is not part of this live control state.
@@ -1119,14 +1032,6 @@ export class RuntimeCore {
1119
1032
  const ret = wasm.runtimecore_remove_animation_clip(this.__wbg_ptr, ptr0, len0);
1120
1033
  return ret !== 0;
1121
1034
  }
1122
- /**
1123
- * Clear each unique configured Body action and bilateral balance together.
1124
- * Shared facial aliases are Body actions too. Preserve other actions,
1125
- * visemes, direct morph overrides, and authored/current morph mix weights.
1126
- */
1127
- reset_body_controls() {
1128
- wasm.runtimecore_reset_body_controls(this.__wbg_ptr);
1129
- }
1130
1035
  /**
1131
1036
  * Forget ownership when renderer bindings are discarded. Before replacing
1132
1037
  * bindings, apply release_procedural_morph_frame through the old IDs.
@@ -1275,46 +1180,6 @@ export class RuntimeCore {
1275
1180
  set_viseme_slot_count(count) {
1276
1181
  wasm.runtimecore_set_viseme_slot_count(this.__wbg_ptr, count);
1277
1182
  }
1278
- /**
1279
- * Compile and validate without registering a clip or changing live controls.
1280
- * @param {string} json
1281
- * @param {string} options_json
1282
- */
1283
- validate_semantic_animation_json(json, options_json) {
1284
- const ptr0 = passStringToWasm0(json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1285
- const len0 = WASM_VECTOR_LEN;
1286
- const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1287
- const len1 = WASM_VECTOR_LEN;
1288
- const ret = wasm.runtimecore_validate_semantic_animation_json(this.__wbg_ptr, ptr0, len0, ptr1, len1);
1289
- if (ret[1]) {
1290
- throw takeFromExternrefTable0(ret[0]);
1291
- }
1292
- }
1293
- /**
1294
- * Validate and fill optional settings without changing runtime or renderer state.
1295
- * @param {string} json
1296
- * @returns {string}
1297
- */
1298
- validate_semantic_pose_json(json) {
1299
- let deferred3_0;
1300
- let deferred3_1;
1301
- try {
1302
- const ptr0 = passStringToWasm0(json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1303
- const len0 = WASM_VECTOR_LEN;
1304
- const ret = wasm.runtimecore_validate_semantic_pose_json(this.__wbg_ptr, ptr0, len0);
1305
- var ptr2 = ret[0];
1306
- var len2 = ret[1];
1307
- if (ret[3]) {
1308
- ptr2 = 0; len2 = 0;
1309
- throw takeFromExternrefTable0(ret[2]);
1310
- }
1311
- deferred3_0 = ptr2;
1312
- deferred3_1 = len2;
1313
- return getStringFromWasm0(ptr2, len2);
1314
- } finally {
1315
- wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
1316
- }
1317
- }
1318
1183
  /**
1319
1184
  * @returns {number}
1320
1185
  */
Binary file