@lovelace_lol/embody 0.0.6 → 0.0.8

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.
Files changed (127) hide show
  1. package/README.md +541 -2394
  2. package/dist/index.d.ts +2 -100
  3. package/dist/index.js +7714 -12951
  4. package/dist/index.js.map +1 -1
  5. package/dist/three/annotations/DOMControls.d.ts +73 -0
  6. package/dist/three/annotations/DPthree.d.ts +113 -0
  7. package/dist/three/annotations/DPthree3DMarkers.d.ts +319 -0
  8. package/dist/three/annotations/DPthreeCameraController.d.ts +414 -0
  9. package/dist/three/annotations/DPthreeHTMLMarkers.d.ts +131 -0
  10. package/dist/three/annotations/DPthreeMarkers.d.ts +52 -0
  11. package/dist/three/annotations/adapter.d.ts +157 -0
  12. package/dist/three/annotations/animationFrameTaskScheduler.d.ts +18 -0
  13. package/dist/three/annotations/annotationAnchorModel.d.ts +16 -0
  14. package/dist/three/annotations/annotationCameraCore.d.ts +5 -0
  15. package/dist/three/annotations/boneResolutionProfile.d.ts +7 -0
  16. package/dist/three/annotations/index.d.ts +20 -0
  17. package/dist/three/annotations/loadFrame.d.ts +2 -0
  18. package/dist/three/annotations/markerSurfaceRaycast.d.ts +11 -0
  19. package/dist/three/annotations/markerVisibilityLifecycle.d.ts +21 -0
  20. package/dist/three/annotations/modelRenderPreparation.d.ts +6 -0
  21. package/dist/three/annotations/runtimeAnnotationPreview.d.ts +15 -0
  22. package/dist/three/annotations/runtimeAnnotationPreviewSide.d.ts +10 -0
  23. package/dist/three/annotations/runtimeAnnotationSidePreview.d.ts +5 -0
  24. package/dist/three/annotations/types.d.ts +262 -0
  25. package/dist/three/gaze.d.ts +122 -0
  26. package/dist/three/index.d.ts +147 -0
  27. package/dist/three/model.d.ts +31 -0
  28. package/dist/three/modelSkinning.d.ts +3 -0
  29. package/dist/three/reference-pose.d.ts +73 -0
  30. package/dist/three/scene.d.ts +253 -0
  31. package/dist/three/sceneRenderingBinding.d.ts +22 -0
  32. package/dist/three.js +7696 -8936
  33. package/dist/three.js.map +1 -1
  34. package/dist/wasm/README.md +551 -62
  35. package/dist/wasm/auto.d.ts +1 -0
  36. package/dist/wasm/embody_wasm.d.ts +388 -52
  37. package/dist/wasm/embody_wasm.js +1514 -119
  38. package/dist/wasm/embody_wasm_bg.wasm +0 -0
  39. package/dist/wasm/embody_wasm_bg.wasm.d.ts +115 -40
  40. package/dist/wasm/index.d.ts +126 -0
  41. package/dist/wasm.d.ts +1 -43
  42. package/dist/wasm.js +1043 -239
  43. package/dist/wasm.js.map +1 -1
  44. package/package.json +34 -39
  45. package/service-worker/character-asset-service-worker.js +295 -0
  46. package/dist/authoring/boneAuthoring.d.ts +0 -132
  47. package/dist/camera/annotationCameraAngles.d.ts +0 -28
  48. package/dist/camera/cameraRelativeGaze.d.ts +0 -15
  49. package/dist/camera/rustAnnotationCameraCore.d.ts +0 -136
  50. package/dist/cljs.cjs +0 -362
  51. package/dist/cljs.cjs.map +0 -1
  52. package/dist/cljs.d.ts +0 -5
  53. package/dist/cljs.js +0 -359
  54. package/dist/cljs.js.map +0 -1
  55. package/dist/core/TsClipCompiler.d.ts +0 -51
  56. package/dist/core/WasmRuntimeCore.d.ts +0 -41
  57. package/dist/core/compositeAxis.d.ts +0 -4
  58. package/dist/core/contracts/abi.d.ts +0 -70
  59. package/dist/core/contracts/clip.d.ts +0 -44
  60. package/dist/core/contracts/frame.d.ts +0 -27
  61. package/dist/core/contracts/host.d.ts +0 -28
  62. package/dist/core/contracts/ids.d.ts +0 -15
  63. package/dist/core/contracts/index.d.ts +0 -10
  64. package/dist/core/contracts/model.d.ts +0 -31
  65. package/dist/core/contracts/primitives.d.ts +0 -17
  66. package/dist/core/contracts/skeletonFit.d.ts +0 -41
  67. package/dist/core/index.d.ts +0 -6
  68. package/dist/core/types.d.ts +0 -472
  69. package/dist/core.cjs +0 -343
  70. package/dist/core.cjs.map +0 -1
  71. package/dist/core.js +0 -323
  72. package/dist/core.js.map +0 -1
  73. package/dist/engines/three/Embody.d.ts +0 -372
  74. package/dist/engines/three/ThreeAnimationRuntime.d.ts +0 -203
  75. package/dist/engines/three/ThreeClipAdapter.d.ts +0 -24
  76. package/dist/engines/three/ThreeFrameApplier.d.ts +0 -68
  77. package/dist/engines/three/ThreeModelInspector.d.ts +0 -54
  78. package/dist/engines/three/bakedClipPartitioning.d.ts +0 -16
  79. package/dist/engines/three/balanceUtils.d.ts +0 -3
  80. package/dist/engines/three/characterHost.d.ts +0 -80
  81. package/dist/engines/three/characterScene.d.ts +0 -98
  82. package/dist/engines/three/hair/HairPhysicsController.d.ts +0 -124
  83. package/dist/engines/three/index.d.ts +0 -20
  84. package/dist/engines/three/modelLoader.d.ts +0 -61
  85. package/dist/engines/three/profileTestScene.d.ts +0 -52
  86. package/dist/engines/three/types.d.ts +0 -20
  87. package/dist/hair/appearance.d.ts +0 -29
  88. package/dist/index.cjs +0 -14871
  89. package/dist/index.cjs.map +0 -1
  90. package/dist/interfaces/Animation.d.ts +0 -315
  91. package/dist/interfaces/EmbodyRuntime.d.ts +0 -90
  92. package/dist/interfaces/Hair.d.ts +0 -181
  93. package/dist/interfaces/HairPhysics.d.ts +0 -90
  94. package/dist/interfaces/index.d.ts +0 -11
  95. package/dist/mappings/extendPresetWithProfile.d.ts +0 -17
  96. package/dist/mappings/types.d.ts +0 -309
  97. package/dist/mappings/visemeSystem.d.ts +0 -26
  98. package/dist/physics/HairPhysics.d.ts +0 -86
  99. package/dist/physics/RustHairPhysics.d.ts +0 -18
  100. package/dist/physics/index.d.ts +0 -6
  101. package/dist/preset.cjs +0 -2005
  102. package/dist/preset.cjs.map +0 -1
  103. package/dist/preset.js +0 -2003
  104. package/dist/preset.js.map +0 -1
  105. package/dist/presets/bettaFish.d.ts +0 -328
  106. package/dist/presets/cc4.d.ts +0 -145
  107. package/dist/presets/index.d.ts +0 -30
  108. package/dist/presets/registry.d.ts +0 -57
  109. package/dist/profiles/resolveProfileConfig.d.ts +0 -36
  110. package/dist/profiles/rustResolvedProfile.d.ts +0 -31
  111. package/dist/profiles/types.d.ts +0 -118
  112. package/dist/regions/normalizeRegionTree.d.ts +0 -6
  113. package/dist/regions/regionMapping.d.ts +0 -17
  114. package/dist/regions/types.d.ts +0 -122
  115. package/dist/skeletonTemplates/humanoidSkeletonTemplates.d.ts +0 -32
  116. package/dist/test/setupWasm.d.ts +0 -1
  117. package/dist/three.cjs +0 -9550
  118. package/dist/three.cjs.map +0 -1
  119. package/dist/validation/analyzeModel.d.ts +0 -68
  120. package/dist/validation/extractModelData.d.ts +0 -90
  121. package/dist/validation/generateMappingCorrections.d.ts +0 -32
  122. package/dist/validation/geometryHelpers.d.ts +0 -66
  123. package/dist/validation/types.d.ts +0 -10
  124. package/dist/validation/validateMappings.d.ts +0 -77
  125. package/dist/wasm.cjs +0 -302
  126. package/dist/wasm.cjs.map +0 -1
  127. package/dist/wasmTypes.d.ts +0 -123
