@vincentt-xr/sdk 2.0.0-alpha.8 → 2.0.0-alpha.9

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 (517) hide show
  1. package/GROUNDING.md +4643 -170
  2. package/README.md +1 -0
  3. package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
  4. package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
  5. package/dist/DebuggerUI-7ngnJsBe.js +275 -0
  6. package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
  7. package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
  8. package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
  9. package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
  10. package/dist/FaceSurface-DmP9AEeC.js +27 -0
  11. package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
  12. package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
  13. package/dist/SkeletonUtils-C2r90MtN.js +21 -0
  14. package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
  15. package/dist/TextLabel-XE0rQSDn.cjs +2 -0
  16. package/dist/TextLabel-c9BCucOI.js +961 -0
  17. package/dist/assets/gltfLoader.d.ts +16 -0
  18. package/dist/assets/loaders.d.ts +16 -1
  19. package/dist/body-pose/index.d.ts +521 -0
  20. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  21. package/dist/body-trigger/frame.d.ts +88 -0
  22. package/dist/body-trigger/index.d.ts +6 -0
  23. package/dist/body-trigger/moves.d.ts +235 -0
  24. package/dist/body-trigger/trigger.d.ts +75 -0
  25. package/dist/calibration/calibration.d.ts +11 -6
  26. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  27. package/dist/canonicalFace-C83I225R.cjs +1 -0
  28. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  29. package/dist/components/BodyInstruction/index.d.ts +69 -0
  30. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  31. package/dist/components/BodyTracker/index.d.ts +10 -2
  32. package/dist/components/BodyTrigger/index.d.ts +49 -0
  33. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  34. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  35. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  36. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  37. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  38. package/dist/components/FaceAtlas/index.d.ts +7 -0
  39. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  40. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  41. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  42. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  43. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  44. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  45. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  46. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  47. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  48. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  49. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  50. package/dist/components/FaceCharacter/index.d.ts +18 -0
  51. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  52. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  53. package/dist/components/FaceInset/frame.d.ts +94 -0
  54. package/dist/components/FaceInset/index.d.ts +6 -0
  55. package/dist/components/FaceInset/material.d.ts +40 -0
  56. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  57. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  58. package/dist/components/FaceInstruction/index.d.ts +56 -0
  59. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  60. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  61. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  62. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  63. package/dist/components/FaceLiquify/index.d.ts +10 -0
  64. package/dist/components/FaceLiquify/material.d.ts +39 -0
  65. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  66. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  67. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  68. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  69. package/dist/components/FaceLiquify/target.d.ts +85 -0
  70. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  71. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +5 -3
  72. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  73. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +9 -0
  74. package/dist/components/FaceMesh/index.d.ts +1 -1
  75. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  76. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  77. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  78. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  79. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  80. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  81. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  82. package/dist/components/FaceSwap/index.d.ts +13 -0
  83. package/dist/components/FaceSwap/settings.d.ts +300 -0
  84. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  85. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  86. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  87. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  88. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  89. package/dist/components/Faceless/Faceless.d.ts +51 -0
  90. package/dist/components/Faceless/index.d.ts +2 -0
  91. package/dist/components/HairLock/HairLock.d.ts +39 -0
  92. package/dist/components/HairLock/index.d.ts +2 -0
  93. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  94. package/dist/components/HandCutout/index.d.ts +35 -0
  95. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  96. package/dist/components/HandInstruction/index.d.ts +74 -0
  97. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  98. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  99. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  100. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  101. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  102. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  103. package/dist/components/HandRig/index.d.ts +101 -0
  104. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  105. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  106. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  107. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  108. package/dist/components/HandTouch/index.d.ts +2 -0
  109. package/dist/components/HeadBinding/index.d.ts +14 -0
  110. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  111. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  112. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  113. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  114. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  115. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  116. package/dist/components/HeadOccluder/index.d.ts +57 -3
  117. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  118. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  119. package/dist/components/Instruction/HintStage.d.ts +29 -0
  120. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  121. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  122. package/dist/components/Instruction/ghost.d.ts +129 -0
  123. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  124. package/dist/components/Instruction/hintLook.d.ts +81 -0
  125. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  126. package/dist/components/Instruction/index.d.ts +41 -0
  127. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  128. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  129. package/dist/components/LipEffect/LipEffect.d.ts +22 -2
  130. package/dist/components/LipEffect/LipEffectMaterial.d.ts +62 -10
  131. package/dist/components/LipEffect/LipEffects.d.ts +5 -2
  132. package/dist/components/LipEffect/defaults.d.ts +21 -2
  133. package/dist/components/LipEffect/index.d.ts +1 -1
  134. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  135. package/dist/components/LipEffect/settings.d.ts +117 -13
  136. package/dist/components/LipEffect/shader.d.ts +39 -0
  137. package/dist/components/LipEffect/types.d.ts +82 -10
  138. package/dist/components/LipEffect/useLipDesignTextures.d.ts +6 -0
  139. package/dist/components/LipEffect/uvGuide.d.ts +31 -16
  140. package/dist/components/Makeup/Blush.d.ts +18 -0
  141. package/dist/components/Makeup/Brows.d.ts +20 -0
  142. package/dist/components/Makeup/Contour.d.ts +17 -0
  143. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  144. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  145. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  146. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  147. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  148. package/dist/components/Makeup/constants.d.ts +44 -0
  149. package/dist/components/Makeup/design.d.ts +106 -0
  150. package/dist/components/Makeup/designSamples.d.ts +42 -0
  151. package/dist/components/Makeup/eyes.d.ts +114 -0
  152. package/dist/components/Makeup/fields.d.ts +10 -0
  153. package/dist/components/Makeup/geometry.d.ts +106 -0
  154. package/dist/components/Makeup/index.d.ts +26 -0
  155. package/dist/components/Makeup/looks.d.ts +28 -0
  156. package/dist/components/Makeup/material.d.ts +239 -0
  157. package/dist/components/Makeup/settings.d.ts +54 -0
  158. package/dist/components/Makeup/shades.d.ts +143 -0
  159. package/dist/components/Makeup/shapes.d.ts +27 -0
  160. package/dist/components/Makeup/skinTone.d.ts +135 -0
  161. package/dist/components/Makeup/types.d.ts +110 -0
  162. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  163. package/dist/components/Necklace/Necklace.d.ts +44 -0
  164. package/dist/components/Necklace/index.d.ts +1 -0
  165. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  166. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  167. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  168. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  169. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  170. package/dist/components/SpringSwing/index.d.ts +1 -0
  171. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  172. package/dist/components/index.d.ts +8 -0
  173. package/dist/config/index.d.ts +0 -1
  174. package/dist/context-DTxSQvp4.js +13 -0
  175. package/dist/context-hA0Rb2Xa.cjs +1 -0
  176. package/dist/contexts-BH7PdKFS.cjs +1 -0
  177. package/dist/contexts-jak8-tND.js +667 -0
  178. package/dist/coordinates/index.d.ts +2 -0
  179. package/dist/coordinates/side.d.ts +40 -0
  180. package/dist/debug-ui/default-setting.cjs +2 -2
  181. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  182. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  183. package/dist/debug-ui/index.d.ts +4 -3
  184. package/dist/debug-ui/media-source/index.d.ts +1 -1
  185. package/dist/debug-ui/media-source/session.d.ts +30 -2
  186. package/dist/debug-ui/media-source.cjs +1 -1
  187. package/dist/debug-ui/media-source.js +1 -1
  188. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  189. package/dist/debug-ui/product-hotspots/index.d.ts +3 -2
  190. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  191. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  192. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  193. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  194. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  195. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  196. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  197. package/dist/debug-ui/xr-diagnostics/index.d.ts +3 -2
  198. package/dist/debug-ui.cjs +3 -3
  199. package/dist/debug-ui.js +2250 -2472
  200. package/dist/entries/all.d.ts +3 -1
  201. package/dist/entries/core.d.ts +3 -2
  202. package/dist/entries/face-effects.d.ts +114 -8
  203. package/dist/entries/instructions.d.ts +48 -0
  204. package/dist/entries/internal.d.ts +2 -1
  205. package/dist/entries/low-level.d.ts +28 -1
  206. package/dist/entries/particles.d.ts +11 -0
  207. package/dist/entries/tracking.d.ts +37 -2
  208. package/dist/face-atlas/attributes.d.ts +30 -0
  209. package/dist/face-atlas/eyes.d.ts +272 -0
  210. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  211. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  212. package/dist/face-atlas/glsl/common.d.ts +55 -0
  213. package/dist/face-atlas/glsl/design.d.ts +49 -0
  214. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  215. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  216. package/dist/face-atlas/glsl/format.d.ts +4 -0
  217. package/dist/face-atlas/glsl/index.d.ts +59 -0
  218. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  219. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  220. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  221. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  222. package/dist/face-atlas/guide.d.ts +51 -0
  223. package/dist/face-atlas/index.d.ts +25 -0
  224. package/dist/face-atlas/lead.d.ts +117 -0
  225. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  226. package/dist/face-atlas/masks.d.ts +53 -0
  227. package/dist/face-atlas/obj.d.ts +69 -0
  228. package/dist/face-atlas/polylines.d.ts +63 -0
  229. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  230. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  231. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  232. package/dist/face-atlas/probe/constants.d.ts +137 -0
  233. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  234. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  235. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  236. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  237. package/dist/face-atlas/probe/stats.d.ts +143 -0
  238. package/dist/face-atlas/probe/targets.d.ts +70 -0
  239. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  240. package/dist/face-atlas/quality.d.ts +28 -0
  241. package/dist/face-atlas/regions.d.ts +31 -0
  242. package/dist/face-atlas/registry.d.ts +252 -0
  243. package/dist/face-atlas/renderState.d.ts +86 -0
  244. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  245. package/dist/face-atlas/shading.d.ts +406 -0
  246. package/dist/face-atlas/shapes.d.ts +86 -0
  247. package/dist/face-atlas/sides.d.ts +41 -0
  248. package/dist/face-atlas/skinMask.d.ts +35 -0
  249. package/dist/face-atlas/surface.d.ts +155 -0
  250. package/dist/face-atlas/topology.d.ts +44 -0
  251. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  252. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  253. package/dist/face-character/bindFaceModel.d.ts +106 -0
  254. package/dist/face-character/canonicalFace.d.ts +17 -0
  255. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  256. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  257. package/dist/face-character/driveFaceModel.d.ts +57 -0
  258. package/dist/face-character/expressionOutputs.d.ts +45 -0
  259. package/dist/face-character/faceExpressions.d.ts +104 -0
  260. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  261. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  262. package/dist/face-character/faceMorph.d.ts +77 -0
  263. package/dist/face-character/faceMorphs.d.ts +46 -0
  264. package/dist/face-character/facePhoto.d.ts +138 -0
  265. package/dist/face-character/facePiercings.d.ts +116 -0
  266. package/dist/face-character/facePin.d.ts +131 -0
  267. package/dist/face-character/faceReprojection.d.ts +273 -0
  268. package/dist/face-character/faceReprojector.d.ts +171 -0
  269. package/dist/face-character/faceRig.d.ts +176 -0
  270. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  271. package/dist/face-character/faceTexture.d.ts +169 -0
  272. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  273. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  274. package/dist/face-character/faceTextureStats.d.ts +298 -0
  275. package/dist/face-character/faceTransfer.d.ts +396 -0
  276. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  277. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  278. package/dist/face-character/faceWarp3D.d.ts +101 -0
  279. package/dist/face-character/faceless.d.ts +79 -0
  280. package/dist/face-character/featureWarp.d.ts +28 -0
  281. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  282. package/dist/face-character/liveValue.d.ts +12 -0
  283. package/dist/face-character/memo.d.ts +15 -0
  284. package/dist/face-effects.cjs +2252 -83
  285. package/dist/face-effects.js +14234 -1231
  286. package/dist/face-expression/index.d.ts +182 -0
  287. package/dist/face-info/landmarks.d.ts +17 -3
  288. package/dist/face-info/types.d.ts +20 -3
  289. package/dist/gestures/definitions.d.ts +15 -2
  290. package/dist/gestures/index.d.ts +1 -1
  291. package/dist/gestures/measures.d.ts +21 -8
  292. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  293. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  294. package/dist/hand/armFit.d.ts +46 -0
  295. package/dist/hand/armMask.d.ts +178 -0
  296. package/dist/hand/handCutout.d.ts +23 -0
  297. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  298. package/dist/hand/handGestures.d.ts +524 -0
  299. package/dist/hand/handPose.d.ts +98 -0
  300. package/dist/hand/handRigSolver.d.ts +159 -0
  301. package/dist/hand/handTattoo.d.ts +81 -0
  302. package/dist/hand/handTouch.d.ts +240 -0
  303. package/dist/hand/wrist.d.ts +44 -0
  304. package/dist/hand/wristFilter.d.ts +44 -0
  305. package/dist/hooks/selectors.d.ts +8 -0
  306. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  307. package/dist/hooks/useTrackerContext.d.ts +6 -0
  308. package/dist/index-B1_TzJaI.js +1104 -0
  309. package/dist/index-BavF06C6.js +190 -0
  310. package/dist/index-BfFmpddl.cjs +21 -0
  311. package/dist/index-BuBzneeW.cjs +46 -0
  312. package/dist/index-CGsQWodV.cjs +1 -0
  313. package/dist/index-CIe7eCMH.js +3200 -0
  314. package/dist/index-CfSF8LXa.cjs +1 -0
  315. package/dist/index-D5GTzOzD.cjs +1 -0
  316. package/dist/index-DBhQzvVa.js +314 -0
  317. package/dist/index-DE17y0ZI.cjs +1 -0
  318. package/dist/index-JII7huPk.js +442 -0
  319. package/dist/index-tpCr9CLj.cjs +1 -0
  320. package/dist/{renderPasses-NnKZVfBy.js → index-w1S7fI2B.js} +219 -247
  321. package/dist/index-zGaqrz_K.js +188 -0
  322. package/dist/instructions.cjs +30 -0
  323. package/dist/instructions.js +1507 -0
  324. package/dist/{internal-vsfNQycj.js → internal-B90P-clC.js} +138 -118
  325. package/dist/internal-Cjinca64.cjs +1 -0
  326. package/dist/internal.cjs +1 -1
  327. package/dist/internal.js +15 -10
  328. package/dist/iris/compute.d.ts +7 -5
  329. package/dist/iris/types.d.ts +6 -4
  330. package/dist/{landmarkMask-CbTFzBYG.js → landmarkMask-BFDyBnKM.js} +6 -6
  331. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  332. package/dist/landmarks-bftdwq6Z.js +76 -0
  333. package/dist/loaders-BGAUACsd.js +363 -0
  334. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  335. package/dist/low-level.cjs +1 -1
  336. package/dist/low-level.js +666 -602
  337. package/dist/main.cjs +1 -1
  338. package/dist/main.js +866 -1182
  339. package/dist/models/Body/index.d.ts +2 -0
  340. package/dist/models/Face/constants.d.ts +8 -0
  341. package/dist/models/Face/index.d.ts +3 -11
  342. package/dist/models/Face/rotation.d.ts +18 -3
  343. package/dist/models/Hand/HandTracking.d.ts +17 -1
  344. package/dist/models/Segmentation/index.d.ts +2 -0
  345. package/dist/models/nodeSource.d.ts +9 -0
  346. package/dist/particles/emission.d.ts +24 -0
  347. package/dist/particles/eyes.d.ts +24 -0
  348. package/dist/particles/glsl.d.ts +14 -0
  349. package/dist/particles/index.d.ts +10 -0
  350. package/dist/particles/motion.d.ts +42 -0
  351. package/dist/particles/presets.d.ts +12 -0
  352. package/dist/particles/ring.d.ts +58 -0
  353. package/dist/particles/selfTest.d.ts +53 -0
  354. package/dist/particles/settings.d.ts +127 -0
  355. package/dist/particles/shapes.d.ts +29 -0
  356. package/dist/particles/spawner.d.ts +60 -0
  357. package/dist/particles/system.d.ts +64 -0
  358. package/dist/particles.cjs +122 -0
  359. package/dist/particles.js +774 -0
  360. package/dist/product.cjs +1 -1
  361. package/dist/product.js +29 -29
  362. package/dist/{providers-C0Dlhh9Z.js → providers-C8rE26Uf.js} +127 -126
  363. package/dist/providers-DHsrhDI2.cjs +62 -0
  364. package/dist/render/renderPasses.d.ts +8 -0
  365. package/dist/render/sceneBeforeRender.d.ts +12 -0
  366. package/dist/{renderGroups-CN1cGFUo.js → renderGroups-B38pUaX2.js} +1 -1
  367. package/dist/{renderGroups-O4KmaMl9.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  368. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  369. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  370. package/dist/renderState-CJNmj5jz.js +39 -0
  371. package/dist/renderState-apSfg4eR.cjs +1 -0
  372. package/dist/scene-object.cjs +1 -1
  373. package/dist/scene-object.js +2 -2
  374. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  375. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  376. package/dist/segmentation2d/types.d.ts +6 -0
  377. package/dist/select-Ck5LGz-J.cjs +1 -0
  378. package/dist/select-pYRo_win.js +233 -0
  379. package/dist/selectors-C4X71aoD.cjs +1 -0
  380. package/dist/selectors-DmNaKIwE.js +196 -0
  381. package/dist/session-BrH8G7iJ.cjs +31 -0
  382. package/dist/session-DgA_z6O1.js +418 -0
  383. package/dist/{settings-aQk845NJ.js → settings-BJ7FMBsO.js} +53 -15
  384. package/dist/settings-C63FMBlF.cjs +1 -0
  385. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  386. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  387. package/dist/spring/index.d.ts +2 -0
  388. package/dist/spring/spring.d.ts +69 -0
  389. package/dist/spring/swing.d.ts +54 -0
  390. package/dist/tracking.cjs +10 -1
  391. package/dist/tracking.js +1002 -855
  392. package/dist/trigger-D0Pm9noT.cjs +49 -0
  393. package/dist/trigger-IQeys0oS.js +2128 -0
  394. package/dist/types/face.d.ts +20 -1
  395. package/dist/types/hand-tracking.d.ts +9 -0
  396. package/dist/types/nodes.d.ts +20 -1
  397. package/dist/types/segmentation.d.ts +5 -0
  398. package/dist/updateThrottle-BseecYag.js +4 -0
  399. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  400. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  401. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  402. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  403. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  404. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  405. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  406. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  407. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  408. package/dist/{useXRCapabilities-B1R2ghy-.cjs → useXRCapabilities-Cr3RzuAW.cjs} +1 -1
  409. package/dist/{useXRCapabilities-C68v__wB.js → useXRCapabilities-Cxmlmpbd.js} +1 -1
  410. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  411. package/dist/utils/headOccluderFit.d.ts +42 -0
  412. package/dist/utils/integrity.d.ts +17 -0
  413. package/dist/utils/resolveNumFaces.d.ts +13 -0
  414. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  415. package/dist/utils/similarityFit.d.ts +23 -0
  416. package/dist/uv-BMFt19bg.cjs +1 -0
  417. package/dist/{index-CsUdQ-pn.js → uv-DJU_XfmN.js} +15 -249
  418. package/docs/SDK_DOCUMENTATION.md +1 -2
  419. package/docs/api/adaptive-quality.mdx +1 -1
  420. package/docs/api/body-instructions.mdx +285 -0
  421. package/docs/api/body-triggers.mdx +234 -0
  422. package/docs/api/camera-permission.mdx +1 -1
  423. package/docs/api/coordinate-spaces.mdx +7 -4
  424. package/docs/api/cross-camera.mdx +3 -2
  425. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  426. package/docs/api/external-face-mesh.mdx +231 -0
  427. package/docs/api/face-actions.mdx +20 -16
  428. package/docs/api/face-attribute-expression.mdx +1 -1
  429. package/docs/api/face-binding-anchors.mdx +4 -2
  430. package/docs/api/face-character.mdx +157 -0
  431. package/docs/api/face-effects.mdx +3 -0
  432. package/docs/api/face-expression-controller.mdx +153 -0
  433. package/docs/api/face-info.mdx +17 -11
  434. package/docs/api/face-inset.mdx +204 -0
  435. package/docs/api/face-instructions.mdx +183 -0
  436. package/docs/api/face-liquify.mdx +196 -0
  437. package/docs/api/face-mesh.mdx +4 -7
  438. package/docs/api/face-morph.mdx +117 -0
  439. package/docs/api/face-painting.mdx +7 -0
  440. package/docs/api/face-reprojection.mdx +154 -0
  441. package/docs/api/face-retouching.mdx +18 -10
  442. package/docs/api/face-swap.mdx +350 -0
  443. package/docs/api/face-warp-3d.mdx +166 -0
  444. package/docs/api/faceless.mdx +143 -0
  445. package/docs/api/gestures.mdx +68 -32
  446. package/docs/api/hair.mdx +97 -0
  447. package/docs/api/hand-instructions.mdx +222 -0
  448. package/docs/api/hand-rig.mdx +535 -0
  449. package/docs/api/hand-touch.mdx +162 -0
  450. package/docs/api/head-occluder.mdx +563 -0
  451. package/docs/api/holistic-tracker.mdx +6 -1
  452. package/docs/api/instructions.mdx +323 -0
  453. package/docs/api/iris-tracking.mdx +24 -19
  454. package/docs/api/made-up-camera.mdx +131 -0
  455. package/docs/api/makeup-skin-tone.mdx +135 -0
  456. package/docs/api/makeup.mdx +353 -0
  457. package/docs/api/multi-subject.mdx +4 -1
  458. package/docs/api/particles.mdx +155 -0
  459. package/docs/api/person-cutout.mdx +1 -1
  460. package/docs/api/pin-to-face-mesh.mdx +274 -0
  461. package/docs/api/product-ar.mdx +5 -2
  462. package/docs/api/segmentation-overlay.mdx +1 -1
  463. package/docs/docs.json +29 -1
  464. package/docs/examples/lip-shaders.mdx +82 -33
  465. package/docs/guides/face-atlas-template.svg +1 -0
  466. package/docs/guides/face-atlas-textures.mdx +186 -0
  467. package/docs/guides/face-texture-template.svg +1 -0
  468. package/docs/guides/harness-debug-ui.mdx +4 -4
  469. package/docs/guides/lip-effect-textures.mdx +178 -102
  470. package/docs/guides/lip-uv-template.png +0 -0
  471. package/docs/guides/lip-uv-template.svg +1 -1
  472. package/docs/guides/makeup-design-textures.mdx +109 -0
  473. package/docs/introduction.mdx +1 -2
  474. package/package.json +11 -1
  475. package/dist/DebuggerUI-C-ldiozL.js +0 -269
  476. package/dist/DebuggerUI-CWX5EtQv.cjs +0 -1
  477. package/dist/FaceMeshRenderer-BEEXZwS6.cjs +0 -158
  478. package/dist/FaceMeshRenderer-UuH5sTXG.js +0 -1322
  479. package/dist/FaceRetouch-C7h7x9kd.js +0 -683
  480. package/dist/FaceRetouch-DqftT26Y.cjs +0 -134
  481. package/dist/GLTFLoader-C5q63sKO.js +0 -1633
  482. package/dist/GLTFLoader-Cb_CRwmG.cjs +0 -1
  483. package/dist/SegmentationOverlay-DQuW3dsc.js +0 -133
  484. package/dist/SegmentationOverlay-aWVod8Kl.cjs +0 -1
  485. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  486. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  487. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  488. package/dist/contexts-CO0sd4JQ.cjs +0 -1
  489. package/dist/contexts-FzlnnMYD.js +0 -669
  490. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  491. package/dist/getFaceInfo-BkZfaQs-.js +0 -118
  492. package/dist/getFaceInfo-ahPxQFGu.cjs +0 -1
  493. package/dist/index--RgGzZ6X.cjs +0 -47
  494. package/dist/index-CHVbH0hz.js +0 -214
  495. package/dist/index-CeVkgsag.cjs +0 -1
  496. package/dist/index-CnGox6Xr.js +0 -3054
  497. package/dist/index-DKBAh6hV.cjs +0 -1
  498. package/dist/index-DsZwTfG0.cjs +0 -1
  499. package/dist/index-Dw6tj2Mi.js +0 -144
  500. package/dist/index-OCPjOaeP.cjs +0 -1
  501. package/dist/index-s9pF4zkG.js +0 -2053
  502. package/dist/internal-BYza1h8_.cjs +0 -1
  503. package/dist/measures-9dQPdw96.js +0 -154
  504. package/dist/measures-KfJzpvod.cjs +0 -1
  505. package/dist/providers-YNwkmNeK.cjs +0 -62
  506. package/dist/renderPasses-Cg-zqmEz.cjs +0 -21
  507. package/dist/screenTransform-BenfCtZt.js +0 -44
  508. package/dist/screenTransform-BiXdpVf0.cjs +0 -1
  509. package/dist/segmentation-9PhSvc-R.cjs +0 -1
  510. package/dist/segmentation-CeOTKemr.js +0 -5
  511. package/dist/selectors-C5G1PMYL.js +0 -195
  512. package/dist/selectors-Du_PsVnW.cjs +0 -1
  513. package/dist/session-BBr0yN8h.cjs +0 -31
  514. package/dist/session-Cy0m7l7-.js +0 -363
  515. package/dist/settings-DRR7-snV.cjs +0 -1
  516. package/dist/useFaceInfo-Blf7FCu3.js +0 -303
  517. package/dist/useFaceInfo-C5mO8NQY.cjs +0 -1
@@ -0,0 +1,88 @@
1
+ import { BodyShape, BodyShapeLimits, BodySide } from '../body-pose';
2
+ import { TrackerPoint } from '../types/common';
3
+ /** The joints a move reads, named by the person's OWN side. */
4
+ export type BodyMoveJointName = "nose" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftIndex" | "rightIndex" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle";
5
+ /**
6
+ * When a joint counts as in view for the moves. MediaPipe's visibility for an
7
+ * ankle in frame is often well below 0.5 (0.2 to 0.5 is common for feet near
8
+ * the bottom edge), while a joint outside the frame (legs cut off by a close
9
+ * front camera) drops near 0 and sits well past the edge; a low visibility bar
10
+ * plus a position check separates the two.
11
+ */
12
+ export declare const BODY_MOVE_VIEW_LIMITS: Readonly<{
13
+ /** MediaPipe visibility at or above which a joint counts. */
14
+ visible: 0.2;
15
+ /**
16
+ * How far past the frame edge a joint may sit (frame units: each axis spans
17
+ * −1..1), so an ankle right at the edge, feet partly cropped, still counts.
18
+ */
19
+ edge: 0.12;
20
+ }>;
21
+ /** The in-view thresholds (see `BODY_MOVE_VIEW_LIMITS`). */
22
+ export type BodyMoveViewLimits = Record<keyof typeof BODY_MOVE_VIEW_LIMITS, number>;
23
+ /**
24
+ * One analysed tracker sample of one body, shared by every trigger that reads
25
+ * it: BodyInstruction's `analyzeBodyShape` result plus the person-side joints
26
+ * and the scales the moves measure in. Left / right are the person's OWN
27
+ * sides on every camera (MediaPipe's labels are swapped on a mirrored feed).
28
+ * Joints are in square tracker units: x right, y up, `z` toward the camera
29
+ * (MediaPipe's relative depth), with x and z multiplied by the frame's aspect
30
+ * so a unit of x equals a unit of y on any frame.
31
+ */
32
+ export type BodyMoveFrame = {
33
+ /** BodyInstruction's analysis of the same landmarks (arm / leg states, squat, lean …). */
34
+ shape: BodyShape;
35
+ /** The landmarks as tracked (MediaPipe's labels; frame units, each axis spans −1..1). */
36
+ landmarks: readonly TrackerPoint[];
37
+ /** The person's own joints, in square units (`joints.leftWrist` is their left wrist). */
38
+ joints: Record<BodyMoveJointName, TrackerPoint>;
39
+ /** Each joint's MediaPipe visibility (1 when the source gives none). */
40
+ visibility: Record<BodyMoveJointName, number>;
41
+ /**
42
+ * Whether each joint is in view: visibility at least
43
+ * `BODY_MOVE_VIEW_LIMITS.visible` and no further than `edge` past the frame edge.
44
+ */
45
+ seen: Record<BodyMoveJointName, boolean>;
46
+ /** Shoulder width in square units (= `shape.shoulderWidth`): the scale of the arm moves. */
47
+ shoulderWidth: number;
48
+ /**
49
+ * Torso length, shoulder midpoint to hip midpoint, measured vertically: the
50
+ * scale of the leg moves (vertical against vertical). 0 when the hips are
51
+ * not below the shoulders.
52
+ */
53
+ torso: number;
54
+ /** Tracker-x direction of the person's own left: +1 on an unmirrored camera, −1 on the selfie feed. */
55
+ leftward: 1 | -1;
56
+ /** Shoulders, elbows and wrists are in view (`seen`). */
57
+ upperInView: boolean;
58
+ /** Shoulders, hips, knees and ankles are in view (`seen`): the leg moves need it. */
59
+ fullInView: boolean;
60
+ /** The input was a mirrored (selfie) feed. */
61
+ mirrored: boolean;
62
+ /** The frame's aspect ratio (width ÷ height) the joints were squared with. */
63
+ aspect: number;
64
+ };
65
+ export type CreateBodyMoveFrameOptions = {
66
+ /** The tracker input is mirrored (the selfie webcam). Default `false`. */
67
+ mirrored?: boolean;
68
+ /** Per-landmark visibility (0..1); without it every landmark counts as visible. */
69
+ visibility?: readonly number[];
70
+ /** BodyInstruction classifier thresholds to override (see `BODY_SHAPE_LIMITS`). */
71
+ limits?: Partial<BodyShapeLimits>;
72
+ /** The tracked frame's aspect ratio, width ÷ height (`useXRFeedAspect()`). Default 1. */
73
+ aspect?: number;
74
+ /** When a joint counts as in view (see `BODY_MOVE_VIEW_LIMITS`). */
75
+ view?: Partial<BodyMoveViewLimits>;
76
+ };
77
+ /**
78
+ * Analyses one tracker sample of one body for the body triggers. Pure; needs
79
+ * all 33 MediaPipe pose landmarks (`BODY_LANDMARK_COUNT`), else it throws
80
+ * (like `analyzeBodyShape`).
81
+ */
82
+ export declare const createBodyMoveFrame: (landmarks: readonly TrackerPoint[], { mirrored, visibility, limits, aspect, view }?: CreateBodyMoveFrameOptions) => BodyMoveFrame;
83
+ type LimbJoint = "Shoulder" | "Elbow" | "Wrist" | "Index" | "Hip" | "Knee" | "Ankle";
84
+ /** `"leftWrist"` for `("left", "Wrist")`: the person's own joint on that side. */
85
+ export declare const sideJoint: (side: BodySide, joint: LimbJoint) => BodyMoveJointName;
86
+ /** Whether the arm on that side (shoulder, elbow, wrist) is seen. */
87
+ export declare const armInView: (frame: BodyMoveFrame, side: BodySide) => boolean;
88
+ export {};
@@ -0,0 +1,6 @@
1
+ export { BODY_MOVE_VIEW_LIMITS, armInView, createBodyMoveFrame, sideJoint } from './frame';
2
+ export type { BodyMoveFrame, BodyMoveJointName, BodyMoveViewLimits, CreateBodyMoveFrameOptions, } from './frame';
3
+ export { BODY_MOVES, BODY_MOVE_LIMITS, BODY_MOVE_NAMES, TimedSeries, armExtension, defineBodyMove, resolveBodyMove, resolveBodyMoveLimits, } from './moves';
4
+ export type { AnyBodyMoveDefinition, BodyMoveContext, BodyMoveDefinition, BodyMoveLimits, BodyMoveName, BodyMoveRef, BodyMoveSample, BodyMoveSide, } from './moves';
5
+ export { BODY_POSE_TRIGGER_DEFAULTS, bodyTriggerStatesEqual, createBodyTrigger, resolveBodyTriggerOptions, setBodyTriggerOptions, snapshotBodyTriggerState, stepBodyTrigger, } from './trigger';
6
+ export type { BodyTriggerMachine, BodyTriggerOptions, BodyTriggerState, BodyTriggerTarget, } from './trigger';
@@ -0,0 +1,235 @@
1
+ import { BodySide } from '../body-pose';
2
+ import { GestureDetectorOptions } from '../gestures/detector';
3
+ import { OscillationTracker } from '../gestures/measures';
4
+ import { BodyMoveFrame } from './frame';
5
+ /**
6
+ * The move detectors' default thresholds. Arm moves measure in shoulder
7
+ * widths (like BodyInstruction's classifier); leg moves in torso lengths or
8
+ * against the standing shin, vertical against vertical, so distance from the
9
+ * camera and the frame's aspect ratio cancel. Read-only: tune per trigger
10
+ * with `<BodyTrigger limits={…}>`.
11
+ */
12
+ export declare const BODY_MOVE_LIMITS: Readonly<{
13
+ /** `jump`: shoulders, hips and both ankles rise at least this far above standing (torso lengths) … */
14
+ jumpRise: 0.12;
15
+ /** … and it lands when both ankles are back within this of the ground. */
16
+ jumpLand: 0.06;
17
+ /** Longer in the air than this is not a jump (the camera moved): the move ends and re-levels. */
18
+ jumpMaxAirMs: 900;
19
+ /** The standing level follows the body with this time constant (ms), so slow drift never jumps. */
20
+ jumpLevelMs: 300;
21
+ /**
22
+ * `squat`: hips down when the thigh's height falls to this × the shin's
23
+ * (standing ≈ 1, thighs level ≈ 0), on the straighter leg …
24
+ */
25
+ squatDown: 0.6;
26
+ /** … and back up (the rep ends, the next can start) above this. */
27
+ squatUp: 0.85;
28
+ /** `wave`: the forearm points up (wrist above the elbow by at least this, shoulder widths) … */
29
+ waveForearmUp: 0.25;
30
+ /** … and swings side to side by at least this between turning points … */
31
+ waveAmplitude: 0.3;
32
+ /** … this many turning points … */
33
+ waveReversals: 3;
34
+ /** … within this long (ms). */
35
+ waveWindowMs: 1500;
36
+ /** `clap`: the hands were at least this far apart (shoulder widths) … */
37
+ clapApart: 0.6;
38
+ /** … then meet within this … */
39
+ clapTogether: 0.3;
40
+ /** … in at most this long (ms). */
41
+ clapWithinMs: 250;
42
+ /** The clap ends when the hands part past this. */
43
+ clapRelease: 0.45;
44
+ /**
45
+ * `punch`: the arm was bent (shoulder → wrist ÷ upper arm + forearm, 1 =
46
+ * straight, read in 3D) below this …
47
+ */
48
+ punchBent: 0.75;
49
+ /** … then straightens past this … */
50
+ punchStraight: 0.93;
51
+ /** … within this long (ms) … */
52
+ punchWithinMs: 200;
53
+ /** … with the wrist within this of shoulder height (shoulder widths): not a raise or a drop. */
54
+ punchBand: 0.9;
55
+ /** `armFlap`: both wrists drop at least this far (shoulder widths) … */
56
+ flapStroke: 0.7;
57
+ /** … within this long (ms) … */
58
+ flapWithinMs: 500;
59
+ /** … from a top no lower than this relative to the shoulders (arms up like wings, not lowered from the front) … */
60
+ flapTop: -0.4;
61
+ /** … with both wrists out past their shoulders by at least this. */
62
+ flapOut: 0.3;
63
+ /** `kick`: the foot rises at least this far above the standing foot (torso lengths) … */
64
+ kickLift: 0.35;
65
+ /** … the knee at least this far above the standing knee … */
66
+ kickKnee: 0.15;
67
+ /**
68
+ * … and the lower leg swings up: the foot hangs below its knee by at most
69
+ * this × the standing shin (a march's foot hangs ≈ 1 below the knee) …
70
+ */
71
+ kickShin: 0.6;
72
+ /** … in at most this long from the foot leaving the ground (ms). */
73
+ kickWithinMs: 600;
74
+ /** `stepLeft` / `stepRight`: hips and feet move sideways at least this far (shoulder widths) … */
75
+ stepShift: 0.5;
76
+ /** … within this long (ms). */
77
+ stepWithinMs: 700;
78
+ /** `march`: a knee or foot rises at least this far above the other one (torso lengths) … */
79
+ marchLift: 0.2;
80
+ /** … and comes back down below this … */
81
+ marchDrop: 0.08;
82
+ /** … alternating: the other leg lifted at most this long before (ms). */
83
+ marchWithinMs: 1200;
84
+ }>;
85
+ /** The move thresholds (see `BODY_MOVE_LIMITS` for each one's meaning). */
86
+ export type BodyMoveLimits = Record<keyof typeof BODY_MOVE_LIMITS, number>;
87
+ /** Which limb a sided move (`wave`, `punch`, `kick`) watches. */
88
+ export type BodyMoveSide = BodySide | "either";
89
+ /** One measured sample: how much of the move is happening (0..1) and, for a sided move, which side. */
90
+ export type BodyMoveSample = {
91
+ value: number;
92
+ side?: BodySide | null;
93
+ };
94
+ /** What a move's `measure` gets besides the frame. */
95
+ export type BodyMoveContext = {
96
+ /** The `side` option (`"either"` when unset). */
97
+ side: BodyMoveSide;
98
+ /** `BODY_MOVE_LIMITS` with the trigger's overrides. */
99
+ limits: BodyMoveLimits;
100
+ };
101
+ /**
102
+ * A move: what it needs in view, how it turns successive frames into a
103
+ * `{ value, side }` sample (`value` ≥ 0.5 while the move is happening, for
104
+ * the default thresholds), and its lifecycle defaults. `measure` runs once
105
+ * per new tracker sample of a body in view, with per-trigger `memory` that is
106
+ * recreated whenever the body is lost or leaves view. Make your own with
107
+ * `defineBodyMove`; define it once (module scope), not per render.
108
+ */
109
+ export type BodyMoveDefinition<M = unknown> = {
110
+ name: string;
111
+ /** Short copy ("Jump"). */
112
+ label: string;
113
+ description: string;
114
+ /** `"full"`: needs the whole body (hips, knees, ankles) in view; `"upper"`: shoulders and arms. */
115
+ view: "upper" | "full";
116
+ /** The move reads a limb on one side (`wave`, `punch`, `kick`): the `side` option applies. */
117
+ sided?: boolean;
118
+ /** The `BODY_MOVE_LIMITS` keys it reads (for docs and tuning panels). */
119
+ limitKeys?: readonly (keyof BodyMoveLimits)[];
120
+ /** Lifecycle overrides of the gesture engine defaults (`DEFAULT_GESTURE_DETECTOR_OPTIONS`). */
121
+ defaults?: Partial<GestureDetectorOptions>;
122
+ createMemory: () => M;
123
+ /** Whether the body parts it needs are in view. Default: `view` (`frame.fullInView` or `frame.upperInView`). */
124
+ inView?: (frame: BodyMoveFrame, context: BodyMoveContext) => boolean;
125
+ measure: (frame: BodyMoveFrame, memory: M, nowMs: number, context: BodyMoveContext) => BodyMoveSample;
126
+ };
127
+ /** Checks and returns your own move (same contract as the built-ins). Pass it as `move`. */
128
+ export declare const defineBodyMove: <M>(definition: BodyMoveDefinition<M>) => BodyMoveDefinition<M>;
129
+ /** Time-stamped samples in a fixed ring (no per-frame allocation): windowed min / max. */
130
+ export declare class TimedSeries {
131
+ private readonly capacity;
132
+ private readonly times;
133
+ private readonly values;
134
+ private start;
135
+ private count;
136
+ constructor(capacity?: number);
137
+ clear(): void;
138
+ push(timeMs: number, value: number): void;
139
+ /** Largest value at or after `sinceMs` (−Infinity when none). */
140
+ max(sinceMs: number): number;
141
+ /** Smallest value at or after `sinceMs` (Infinity when none). */
142
+ min(sinceMs: number): number;
143
+ }
144
+ type JumpMemory = {
145
+ level: {
146
+ shoulders: number;
147
+ hips: number;
148
+ left: number;
149
+ right: number;
150
+ } | null;
151
+ lastMs: number;
152
+ airborne: boolean;
153
+ airSinceMs: number;
154
+ };
155
+ type SquatMemory = {
156
+ ready: boolean;
157
+ down: boolean;
158
+ };
159
+ type WaveMemory = {
160
+ /** The limits the trackers were built with. */
161
+ built: {
162
+ amplitude: number;
163
+ reversals: number;
164
+ windowMs: number;
165
+ };
166
+ left: OscillationTracker;
167
+ right: OscillationTracker;
168
+ sample: BodyMoveSample;
169
+ };
170
+ type ClapMemory = {
171
+ apartAtMs: number;
172
+ clapped: boolean;
173
+ };
174
+ type PunchArm = {
175
+ bentAtMs: number;
176
+ punching: boolean;
177
+ };
178
+ type PunchMemory = Record<BodySide, PunchArm>;
179
+ /**
180
+ * Arm straightness: shoulder → wrist over upper arm + forearm, in 3D
181
+ * (MediaPipe's relative depth, ×2 into tracker-x units). 1 = straight; a
182
+ * straight arm reads 1 from any view, even pointing at the camera. `null`
183
+ * when the arm is too short to read.
184
+ */
185
+ export declare const armExtension: (frame: BodyMoveFrame, side: BodySide) => number | null;
186
+ type FlapMemory = {
187
+ left: TimedSeries;
188
+ right: TimedSeries;
189
+ flapping: boolean;
190
+ };
191
+ type KickLeg = {
192
+ downAtMs: number;
193
+ kicking: boolean;
194
+ };
195
+ type KickMemory = Record<BodySide, KickLeg>;
196
+ type StepMemory = {
197
+ hips: TimedSeries;
198
+ feet: TimedSeries;
199
+ stepping: boolean;
200
+ peak: number;
201
+ peakAtMs: number;
202
+ };
203
+ type MarchMemory = {
204
+ up: Record<BodySide, boolean>;
205
+ liftedAtMs: Record<BodySide, number>;
206
+ stepping: BodySide | null;
207
+ };
208
+ /**
209
+ * The built-in moves. Arm moves need the shoulders and the arm(s) they read in
210
+ * view; leg moves (`view: "full"`) need shoulders, hips, knees and ankles in
211
+ * view and inside the frame, and never fire while they are not. Left / right
212
+ * are the person's own sides.
213
+ */
214
+ export declare const BODY_MOVES: {
215
+ readonly jump: BodyMoveDefinition<JumpMemory>;
216
+ readonly squat: BodyMoveDefinition<SquatMemory>;
217
+ readonly wave: BodyMoveDefinition<WaveMemory>;
218
+ readonly clap: BodyMoveDefinition<ClapMemory>;
219
+ readonly punch: BodyMoveDefinition<PunchMemory>;
220
+ readonly armFlap: BodyMoveDefinition<FlapMemory>;
221
+ readonly kick: BodyMoveDefinition<KickMemory>;
222
+ readonly stepLeft: BodyMoveDefinition<StepMemory>;
223
+ readonly stepRight: BodyMoveDefinition<StepMemory>;
224
+ readonly march: BodyMoveDefinition<MarchMemory>;
225
+ };
226
+ export type BodyMoveName = keyof typeof BODY_MOVES;
227
+ export declare const BODY_MOVE_NAMES: BodyMoveName[];
228
+ /** Any move definition (memory type erased). */
229
+ export type AnyBodyMoveDefinition = BodyMoveDefinition<any>;
230
+ /** A built-in move name or your own `defineBodyMove` definition. */
231
+ export type BodyMoveRef = BodyMoveName | AnyBodyMoveDefinition;
232
+ export declare const resolveBodyMove: (move: BodyMoveRef) => AnyBodyMoveDefinition;
233
+ /** `BODY_MOVE_LIMITS` with overrides (unknown keys are ignored by the moves). */
234
+ export declare const resolveBodyMoveLimits: (overrides?: Partial<BodyMoveLimits>) => BodyMoveLimits;
235
+ export {};
@@ -0,0 +1,75 @@
1
+ import { BodyPoseSpec, BodySide } from '../body-pose';
2
+ import { GestureDetectorOptions, GestureDetectorState, GestureState } from '../gestures/detector';
3
+ import { BodyMoveFrame } from './frame';
4
+ import { AnyBodyMoveDefinition, BodyMoveContext, BodyMoveLimits, BodyMoveRef, BodyMoveSide } from './moves';
5
+ /** What a body trigger fires on: a held pose or a move over time (exactly one). */
6
+ export type BodyTriggerTarget = {
7
+ /** A held pose: a `BODY_POSES` name (`"tPose"`, `"hooray"` …), a rule, a match function or a `defineBodyPose` definition. */
8
+ pose: BodyPoseSpec;
9
+ move?: undefined;
10
+ } | {
11
+ /** A move over time: a `BODY_MOVES` name (`"jump"`, `"wave"` …) or a `defineBodyMove` definition. */
12
+ move: BodyMoveRef;
13
+ pose?: undefined;
14
+ };
15
+ /** Tuning shared by poses and moves: the gesture engine's options plus the move ones. */
16
+ export type BodyTriggerOptions = Partial<GestureDetectorOptions> & {
17
+ /** Sided moves (`wave`, `punch`, `kick`): which of the person's limbs to watch. Default `"either"`. */
18
+ side?: BodyMoveSide;
19
+ /** Move thresholds to override (see `BODY_MOVE_LIMITS`). */
20
+ limits?: Partial<BodyMoveLimits>;
21
+ };
22
+ /**
23
+ * Lifecycle defaults for a pose: the match is smoothed over ~80 ms, so it
24
+ * begins after ~0.2 s held and a one-frame flicker neither ends nor restarts it.
25
+ */
26
+ export declare const BODY_POSE_TRIGGER_DEFAULTS: Partial<GestureDetectorOptions>;
27
+ /** A body trigger's state: the gesture engine's lifecycle plus what the body trigger knows. */
28
+ export type BodyTriggerState = GestureState & {
29
+ kind: "pose" | "move";
30
+ /** What it needs in view: the upper body, or the whole body (hips, knees, ankles). */
31
+ view: "upper" | "full";
32
+ /**
33
+ * Whether what it needs is in view now. A `view: "full"` trigger with
34
+ * `inView: false` cannot fire: ask the person to step back so their whole
35
+ * body shows.
36
+ */
37
+ inView: boolean;
38
+ /** The person's own side behind the current (or last) begin: the limb of a sided move, a step's direction; `null` for poses. */
39
+ side: BodySide | null;
40
+ };
41
+ /** The runner's mutable state (`stepBodyTrigger` advances it). */
42
+ export type BodyTriggerMachine = BodyTriggerState & {
43
+ pose: BodyPoseSpec | null;
44
+ move: AnyBodyMoveDefinition | null;
45
+ memory: unknown;
46
+ memoryUsed: boolean;
47
+ detector: GestureDetectorState;
48
+ options: GestureDetectorOptions;
49
+ context: BodyMoveContext;
50
+ sample: {
51
+ value: number;
52
+ confidence: number;
53
+ } | null;
54
+ sampleSide: BodySide | null;
55
+ lastSampleMs: number | null;
56
+ };
57
+ /** The lifecycle options a target resolves to (its own defaults, then the overrides). */
58
+ export declare const resolveBodyTriggerOptions: (target: BodyTriggerTarget, overrides?: Partial<GestureDetectorOptions>) => GestureDetectorOptions;
59
+ /** A fresh runner for one pose or move. Pure; drive it with `stepBodyTrigger`. */
60
+ export declare const createBodyTrigger: (target: BodyTriggerTarget, options?: BodyTriggerOptions) => BodyTriggerMachine;
61
+ /** Retune a running trigger (thresholds, side, limits) without restarting it. */
62
+ export declare const setBodyTriggerOptions: (machine: BodyTriggerMachine, target: BodyTriggerTarget, options?: BodyTriggerOptions) => void;
63
+ /**
64
+ * Advance a body trigger by one rendered frame. `frame` is the analysed body
65
+ * (`createBodyMoveFrame`), `null` when no body is tracked. `fresh` says the
66
+ * frame is a new tracker sample: moves measure only new samples (render
67
+ * frames that repeat one are passed with `fresh: false`), while the lifecycle
68
+ * (hold, cooldown, loss grace) advances every call. Mutates and returns
69
+ * `machine`; its public fields are the `BodyTriggerState`.
70
+ */
71
+ export declare const stepBodyTrigger: (machine: BodyTriggerMachine, frame: BodyMoveFrame | null, nowMs: number, fresh?: boolean) => BodyTriggerMachine;
72
+ /** Copy the public fields of a body trigger (for React state). */
73
+ export declare const snapshotBodyTriggerState: (machine: BodyTriggerState, target?: BodyTriggerState) => BodyTriggerState;
74
+ /** Change detection for publishing (`durationMs` excluded, like `gestureStatesEqual`). */
75
+ export declare const bodyTriggerStatesEqual: (a: BodyTriggerState, b: BodyTriggerState) => boolean;
@@ -32,12 +32,17 @@ type Landmark = {
32
32
  x: number;
33
33
  y: number;
34
34
  };
35
- /** MediaPipe face-mesh indices the face measurement reads. */
35
+ /**
36
+ * MediaPipe face-mesh indices the face measurement reads, named by MediaPipe's
37
+ * sides (263 = its left eye; the person's own left on an unmirrored feed, see
38
+ * GROUNDING "Left and right"). Only the distances between the pairs are read,
39
+ * so the side never matters here.
40
+ */
36
41
  export declare const FACE_CALIBRATION_LANDMARKS: Readonly<{
37
- leftTemple: 234;
38
- rightTemple: 454;
39
- leftEyeOuter: 33;
40
- rightEyeOuter: 263;
42
+ leftTemple: 454;
43
+ rightTemple: 234;
44
+ leftEyeOuter: 263;
45
+ rightEyeOuter: 33;
41
46
  }>;
42
47
  /**
43
48
  * Measure the reference face from 468+ face landmarks in feed space (what
@@ -45,7 +50,7 @@ export declare const FACE_CALIBRATION_LANDMARKS: Readonly<{
45
50
  * `null` when the landmarks are missing.
46
51
  */
47
52
  export declare const measureFaceCalibration: (landmarks: readonly Landmark[] | undefined, now?: number) => XRFaceCalibration | null;
48
- /** MediaPipe pose indices the body measurement reads. */
53
+ /** MediaPipe pose indices the body measurement reads (MediaPipe's sides; only distances are read). */
49
54
  export declare const BODY_CALIBRATION_LANDMARKS: Readonly<{
50
55
  leftShoulder: 11;
51
56
  rightShoulder: 12;
@@ -0,0 +1,9 @@
1
+ import { F as A, a as C } from "./uv-DJU_XfmN.js";
2
+ const a = 468, N = Uint16Array.from(A.flat()), o = Float32Array.from(
3
+ C.slice(0, a * 2)
4
+ );
5
+ export {
6
+ a as C,
7
+ o as a,
8
+ N as b
9
+ };
@@ -0,0 +1 @@
1
+ "use strict";const A=require("./uv-BMFt19bg.cjs"),C=468,N=Uint16Array.from(A.FACE_MESH_INDICES.flat()),_=Float32Array.from(A.FACE_MESH_UV.slice(0,C*2));exports.CANONICAL_FACE_LANDMARK_COUNT=C;exports.CANONICAL_FACE_TRIANGLES=N;exports.CANONICAL_FACE_UVS=_;
@@ -0,0 +1,63 @@
1
+ import { BodyPoseDefinition, BodyPoseHintPose, BodyPoseName, BodySide } from '../../body-pose';
2
+ import { HintLook } from '../Instruction/hintLook';
3
+ import { HintLoop } from '../Instruction/hintLoop';
4
+ import * as THREE from "three";
5
+ export type BodyPoseHintProps = {
6
+ /** A pose name, your own definition (`defineBodyPose`), or just its hint (`{ clip, arms, legs }`). */
7
+ pose: BodyPoseName | BodyPoseDefinition | BodyPoseHintPose;
8
+ /**
9
+ * The hint body: a skinned character (e.g. the SDK example `ybot.glb`'s
10
+ * scene, loaded with the meshopt decoder), facing +Z.
11
+ */
12
+ model: THREE.Object3D;
13
+ /** The model's poses, one single-key clip per pose plus the rest clip (the GLB's `animations`). */
14
+ poses: readonly THREE.AnimationClip[];
15
+ /** The clip each loop starts from. Default `"idle"`. */
16
+ idleClip?: string;
17
+ /** Height of the figure's slot in the parent's units (the hint is fitted to it). Default `1`. */
18
+ height?: number;
19
+ /**
20
+ * Draw the figure mirrored (as in a mirror): pass `true` on a mirrored
21
+ * (selfie) feed so the person's left arm is on the same screen side as theirs.
22
+ * Default `false`.
23
+ */
24
+ mirrored?: boolean;
25
+ /** Loop timing, merged over `BODY_HINT_LOOP` (2.6 s per cycle). */
26
+ loop?: HintLoop;
27
+ /** The look, merged over `BODY_HINT_LOOK` (ghost, part tints, halo, glow, highlight). */
28
+ look?: HintLook;
29
+ /** Draw the arms and legs that make the pose brighter. Default `true`. */
30
+ highlight?: boolean;
31
+ /**
32
+ * Which arm a bone belongs to, for the highlight. Default: Mixamo names
33
+ * (`LeftArm`, `LeftForeArm`, `LeftHand…`; `Right…` likewise).
34
+ */
35
+ boneSide?: (boneName: string) => BodySide | null;
36
+ /**
37
+ * Which leg a bone belongs to, for the highlight. Default: Mixamo names
38
+ * (`LeftUpLeg`, `LeftLeg`, `LeftFoot`, `LeftToe…`; `Right…` likewise).
39
+ */
40
+ legBoneSide?: (boneName: string) => BodySide | null;
41
+ /** Auto orbit: degrees to each side about the vertical (ping-pong). `0` = still. Default `25`. */
42
+ orbit?: number;
43
+ /** Seconds per orbit swing. Default `7`. */
44
+ orbitSeconds?: number;
45
+ /** Render order of the figure (keep it above the AR content it may overlap). */
46
+ renderOrder?: number;
47
+ };
48
+ /** The figure's default look (`ybot`'s parts): plain ghost, the joint rings tinted blue-grey. */
49
+ export declare const BODY_HINT_LOOK: HintLook;
50
+ /** The figure's default loop. */
51
+ export declare const BODY_HINT_LOOP: HintLoop;
52
+ /** The arm bones of a side by Mixamo name: upper arm, forearm, hand and every finger joint. */
53
+ export declare const mixamoBoneSide: (name: string) => BodySide | null;
54
+ /** The leg bones of a side by Mixamo name: thigh, shin, foot and toes. */
55
+ export declare const mixamoLegBoneSide: (name: string) => BodySide | null;
56
+ /**
57
+ * A 3D figure showing a body pose — the body instruction's demonstration.
58
+ * Blends the pose's clip from the model's `idle` clip and back, highlights the
59
+ * arms and legs that make it, and slowly orbits. Drawn as a ghost (`look`). Place it
60
+ * where the hint should appear (e.g. inside `ScreenSpaceUI`); `BodyInstruction`
61
+ * does this.
62
+ */
63
+ export declare const BodyPoseHint: ({ pose, model, poses, idleClip, height, mirrored, loop, look, highlight, boneSide, legBoneSide, orbit, orbitSeconds, renderOrder, }: BodyPoseHintProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,69 @@
1
+ import { BodyPoseDefinition, BodyPoseName, BodyShapeLimits, BodySide } from '../../body-pose';
2
+ import { HintLook } from '../Instruction/hintLook';
3
+ import { HintLoop } from '../Instruction/hintLoop';
4
+ import { InstructionOptions } from '../Instruction/InstructionCue';
5
+ import type * as THREE from "three";
6
+ export { BODY_HINT_LOOK, BODY_HINT_LOOP, BodyPoseHint, mixamoBoneSide, mixamoLegBoneSide, } from './BodyPoseHint';
7
+ export type { BodyPoseHintProps } from './BodyPoseHint';
8
+ export { useBodyPose } from './useBodyPose';
9
+ export type { UseBodyPoseOptions, UseBodyPoseResult } from './useBodyPose';
10
+ /** The instruction draws in this renderOrder band, over the AR scene (= `INSTRUCTION_RENDER_ORDER`). */
11
+ export declare const BODY_INSTRUCTION_RENDER_ORDER = 2000;
12
+ /** A standing figure needs a taller slot than the hand / face symbols (× the size preset). */
13
+ export declare const BODY_SYMBOL_ASPECT = 2.1;
14
+ /** Default nudge copy when the upper body has not been in view for `nudgeAfterMs`. */
15
+ export declare const BODY_INSTRUCTION_NUDGE_TEXT = "Step back so your upper body is in view";
16
+ /** Default nudge copy for a leg pose (`view: "full"`) when the whole body has not been in view. */
17
+ export declare const BODY_INSTRUCTION_FULL_NUDGE_TEXT = "Step back so your whole body is in view";
18
+ export type BodyInstructionProps = InstructionOptions & {
19
+ /** What to ask for: a `BODY_POSES` name or your own `defineBodyPose(…)`. */
20
+ pose: BodyPoseName | BodyPoseDefinition;
21
+ /** The hint figure: a skinned character (e.g. `ybot.glb`'s scene); see `BodyPoseHint`. */
22
+ model: THREE.Object3D;
23
+ /** The model's pose clips plus the rest clip (e.g. `ybot.glb`'s `animations`). */
24
+ poses: readonly THREE.AnimationClip[];
25
+ /** The rest clip the hint loops from. Default `"idle"`. */
26
+ idleClip?: string;
27
+ /** Instruction copy. Default: the pose's `label` ("Raise both arms"). */
28
+ text?: string;
29
+ /** Which detected body to read. Default 0. */
30
+ bodyIndex?: number;
31
+ /** Hold time to complete. Default 400 ms. */
32
+ holdMs?: number;
33
+ /** Dropouts shorter than this do not restart the hold. Default 150 ms. */
34
+ graceMs?: number;
35
+ /** Classifier thresholds to override (see `BODY_SHAPE_LIMITS`). */
36
+ limits?: Partial<BodyShapeLimits>;
37
+ /** The figure's slot height × the size preset. Default `BODY_SYMBOL_ASPECT` (2.1). */
38
+ symbolAspect?: number;
39
+ /** The hint's auto orbit, degrees to each side. Default `25`; `0` = still. */
40
+ orbit?: number;
41
+ /** The hint's look, merged over `BODY_HINT_LOOK`. */
42
+ look?: HintLook;
43
+ /** The hint's loop, merged over `BODY_HINT_LOOP`. */
44
+ loop?: HintLoop;
45
+ /** Which arm a bone belongs to, for the highlight (default: Mixamo names). */
46
+ boneSide?: (boneName: string) => BodySide | null;
47
+ /** Which leg a bone belongs to, for the highlight (default: Mixamo names). */
48
+ legBoneSide?: (boneName: string) => BodySide | null;
49
+ /** Called once when the pose is held long enough. */
50
+ onComplete?: () => void;
51
+ /** `false` hides it and pauses detection. Default `true`. */
52
+ active?: boolean;
53
+ };
54
+ /**
55
+ * A minimal on-screen instruction that asks for a body pose and waits for it:
56
+ * a looping ghost figure making the pose (`BodyPoseHint`, mirrored on a selfie
57
+ * feed) with the copy under it — the same layout and feedback as
58
+ * `HandInstruction` / `FaceInstruction`. Holding the pose for `holdMs` (with
59
+ * the upper body in view, the whole body for a leg pose) completes it; with
60
+ * the body out of view for a while it adds a nudge line. Mount inside the R3F scene (`XRScene`); it
61
+ * acquires the body model itself. Every part is customisable (`look`, `loop`,
62
+ * `textStyle`, `motion`, `renderText` …); for a fully custom one, compose
63
+ * `<Instruction>` with `useBodyPose` and any symbol.
64
+ *
65
+ * ```tsx
66
+ * <BodyInstruction pose="hooray" model={ybot.scene} poses={ybot.animations} onComplete={start} />
67
+ * ```
68
+ */
69
+ export declare const BodyInstruction: ({ active, text, ...props }: BodyInstructionProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,23 @@
1
+ import { MutableRefObject } from 'react';
2
+ import { BodyPoseSpec, BodyShape, BodyShapeLimits } from '../../body-pose';
3
+ import { InstructionDetector, InstructionHoldOptions } from '../Instruction/useInstructionHold';
4
+ export type UseBodyPoseOptions = InstructionHoldOptions & {
5
+ /** Which detected body to read. Default 0. */
6
+ bodyIndex?: number;
7
+ /** Classifier thresholds to override for this detector (see `BODY_SHAPE_LIMITS`). */
8
+ limits?: Partial<BodyShapeLimits>;
9
+ };
10
+ export type UseBodyPoseResult = InstructionDetector & {
11
+ /** The latest analysed body (`null` while none is detected) — read it in `useFrame`. */
12
+ shapeRef: MutableRefObject<BodyShape | null>;
13
+ };
14
+ /**
15
+ * Detects a body pose on the tracked body, with hold-to-complete: a
16
+ * `BODY_POSES` name, a rule over the arm and leg states, a match function `(shape) =>
17
+ * boolean` or a definition (`defineBodyPose`). Left / right are the person's
18
+ * own sides on any camera. Only counts while the upper body is in view (the
19
+ * whole body for a definition with `view: "full"`, like the leg poses).
20
+ * Returns an `InstructionDetector` (pass it to `<Instruction detector>`).
21
+ * Mount inside the R3F scene; it acquires the body model itself.
22
+ */
23
+ export declare const useBodyPose: (pose: BodyPoseSpec, { bodyIndex, limits, active, ...hold }?: UseBodyPoseOptions) => UseBodyPoseResult;
@@ -1,13 +1,21 @@
1
1
  import { PropsWithChildren } from 'react';
2
2
  import { BodyTarget } from '../../types/tracking';
3
3
  /**
4
- * MediaPipe Pose landmark indices (33 landmarks). Names follow the
5
- * person's perspective: `body.leftShoulder` is the *person's* left.
4
+ * MediaPipe Pose landmark indices (33 landmarks), as MediaPipe names the side
5
+ * (11 = its left shoulder): the person's own side on an unmirrored feed, the
6
+ * opposite on the mirrored webcam. `BodyTracker`'s `TrackingAnchor` targets
7
+ * are the person's own side on every feed (`bodyLandmarkIndex`).
6
8
  *
7
9
  * `body.neck` is synthesized at runtime as the midpoint of the two
8
10
  * shoulders (no native MediaPipe landmark exists for the neck).
9
11
  */
10
12
  export declare const BODY_LANDMARK_INDEX: Partial<Record<BodyTarget, number>>;
13
+ /**
14
+ * The pose landmark of the person's own `target` on this feed: MediaPipe's
15
+ * labels follow the image, so a sided target reads the other side's landmark
16
+ * on a mirrored feed (the front webcam) (#298).
17
+ */
18
+ export declare const bodyLandmarkIndex: (target: BodyTarget, feedMirrored: boolean) => number | undefined;
11
19
  type BodyTrackerProps = PropsWithChildren & {
12
20
  bodyIndex?: number;
13
21
  /**