@@ -49,7 +49,22 @@ export class RuntimeCore {
49
49
  free(): void;
50
50
  [Symbol.dispose](): void;
51
51
  active_transition_count(): number;
52
+ /**
53
+ * Validate every channel before replacing Body state. Other FACS state remains.
54
+ */
55
+ apply_semantic_pose_json(json: string): void;
52
56
  static au_morph_binding_stride(): number;
57
+ build_clip(clip_name: string, curves_json: string, options_json: string): string;
58
+ /**
59
+ * Compile semantic motions and optional facial curves together without changing live state.
60
+ */
61
+ build_semantic_clip(name: string, json: string, options_json: string): string;
62
+ build_typed_clip(clip_name: string, channels_json: string, options_json: string): string;
63
+ /**
64
+ * Captures manual semantic state; does not infer actions from a mixer pose.
65
+ */
66
+ capture_semantic_pose_json(): string;
67
+ cleanup_snippet(clip_name: string): boolean;
53
68
  clear(): void;
54
69
  clear_transitions(): void;
55
70
  /**
@@ -68,11 +83,31 @@ export class RuntimeCore {
68
83
  /**
69
84
  * Configure from a resolved profile without applying an embedded preset.
70
85
  *
71
- * This path is intentionally strict so a host cannot accidentally select
72
- * a profile that has no usable runtime bindings. Preset fallback remains
73
- * an explicit host decision.
86
+ * Empty profiles and mappings that do not match the current model are
87
+ * non-fatal. Static imports can render before authoring any bindings,
88
+ * without silently substituting an embedded preset.
74
89
  */
75
90
  configure_with_profile(profile_json: string, model_json: string): void;
91
+ /**
92
+ * Host-owned crossfade marker. Rust does not lerp; the host mixer should fade.
93
+ */
94
+ crossfade_to(clip_name: string, _duration: number, options_json: string): string;
95
+ drain_animation_events(): string;
96
+ /**
97
+ * Same rows as `evaluate_bone_frame_delta`, but only bones an active AU,
98
+ * translation, or viseme jaw value is currently rotating or moving.
99
+ * Neutral bones are omitted (no rest reset), so hosts can re-apply this
100
+ * after mixer playback without freezing clip-driven bones (Loom3 parity).
101
+ */
102
+ evaluate_active_bone_frame(): Float32Array;
103
+ /**
104
+ * Same rows as `evaluate_morph_frame_delta`, but only channels with a
105
+ * non-zero live value or an explicit direct override (including zero).
106
+ * Hosts re-apply this after mixer playback so live
107
+ * AU/viseme state wins over clip tracks (Loom3 parity) without resetting
108
+ * channels the mixer owns.
109
+ */
110
+ evaluate_active_morph_frame(): Float32Array;
76
111
  /**
77
112
  * Packed bone FrameDelta rows: `[bone_id, px, py, pz, qx, qy, qz, qw, flags] * N`
78
113
  * flags: bit0 = has_position, bit1 = has_rotation. Composite rotations are
@@ -82,10 +117,62 @@ export class RuntimeCore {
82
117
  evaluate_bone_frame_delta(): Float32Array;
83
118
  /**
84
119
  * Packed morph FrameDelta rows: `[mesh_id, morph_target_id, value, mode] * N`
120
+ * Live AU/viseme/direct morph state only — clip playback is host-owned.
85
121
  */
86
122
  evaluate_morph_frame_delta(): Float32Array;
123
+ /**
124
+ * Emit only currently/previously owned bone properties. Position and
125
+ * rotation ownership are separate; inactive properties release once.
126
+ */
127
+ evaluate_procedural_bone_frame(): Float32Array;
128
+ /**
129
+ * Emit active morphs plus one neutral release for previously owned
130
+ * targets. Direct overrides, including explicit zero, retain ownership.
131
+ * Untouched targets are omitted so constant mixer tracks keep their pose.
132
+ */
133
+ evaluate_procedural_morph_frame(): Float32Array;
134
+ /**
135
+ * Scene extras for live state. Clip-driven scale/visibility/object writes
136
+ * are owned by the host mixer, so this returns an empty frame.
137
+ */
138
+ evaluate_scene_frame(): string;
139
+ /**
140
+ * Full Body property writes, including neutral reference values. Hosts use
141
+ * this once when an explicit pose replaces direct legacy bone edits.
142
+ */
143
+ evaluate_semantic_body_bone_frame(): Float32Array;
144
+ get_animation_clips(): string;
145
+ get_animation_state(clip_name: string): string;
87
146
  get_au(id: number): number;
147
+ /**
148
+ * Stored live AU balance in [-1, 1], or neutral zero when unset or cleared.
149
+ */
150
+ get_au_balance(id: number): number;
151
+ /**
152
+ * Current runtime tissue strength, independent of persisted profile defaults.
153
+ */
154
+ get_au_mix_weight(id: number): number;
155
+ /**
156
+ * Resolved Body descriptors for the configured profile/model. Model
157
+ * inspection and descriptor resolution are cached until reconfiguration.
158
+ */
159
+ get_body_controls_json(): string;
88
160
  get_continuum(neg_au: number, pos_au: number): number;
161
+ get_playing_animations(): string;
162
+ /**
163
+ * Profile-derived motions and resolved model support for prompt/pose editors.
164
+ */
165
+ get_semantic_pose_catalog_json(): string;
166
+ /**
167
+ * Stored direct viseme value, or zero for an unset or out-of-range slot.
168
+ * Host mixer output is not part of this live control state.
169
+ */
170
+ get_viseme(index: number): number;
171
+ /**
172
+ * Stored direct viseme jaw scale, or one for an unset or out-of-range slot.
173
+ */
174
+ get_viseme_jaw_scale(index: number): number;
175
+ load_animation_clips(clips_json: string): void;
89
176
  /**
90
177
  * Packed rows: `[au_id, side, mesh_id, morph_target_id, weight] * N`
91
178
  * side: 0=left, 1=right, 2=center
@@ -117,29 +204,102 @@ export class RuntimeCore {
117
204
  */
118
205
  load_viseme_morph_bindings(values: Float32Array): void;
119
206
  constructor(viseme_slot_count: number);
207
+ pause_all_animations(): void;
208
+ pause_animation(clip_name: string): void;
209
+ /**
210
+ * Registry lookup only. Host animation libraries own play/lerp; this returns
211
+ * a host-owned action id marker when the clip exists in the registry.
212
+ */
213
+ play_animation(clip_name: string, _options_json: string): string;
214
+ play_snippet(clip_name: string, curves_json: string, options_json: string): string;
215
+ play_typed_snippet(clip_name: string, channels_json: string, options_json: string): string;
216
+ register_animation_clip(clip_json: string, source: string): void;
217
+ /**
218
+ * Release a direct morph override so AU/viseme/mixer ownership can resume.
219
+ * A deliberate `set_morph(..., 0, ...)` still owns and masks the target;
220
+ * preview cleanup must release instead of installing a permanent zero.
221
+ * Target selection matches `set_morph`; returns overrides actually removed.
222
+ */
223
+ release_morph(morph_name: string, mesh_names_json: string): number;
224
+ /**
225
+ * Index counterpart to `release_morph`, with `set_morph_index` selection.
226
+ */
227
+ release_morph_index(morph_index: number, mesh_names_json: string): number;
228
+ /**
229
+ * Release owned morphs through the old renderer binding IDs before rebind.
230
+ */
231
+ release_procedural_morph_frame(): Float32Array;
232
+ remove_animation_clip(clip_name: string): boolean;
233
+ /**
234
+ * Clear each unique configured Body action and bilateral balance together.
235
+ * Shared facial aliases are Body actions too. Preserve other actions,
236
+ * visemes, direct morph overrides, and authored/current morph mix weights.
237
+ */
238
+ reset_body_controls(): void;
239
+ /**
240
+ * Forget ownership when renderer bindings are discarded. Before replacing
241
+ * bindings, apply release_procedural_morph_frame through the old IDs.
242
+ * Normal clear/reset deliberately retain tracking for the next frame.
243
+ */
244
+ reset_procedural_frame_tracking(): void;
245
+ resume_all_animations(): void;
246
+ resume_animation(clip_name: string): void;
247
+ seek_animation(clip_name: string, time: number): void;
248
+ set_animation_blend_mode(clip_name: string, blend_mode: string): void;
249
+ set_animation_easing(clip_name: string, easing: string): void;
250
+ set_animation_intensity(clip_name: string, intensity: number): void;
251
+ set_animation_loop_mode(clip_name: string, loop_mode: string): void;
252
+ set_animation_repeat_count(clip_name: string, repeat_count: number): void;
253
+ set_animation_reverse(clip_name: string, reverse: boolean): void;
254
+ set_animation_speed(clip_name: string, speed: number): void;
255
+ set_animation_time_scale(time_scale: number): void;
120
256
  set_au(id: number, value: number, balance: number): void;
121
257
  set_au_mix_weight(id: number, weight: number): void;
122
258
  /**
123
- * Continuum-aware AU set. Negative values route through the configured
124
- * continuum pair (e.g. eyes left/right) exactly like the legacy runtime.
259
+ * Manual directional command: a nonzero value owns its configured pair.
260
+ * Negative values select the opposite direction. Zero clears only the
261
+ * named AU, so releasing an inactive slider does not stop its partner.
125
262
  */
126
263
  set_au_signed(id: number, value: number, balance: number): void;
127
264
  set_continuum(neg_au: number, pos_au: number, value: number, balance: number): void;
128
265
  set_mixed_aus(ids: Uint32Array): void;
266
+ set_morph(morph_name: string, value: number, mesh_names_json: string): number;
267
+ set_morph_index(morph_index: number, value: number, mesh_names_json: string): number;
129
268
  set_viseme(index: number, value: number): void;
130
269
  set_viseme_jaw_scale(index: number, jaw_scale: number): void;
131
270
  set_viseme_slot_count(count: number): void;
271
+ stop_all_animations(): void;
272
+ stop_animation(clip_name: string): void;
273
+ /**
274
+ * Set an AU immediately. Duration is ignored — host mixers own timed fades.
275
+ */
276
+ transition_au(id: number, to: number, _duration_ms: number, balance: number): void;
277
+ /**
278
+ * Set morph(s) immediately. Duration is ignored — host mixers own timed fades.
279
+ */
280
+ transition_morph(morph_name: string, to: number, _duration_ms: number, mesh_names_json: string): number;
281
+ /**
282
+ * Set morph index target(s) immediately. Duration is ignored.
283
+ */
284
+ transition_morph_index(morph_index: number, to: number, _duration_ms: number, mesh_names_json: string): number;
285
+ /**
286
+ * Set a viseme immediately. Duration is ignored — host mixers own timed fades.
287
+ */
288
+ transition_viseme(index: number, to: number, _duration_ms: number, jaw_scale: number): void;
289
+ /**
290
+ * Tick hook for hosts. Clip playback/lerp lives in the host animation
291
+ * library; Rust only exposes live AU/viseme state for packed frames.
292
+ */
293
+ update(_dt_seconds: number): number;
294
+ update_clip_params(clip_name: string, params_json: string): boolean;
132
295
  /**
133
- * Start (or replace) an eased AU transition. Advanced by `update`.
296
+ * Compile and validate without registering a clip or changing live controls.
134
297
  */
135
- transition_au(id: number, to: number, duration_ms: number, balance: number): void;
136
- transition_viseme(index: number, to: number, duration_ms: number, jaw_scale: number): void;
298
+ validate_semantic_animation_json(json: string, options_json: string): void;
137
299
  /**
138
- * Advance all running transitions by `dt` seconds and write the eased
139
- * values into the core state. Returns the number of still-active
140
- * transitions so hosts know whether a frame delta re-evaluation is due.
300
+ * Validate and fill optional settings without changing runtime or renderer state.
141
301
  */
142
- update(dt_seconds: number): number;
302
+ validate_semantic_pose_json(json: string): string;
143
303
  static viseme_morph_binding_stride(): number;
144
304
  viseme_slot_index(slot_id: string): number;
145
305
  }
@@ -159,6 +319,8 @@ export class RuntimeCore {
159
319
  */
160
320
  export function analyze_mesh_proportions(vertices: Float32Array, vertical_axis: number): Float32Array;
161
321
 
322
+ export function analyze_model_descriptor(model_json: string, clips_json: string, profile_json: string, options_json: string): string;
323
+
162
324
  export function annotation_camera_framing_stride(): number;
163
325
 
164
326
  /**
@@ -198,20 +360,41 @@ export function compose_template_fit_adjustment(fit: Float32Array, scale_multipl
198
360
 
199
361
  export function compose_template_skeleton_fit_transform(fit_scale: number, fit_translation: Float32Array, manual_scale: number, manual_translation: Float32Array): Float32Array;
200
362
 
363
+ export function compute_humanoid_skeleton_template_rest_bounds(template_json: string): Float64Array;
364
+
201
365
  export function core_abi_version(): number;
202
366
 
367
+ export function create_validation_skeleton_json(template_json: string): string;
368
+
369
+ export function default_hair_color_appearance_json(): string;
370
+
203
371
  export function default_hair_physics_config_values(): Float32Array;
204
372
 
373
+ /**
374
+ * Execute a host-neutral Embody operation using JSON in and JSON out.
375
+ * This keeps CLJS and other browser hosts off the Rust data structures while
376
+ * ensuring all profile semantics execute inside Wasm.
377
+ */
378
+ export function embody_request(request_json: string): string;
379
+
380
+ export function extract_humanoid_skeleton_template_json(model_json: string, options_json: string): string;
381
+
382
+ export function extract_model_data_json(model_json: string, clips_json: string): string;
383
+
205
384
  /**
206
385
  * Padding factor for a focus target of the given max dimension.
207
386
  */
208
387
  export function focus_padding_factor(size: number, close_up_padding: number, zoom_padding: number, full_body_padding: number): number;
209
388
 
389
+ export function get_humanoid_skeleton_template_json(id: string): string;
390
+
210
391
  /**
211
392
  * Return the embedded preset JSON for a preset id (intake source of truth).
212
393
  */
213
394
  export function get_preset_json(preset_id: string): string;
214
395
 
396
+ export function hair_color_presets_json(): string;
397
+
215
398
  export function hair_config_stride(): number;
216
399
 
217
400
  export function hair_head_state_stride(): number;
@@ -225,6 +408,10 @@ export function hair_state_stride(): number;
225
408
  */
226
409
  export function has_preset(preset_id: string): boolean;
227
410
 
411
+ export function humanoid_skeleton_template_bone_names(template_json: string): string;
412
+
413
+ export function list_humanoid_skeleton_templates_json(): string;
414
+
228
415
  /**
229
416
  * Canonical embedded preset ids available inside the Wasm core.
230
417
  */
@@ -257,6 +444,8 @@ export function mesh_proportions_stride(): number;
257
444
 
258
445
  export function normalize_camera_angle_degrees(angle: number): number;
259
446
 
447
+ export function normalize_hair_color_appearance_json(value_json: string, fallback_json: string): string;
448
+
260
449
  export function pack_morph_frame_delta(mesh_ids: Uint32Array, morph_target_ids: Uint32Array, values: Float32Array, modes: Uint8Array): Float32Array;
261
450
 
262
451
  export function packed_bone_frame_delta_stride(): number;
@@ -317,6 +506,8 @@ export function sample_marker_arc_curve(start: Float32Array, end: Float32Array,
317
506
  */
318
507
  export function sample_marker_bezier_curve(start: Float32Array, end: Float32Array, segments: number): Float32Array;
319
508
 
509
+ export function screen_space_gaze_solution_stride(): number;
510
+
320
511
  /**
321
512
  * Separates overlapping marker endpoints while preserving each marker's
322
513
  * surface anchor and leader-line length.
@@ -364,6 +555,62 @@ export function solve_full_body_framing(box_min: Float32Array, box_max: Float32A
364
555
 
365
556
  export function solve_morph_batch(values: Float32Array, balances: Float32Array, mix_weights: Float32Array): Float32Array;
366
557
 
558
+ /**
559
+ * Solve a screen-space eye target against rendered-camera and character-eye
560
+ * geometry using the profile's authored AU rotation limits.
561
+ *
562
+ * Output layout (14 floats): combined target x/y, eye target x/y, head target
563
+ * x/y, total yaw/pitch degrees, camera-center yaw/pitch degrees, eye-to-camera
564
+ * distance, and viewer-target world x/y/z.
565
+ *
566
+ * The profile must describe the active rig and calibrated semantic yaw/pitch
567
+ * axes: neutral forward is model +Z, up is +Y, and head yaw precedes pitch.
568
+ * Bone availability/rest and optical-axis calibration are not encoded by this
569
+ * ABI. Missing or morph-only AUs have no inferred angular capacity. Shared eye
570
+ * outputs cannot represent vergence or independently calibrated eye ranges.
571
+ * Head follow is participation from model-neutral +Z toward the shared target;
572
+ * zero prefers neutral, with additional head movement allowed for eye overflow.
573
+ */
574
+ export function solve_profile_screen_space_gaze(profile_json: string, screen_target: Float32Array, camera_position: Float32Array, camera_quaternion: Float32Array, gaze_origin: Float32Array, model_quaternion: Float32Array, vertical_fov_degrees: number, aspect: number, eyes_enabled: boolean, head_enabled: boolean, head_follow_fraction: number): Float32Array;
575
+
576
+ /**
577
+ * Normalized tracking controls span the active profile's signed head AU range
578
+ * (or eye range with the head disabled). At full head participation, +/-1 on
579
+ * an aligned display axis reaches the same rotation as its AU at intensity 1.
580
+ * Zero input retains the camera bearing, bounded by that range. Camera roll
581
+ * rotates display axes into the model frame. X/Y are clamped to [-1, 1]; Z is
582
+ * finite-target depth in meters and does not attenuate angular movement.
583
+ * Pass 1 for full head participation; smaller explicit fractions retain the
584
+ * existing allocation policy. Output layout matches the physical gaze solvers.
585
+ */
586
+ export function solve_profile_tracking_gaze(profile_json: string, tracking_target: Float32Array, camera_position: Float32Array, camera_quaternion: Float32Array, gaze_origin: Float32Array, model_quaternion: Float32Array, eyes_enabled: boolean, head_enabled: boolean, head_follow_fraction: number, lock_head_to_camera: boolean, world_units_per_meter: number): Float32Array;
587
+
588
+ /**
589
+ * Solve a webcam/user target against the rendered camera. `viewer_target` is
590
+ * x/y in webcam NDC and z as estimated viewer distance behind the rendered
591
+ * camera in the same units as `camera_position` and `gaze_origin`. Hosts must
592
+ * convert estimated meters to scene units before calling. Zero x/y extends the
593
+ * eye-to-camera bearing; camera-right/up offsets retain the viewer projection
594
+ * without making eye contact depend on where the eyes sit in the image.
595
+ * `lock_head_to_camera` prefers the camera bearing while eyes can reach; it
596
+ * allows head overflow correction and follows the viewer with eyes disabled.
597
+ * Without that explicit lock, head follow participates from model-neutral +Z
598
+ * toward the shared target. A zero follow fraction does not imply camera lock.
599
+ * New consumers with metric viewer depth should use
600
+ * `solve_profile_viewer_space_gaze_scaled` to supply the scene conversion.
601
+ */
602
+ export function solve_profile_viewer_space_gaze(profile_json: string, viewer_target: Float32Array, camera_position: Float32Array, camera_quaternion: Float32Array, gaze_origin: Float32Array, model_quaternion: Float32Array, viewer_vertical_fov_degrees: number, viewer_aspect: number, eyes_enabled: boolean, head_enabled: boolean, head_follow_fraction: number, lock_head_to_camera: boolean): Float32Array;
603
+
604
+ /**
605
+ * Solve a webcam/user target with an explicit scene-unit conversion.
606
+ * `viewer_target` x/y are normalized webcam coordinates and z is estimated
607
+ * viewer distance in meters. `world_units_per_meter` converts both that depth
608
+ * and its projected lateral offsets into the units of `camera_position` and
609
+ * `gaze_origin`. Positive finite scales are accepted; malformed scales use 1.
610
+ * The output layout and head/eye allocation match the unscaled export.
611
+ */
612
+ export function solve_profile_viewer_space_gaze_scaled(profile_json: string, viewer_target: Float32Array, camera_position: Float32Array, camera_quaternion: Float32Array, gaze_origin: Float32Array, model_quaternion: Float32Array, viewer_vertical_fov_degrees: number, viewer_aspect: number, eyes_enabled: boolean, head_enabled: boolean, head_follow_fraction: number, lock_head_to_camera: boolean, world_units_per_meter: number): Float32Array;
613
+
367
614
  /**
368
615
  * Solve a uniform scale and translation for placing a template skeleton inside a mesh.
369
616
  *
@@ -403,6 +650,20 @@ export function template_skeleton_fit_transform_stride(): number;
403
650
  */
404
651
  export function validate_generated_template_fit_metadata(template_id: string, source_character_id: string, metadata: Float32Array): number;
405
652
 
653
+ /**
654
+ * Resolve and validate VRM humanoid roles through profile node keys against a
655
+ * renderer-neutral model descriptor. This is characterization metadata only;
656
+ * it does not create or apply pose frame writes.
657
+ */
658
+ export function validate_humanoid_characterization(profile_json: string, model_json: string): string;
659
+
660
+ /**
661
+ * Validate an authored profile against a renderer-neutral model descriptor.
662
+ * Three.js objects are reduced to this descriptor by the thin host adapter;
663
+ * all mapping analysis and correction generation stays in Rust.
664
+ */
665
+ export function validate_profile_model(profile_json: string, model_json: string, options_json: string): string;
666
+
406
667
  /**
407
668
  * World-space camera direction for a model-relative camera angle.
408
669
  * `model_quat` is the model's world quaternion `[x, y, z, w]`
@@ -414,30 +675,55 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
414
675
 
415
676
  export interface InitOutput {
416
677
  readonly memory: WebAssembly.Memory;
417
- readonly build_hair_gravity_curves: (a: number, b: number) => [number, number, number, number];
418
- readonly build_hair_idle_curves: (a: number, b: number, c: number) => [number, number, number, number];
419
- readonly build_hair_impulse_curves: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
420
- readonly compile_clip: (a: number, b: number) => [number, number, number, number];
421
- readonly compile_clip_curves: (a: number, b: number) => [number, number, number, number];
422
- readonly get_preset_json: (a: number, b: number) => [number, number, number, number];
423
- readonly has_preset: (a: number, b: number) => number;
424
- readonly list_presets: () => [number, number];
425
- readonly merge_embedded_preset: (a: number, b: number, c: number, d: number) => [number, number, number, number];
426
- readonly merge_preset_profile: (a: number, b: number, c: number, d: number) => [number, number, number, number];
427
- readonly resolve_embedded_profile_view: (a: number, b: number, c: number, d: number) => [number, number, number, number];
428
- readonly resolve_profile_view: (a: number, b: number) => [number, number, number, number];
678
+ readonly embody_request: (a: number, b: number) => [number, number, number, number];
679
+ readonly compute_humanoid_skeleton_template_rest_bounds: (a: number, b: number) => [number, number, number, number];
680
+ readonly create_validation_skeleton_json: (a: number, b: number) => [number, number, number, number];
681
+ readonly extract_humanoid_skeleton_template_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
682
+ readonly get_humanoid_skeleton_template_json: (a: number, b: number) => [number, number, number, number];
683
+ readonly humanoid_skeleton_template_bone_names: (a: number, b: number) => [number, number, number, number];
684
+ readonly list_humanoid_skeleton_templates_json: () => [number, number, number, number];
685
+ readonly validate_generated_template_fit_metadata: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
429
686
  readonly __wbg_runtimecore_free: (a: number, b: number) => void;
687
+ readonly compose_template_skeleton_fit_transform: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
688
+ readonly core_abi_version: () => number;
689
+ readonly pack_morph_frame_delta: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
690
+ readonly packed_bone_frame_delta_stride: () => number;
691
+ readonly packed_morph_frame_delta_stride: () => number;
430
692
  readonly runtimecore_active_transition_count: (a: number) => number;
693
+ readonly runtimecore_apply_semantic_pose_json: (a: number, b: number, c: number) => [number, number];
431
694
  readonly runtimecore_au_morph_binding_stride: () => number;
695
+ readonly runtimecore_build_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
696
+ readonly runtimecore_build_semantic_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
697
+ readonly runtimecore_build_typed_clip: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
698
+ readonly runtimecore_capture_semantic_pose_json: (a: number) => [number, number];
699
+ readonly runtimecore_cleanup_snippet: (a: number, b: number, c: number) => number;
432
700
  readonly runtimecore_clear: (a: number) => void;
433
701
  readonly runtimecore_clear_transitions: (a: number) => void;
434
702
  readonly runtimecore_configure: (a: number, b: number, c: number, d: number, e: number) => [number, number];
435
703
  readonly runtimecore_configure_with_preset: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
436
704
  readonly runtimecore_configure_with_profile: (a: number, b: number, c: number, d: number, e: number) => [number, number];
705
+ readonly runtimecore_crossfade_to: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
706
+ readonly runtimecore_drain_animation_events: (a: number) => [number, number, number, number];
707
+ readonly runtimecore_evaluate_active_bone_frame: (a: number) => [number, number];
708
+ readonly runtimecore_evaluate_active_morph_frame: (a: number) => [number, number];
437
709
  readonly runtimecore_evaluate_bone_frame_delta: (a: number) => [number, number];
438
710
  readonly runtimecore_evaluate_morph_frame_delta: (a: number) => [number, number];
711
+ readonly runtimecore_evaluate_procedural_bone_frame: (a: number) => [number, number];
712
+ readonly runtimecore_evaluate_procedural_morph_frame: (a: number) => [number, number];
713
+ readonly runtimecore_evaluate_scene_frame: (a: number) => [number, number, number, number];
714
+ readonly runtimecore_evaluate_semantic_body_bone_frame: (a: number) => [number, number];
715
+ readonly runtimecore_get_animation_clips: (a: number) => [number, number, number, number];
716
+ readonly runtimecore_get_animation_state: (a: number, b: number, c: number) => [number, number, number, number];
439
717
  readonly runtimecore_get_au: (a: number, b: number) => number;
718
+ readonly runtimecore_get_au_balance: (a: number, b: number) => number;
719
+ readonly runtimecore_get_au_mix_weight: (a: number, b: number) => number;
720
+ readonly runtimecore_get_body_controls_json: (a: number) => [number, number];
440
721
  readonly runtimecore_get_continuum: (a: number, b: number, c: number) => number;
722
+ readonly runtimecore_get_playing_animations: (a: number) => [number, number, number, number];
723
+ readonly runtimecore_get_semantic_pose_catalog_json: (a: number) => [number, number];
724
+ readonly runtimecore_get_viseme: (a: number, b: number) => number;
725
+ readonly runtimecore_get_viseme_jaw_scale: (a: number, b: number) => number;
726
+ readonly runtimecore_load_animation_clips: (a: number, b: number, c: number) => [number, number];
441
727
  readonly runtimecore_load_au_morph_bindings: (a: number, b: number, c: number) => void;
442
728
  readonly runtimecore_load_bone_rest_transforms: (a: number, b: number, c: number) => void;
443
729
  readonly runtimecore_load_bone_translations: (a: number, b: number, c: number) => void;
@@ -446,33 +732,72 @@ export interface InitOutput {
446
732
  readonly runtimecore_load_viseme_jaw_amounts: (a: number, b: number, c: number) => void;
447
733
  readonly runtimecore_load_viseme_morph_bindings: (a: number, b: number, c: number) => void;
448
734
  readonly runtimecore_new: (a: number) => number;
735
+ readonly runtimecore_pause_all_animations: (a: number) => void;
736
+ readonly runtimecore_pause_animation: (a: number, b: number, c: number) => void;
737
+ readonly runtimecore_play_animation: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
738
+ readonly runtimecore_play_snippet: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
739
+ readonly runtimecore_play_typed_snippet: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
740
+ readonly runtimecore_register_animation_clip: (a: number, b: number, c: number, d: number, e: number) => [number, number];
741
+ readonly runtimecore_release_morph: (a: number, b: number, c: number, d: number, e: number) => number;
742
+ readonly runtimecore_release_morph_index: (a: number, b: number, c: number, d: number) => number;
743
+ readonly runtimecore_release_procedural_morph_frame: (a: number) => [number, number];
744
+ readonly runtimecore_reset_body_controls: (a: number) => void;
745
+ readonly runtimecore_reset_procedural_frame_tracking: (a: number) => void;
746
+ readonly runtimecore_resume_all_animations: (a: number) => void;
747
+ readonly runtimecore_resume_animation: (a: number, b: number, c: number) => void;
748
+ readonly runtimecore_seek_animation: (a: number, b: number, c: number, d: number) => void;
749
+ readonly runtimecore_set_animation_blend_mode: (a: number, b: number, c: number, d: number, e: number) => [number, number];
750
+ readonly runtimecore_set_animation_easing: (a: number, b: number, c: number, d: number, e: number) => [number, number];
751
+ readonly runtimecore_set_animation_intensity: (a: number, b: number, c: number, d: number) => void;
752
+ readonly runtimecore_set_animation_loop_mode: (a: number, b: number, c: number, d: number, e: number) => [number, number];
753
+ readonly runtimecore_set_animation_repeat_count: (a: number, b: number, c: number, d: number) => void;
754
+ readonly runtimecore_set_animation_reverse: (a: number, b: number, c: number, d: number) => void;
755
+ readonly runtimecore_set_animation_speed: (a: number, b: number, c: number, d: number) => void;
756
+ readonly runtimecore_set_animation_time_scale: (a: number, b: number) => void;
449
757
  readonly runtimecore_set_au: (a: number, b: number, c: number, d: number) => void;
450
758
  readonly runtimecore_set_au_mix_weight: (a: number, b: number, c: number) => void;
451
759
  readonly runtimecore_set_au_signed: (a: number, b: number, c: number, d: number) => void;
452
760
  readonly runtimecore_set_continuum: (a: number, b: number, c: number, d: number, e: number) => void;
453
761
  readonly runtimecore_set_mixed_aus: (a: number, b: number, c: number) => void;
762
+ readonly runtimecore_set_morph: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
763
+ readonly runtimecore_set_morph_index: (a: number, b: number, c: number, d: number, e: number) => number;
454
764
  readonly runtimecore_set_viseme: (a: number, b: number, c: number) => void;
455
765
  readonly runtimecore_set_viseme_jaw_scale: (a: number, b: number, c: number) => void;
456
766
  readonly runtimecore_set_viseme_slot_count: (a: number, b: number) => void;
767
+ readonly runtimecore_stop_all_animations: (a: number) => void;
768
+ readonly runtimecore_stop_animation: (a: number, b: number, c: number) => void;
457
769
  readonly runtimecore_transition_au: (a: number, b: number, c: number, d: number, e: number) => void;
770
+ readonly runtimecore_transition_morph: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
771
+ readonly runtimecore_transition_morph_index: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
458
772
  readonly runtimecore_transition_viseme: (a: number, b: number, c: number, d: number, e: number) => void;
459
773
  readonly runtimecore_update: (a: number, b: number) => number;
460
- readonly runtimecore_viseme_morph_binding_stride: () => number;
774
+ readonly runtimecore_update_clip_params: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
775
+ readonly runtimecore_validate_semantic_animation_json: (a: number, b: number, c: number, d: number, e: number) => [number, number];
776
+ readonly runtimecore_validate_semantic_pose_json: (a: number, b: number, c: number) => [number, number, number, number];
461
777
  readonly runtimecore_viseme_slot_index: (a: number, b: number, c: number) => number;
462
- readonly __wbg_cameraflight_free: (a: number, b: number) => void;
463
- readonly __wbg_cameraorbit_free: (a: number, b: number) => void;
778
+ readonly runtimecore_remove_animation_clip: (a: number, b: number, c: number) => number;
779
+ readonly runtimecore_viseme_morph_binding_stride: () => number;
780
+ readonly template_skeleton_fit_transform_stride: () => number;
781
+ readonly marker_endpoint_stride: () => number;
782
+ readonly marker_visibility_animation_factors: (a: number, b: number) => [number, number];
783
+ readonly passes_marker_camera_angle_gate: (a: number, b: number, c: number) => number;
784
+ readonly resolve_viewport_constrained_line_scale: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
785
+ readonly resolve_viewport_safe_bounds: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
786
+ readonly sample_marker_arc_curve: (a: number, b: number, c: number, d: number, e: number) => [number, number];
787
+ readonly sample_marker_bezier_curve: (a: number, b: number, c: number, d: number, e: number) => [number, number];
788
+ readonly separate_overlapping_marker_endpoints: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
789
+ readonly should_show_marker: (a: number, b: number, c: number, d: number) => number;
790
+ readonly marker_visibility_factors_stride: () => number;
464
791
  readonly __wbg_hairphysicssolver_free: (a: number, b: number) => void;
465
- readonly annotation_camera_framing_stride: () => number;
466
- readonly cameraflight_duration_ms: (a: number) => number;
467
- readonly cameraflight_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
468
- readonly cameraflight_sample: (a: number, b: number) => [number, number];
469
- readonly cameraorbit_duration_ms: (a: number) => number;
470
- readonly cameraorbit_new: (a: number, b: number, c: number, d: number, e: number) => number;
471
- readonly cameraorbit_sample: (a: number, b: number) => [number, number];
472
- readonly compose_template_skeleton_fit_transform: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
473
- readonly core_abi_version: () => number;
792
+ readonly build_hair_gravity_curves: (a: number, b: number) => [number, number, number, number];
793
+ readonly build_hair_idle_curves: (a: number, b: number, c: number) => [number, number, number, number];
794
+ readonly build_hair_impulse_curves: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
795
+ readonly compile_clip: (a: number, b: number) => [number, number, number, number];
796
+ readonly compile_clip_curves: (a: number, b: number) => [number, number, number, number];
797
+ readonly default_hair_color_appearance_json: () => [number, number, number, number];
474
798
  readonly default_hair_physics_config_values: () => [number, number];
475
- readonly focus_padding_factor: (a: number, b: number, c: number, d: number) => number;
799
+ readonly get_preset_json: (a: number, b: number) => [number, number, number, number];
800
+ readonly hair_color_presets_json: () => [number, number, number, number];
476
801
  readonly hair_config_stride: () => number;
477
802
  readonly hair_head_state_stride: () => number;
478
803
  readonly hair_morph_output_stride: () => number;
@@ -483,36 +808,47 @@ export interface InitOutput {
483
808
  readonly hairphysicssolver_reset: (a: number) => void;
484
809
  readonly hairphysicssolver_set_config: (a: number, b: number, c: number) => void;
485
810
  readonly hairphysicssolver_update: (a: number, b: number, c: number, d: number) => [number, number];
811
+ readonly has_preset: (a: number, b: number) => number;
812
+ readonly list_presets: () => [number, number];
813
+ readonly merge_embedded_preset: (a: number, b: number, c: number, d: number) => [number, number, number, number];
814
+ readonly merge_preset_profile: (a: number, b: number, c: number, d: number) => [number, number, number, number];
815
+ readonly normalize_hair_color_appearance_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
816
+ readonly resolve_embedded_profile_view: (a: number, b: number, c: number, d: number) => [number, number, number, number];
817
+ readonly resolve_profile_view: (a: number, b: number) => [number, number, number, number];
818
+ readonly validate_humanoid_characterization: (a: number, b: number, c: number, d: number) => [number, number, number, number];
819
+ readonly validate_profile_model: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
820
+ readonly __wbg_cameraflight_free: (a: number, b: number) => void;
821
+ readonly __wbg_cameraorbit_free: (a: number, b: number) => void;
822
+ readonly analyze_model_descriptor: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
823
+ readonly annotation_camera_framing_stride: () => number;
824
+ readonly cameraflight_duration_ms: (a: number) => number;
825
+ readonly cameraflight_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
826
+ readonly cameraflight_sample: (a: number, b: number) => [number, number];
827
+ readonly cameraorbit_duration_ms: (a: number) => number;
828
+ readonly cameraorbit_new: (a: number, b: number, c: number, d: number, e: number) => number;
829
+ readonly cameraorbit_sample: (a: number, b: number) => [number, number];
830
+ readonly extract_model_data_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
831
+ readonly focus_padding_factor: (a: number, b: number, c: number, d: number) => number;
486
832
  readonly normalize_camera_angle_degrees: (a: number) => number;
487
- readonly pack_morph_frame_delta: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
488
- readonly packed_bone_frame_delta_stride: () => number;
489
833
  readonly resolve_auto_closeup_angle: (a: number, b: number, c: number, d: number, e: number) => number;
490
834
  readonly resolve_focus_camera_direction: (a: number, b: number, c: number, d: number, e: number) => [number, number];
835
+ readonly screen_space_gaze_solution_stride: () => number;
491
836
  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];
492
837
  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];
838
+ readonly solve_profile_screen_space_gaze: (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, p: number, q: number) => [number, number, number, number];
839
+ readonly solve_profile_tracking_gaze: (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, p: number, q: number) => [number, number, number, number];
840
+ readonly solve_profile_viewer_space_gaze: (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, p: number, q: number, r: number) => [number, number, number, number];
841
+ readonly solve_profile_viewer_space_gaze_scaled: (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, p: number, q: number, r: number, s: number) => [number, number, number, number];
493
842
  readonly world_direction_for_camera_angle: (a: number, b: number, c: number) => [number, number];
494
843
  readonly camera_flight_sample_stride: () => number;
495
- readonly packed_morph_frame_delta_stride: () => number;
496
- readonly template_skeleton_fit_transform_stride: () => number;
497
844
  readonly analyze_mesh_proportions: (a: number, b: number, c: number) => [number, number];
498
845
  readonly compose_template_fit_adjustment: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
499
- readonly marker_endpoint_stride: () => number;
500
- readonly marker_visibility_animation_factors: (a: number, b: number) => [number, number];
501
846
  readonly mesh_proportions_stride: () => number;
502
- readonly passes_marker_camera_angle_gate: (a: number, b: number, c: number) => number;
503
- readonly resolve_viewport_constrained_line_scale: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
504
- readonly resolve_viewport_safe_bounds: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
505
- readonly sample_marker_arc_curve: (a: number, b: number, c: number, d: number, e: number) => [number, number];
506
- readonly sample_marker_bezier_curve: (a: number, b: number, c: number, d: number, e: number) => [number, number];
507
- readonly separate_overlapping_marker_endpoints: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
508
- readonly should_show_marker: (a: number, b: number, c: number, d: number) => number;
509
847
  readonly solve_axis_quaternion: (a: number, b: number, c: number, d: number) => [number, number];
510
848
  readonly solve_bilateral_values: (a: number, b: number) => [number, number];
511
849
  readonly solve_morph_batch: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
512
850
  readonly solve_template_skeleton_fit: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
513
851
  readonly template_skeleton_fit_solution_stride: () => number;
514
- readonly validate_generated_template_fit_metadata: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
515
- readonly marker_visibility_factors_stride: () => number;
516
852
  readonly __wbindgen_externrefs: WebAssembly.Table;
517
853
  readonly __wbindgen_malloc: (a: number, b: number) => number;
518
854
  readonly __wbindgen_free: (a: number, b: number, c: number) => void;