@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,183 @@
1
+ ---
2
+ title: "Face Instructions"
3
+ description: "Ask for a face expression with a 3D hint face and your own copy, detect it from the face blendshapes, and complete when it is held."
4
+ sidebarTitle: "Face Instructions"
5
+ icon: "face-smile-wink"
6
+ ---
7
+
8
+ `FaceInstruction` asks the person for a face expression and waits for it. A cute, translucent 3D face
9
+ loops into the expression, your copy sits under it, and holding the expression for `holdMs` completes
10
+ it. It is the face counterpart of [Hand Instructions](/api/hand-instructions), with the same layout
11
+ and feedback. The pieces underneath are exported too: `useFaceExpression` (the detection alone) and
12
+ `FaceExpressionHint` (the face alone).
13
+
14
+ Import from `@vincentt-xr/sdk/instructions`. Everything is customisable: your own expressions,
15
+ detection logic, hint look and motion, text style, or a fully custom prompt. See
16
+ [Instructions](/api/instructions).
17
+
18
+ ## Quick start
19
+
20
+ ```tsx
21
+ import { useLoader } from "@react-three/fiber";
22
+ import { MeshoptDecoder } from "three/examples/jsm/libs/meshopt_decoder.module.js";
23
+ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
24
+ import { FaceInstruction } from "@vincentt-xr/sdk/instructions";
25
+
26
+ const SmileToStart = ({ onStart }: { onStart: () => void }) => {
27
+ // face-v1.glb is meshopt-compressed, so the loader needs the meshopt decoder.
28
+ const face = useLoader(GLTFLoader, faceUrl, (loader) => loader.setMeshoptDecoder(MeshoptDecoder));
29
+ return (
30
+ <FaceInstruction
31
+ expression="smile"
32
+ text="Smile to start"
33
+ model={face.scene}
34
+ onComplete={onStart}
35
+ />
36
+ );
37
+ };
38
+ ```
39
+
40
+ Mount it inside `XRScene`. It acquires the face model itself, so you don't need a `FaceTracker`, and
41
+ draws over the AR content in its own screen-space layer (`INSTRUCTION_RENDER_ORDER` = 2000 and up).
42
+ Detection reads MediaPipe's face blendshapes.
43
+
44
+ ## `FaceInstruction`
45
+
46
+ | Prop | Default | What it does |
47
+ | ---------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------- |
48
+ | `expression` | — | What to ask for: a `FACE_EXPRESSIONS` name or your own `defineFaceExpression(…)`. |
49
+ | `model` | — | The hint face: morph targets named like the expressions (e.g. `face-v1.glb`'s scene). |
50
+ | `text` | the expression's `label` | Your copy, in any language. Long text shrinks to fit. |
51
+ | `doneText` | keep `text` | Copy shown once completed, while it fades out. |
52
+ | `nudgeText` | `"Show your face to the camera"` | Second line after `nudgeAfterMs` with no face in view; the hint pulses. `null` turns it off. |
53
+ | `nudgeAfterMs` | `3000` | How long without a face before the nudge. |
54
+ | `faceIndex` | `0` | Which detected face to read. |
55
+ | `holdMs` | `400` | How long the expression must be held. |
56
+ | `graceMs` | `150` | Dropouts shorter than this don't restart the hold. |
57
+ | `size` | `"md"` | `"sm"`, `"md"`, `"lg"`: 10 / 14 / 19 % of the screen height; or a fraction of it. |
58
+ | `placement` | `"center"` | `"top"`, `"center"` or `"bottom"`. |
59
+ | `offset` | `[0, 0]` | Shift from the placement, in half-screens. |
60
+ | `orbit` | `30` | The hint's auto orbit, degrees to each side. `0` holds it still. |
61
+ | `look` | `FACE_HINT_LOOK` | The hint's look, merged over the default: ghost, per-part tints, halo, glow, material. |
62
+ | `loop` | `FACE_HINT_LOOP` | The hint's loop: `seconds`, `hold`, `from`, `easing`. |
63
+ | `color` | `"#ffffff"` | Text colour, with a soft dark shadow so it reads on any camera feed. |
64
+ | `textStyle` … | — | `textStyle`, `nudgeTextStyle`, `renderText`, `motion`, `layout`: see [Instructions](/api/instructions). |
65
+ | `onComplete` | — | Called once when the expression is held long enough. |
66
+ | `onStatusChange` | — | Called once with the first status, then on every change. |
67
+ | `hideOnComplete` | `true` | Fade out after completing. A small pop and a white ring play either way. |
68
+ | `active` | `true` | `false` hides it and pauses detection. |
69
+
70
+ `onStatusChange` reports an `InstructionStatus`:
71
+
72
+ - `"waiting"`: no face in view.
73
+ - `"detected"`: a face in view, not making the expression.
74
+ - `"holding"`: making it; the hold is running.
75
+ - `"done"`: completed.
76
+
77
+ ## Expressions
78
+
79
+ | Name | Default copy | Recognised when (MediaPipe blendshapes, 0..1) |
80
+ | ------------ | ------------------ | ----------------------------------------------------------------------------- |
81
+ | `smile` | Give a big smile | `mouthSmileLeft` and `mouthSmileRight` ≥ 0.45 |
82
+ | `wink` | Wink at the camera | one `eyeBlink` ≥ 0.55 and the other ≤ 0.3 (either eye) |
83
+ | `surprised` | Look surprised | `jawOpen` ≥ 0.35 and `browInnerUp` ≥ 0.4 |
84
+ | `kiss` | Blow a kiss | `mouthPucker` ≥ 0.5 and `jawOpen` ≤ 0.3 |
85
+ | `puffCheeks` | Puff your cheeks | `cheekPuff` ≥ 0.3 |
86
+ | `frown` | Frown | `browDownLeft` and `browDownRight` ≥ 0.4 |
87
+ | `scrunch` | Scrunch your face | both `noseSneer` ≥ 0.3, or both `eyeSquint` ≥ 0.45 with both `browDown` ≥ 0.3 |
88
+
89
+ Several can match at once: a scrunch usually also counts as a frown.
90
+
91
+ ## Detection only: `useFaceExpression`
92
+
93
+ ```tsx
94
+ import { useFaceExpression } from "@vincentt-xr/sdk/instructions";
95
+
96
+ const { status, holdRef, matchedRef, faceRef, isInView, reset } = useFaceExpression("wink", {
97
+ holdMs: 400,
98
+ onComplete: () => unlock(),
99
+ });
100
+ ```
101
+
102
+ `status` (`"waiting"` → `"holding"` → `"done"`) re-renders only when it changes. Read
103
+ `holdRef.current.progress` (0..1) and `faceRef.current` (the latest `FaceInfo`, or `null`) inside
104
+ `useFrame`. `reset()` asks again. The result is an `InstructionDetector`, so it can drive a custom
105
+ `<Instruction>`.
106
+
107
+ A rule, a match function `(blendshapes, face) => boolean` or a definition works anywhere an
108
+ expression name does. A `FaceExpressionRule` has:
109
+
110
+ - `atLeast`: per blendshape, the minimum score.
111
+ - `atMost`: per blendshape, the maximum score.
112
+ - `anyOf`: sub-rules, one of which must pass.
113
+
114
+ ```tsx
115
+ useFaceExpression({ atLeast: { jawOpen: 0.6 }, atMost: { mouthSmileLeft: 0.2 } });
116
+ useFaceExpression((b) => (b.mouthSmileLeft ?? 0) - (b.mouthSmileRight ?? 0) > 0.4); // a half smile
117
+ ```
118
+
119
+ The checks are pure: `matchFaceExpression(face.blendshapes, nameOrRule)` and
120
+ `matchingFaceExpressions(face.blendshapes)`.
121
+
122
+ ## The hint face: `FaceExpressionHint`
123
+
124
+ ```tsx
125
+ <FaceExpressionHint expression="surprised" model={face.scene} height={0.4} />
126
+ ```
127
+
128
+ The face alone, for your own layout. It is fitted to `height` (parent units) and plays the
129
+ expression's morph target (`FACE_EXPRESSIONS[name].hint.target`, or pass `expression={{ target }}`,
130
+ or a weighted mix `expression={{ targets: { surprised: 1, wink: 1 } }}`)
131
+ from the idle face and back, while slowly orbiting side to side. The default look:
132
+
133
+ - **Ghost:** translucent white with a brighter rim, the same as the hand hint.
134
+ - **Tinted features:** each part is tinted by its material name (`iris`, `brow`, `lash`, `lip`,
135
+ `mouth_inside`, `tongue`, `sparkle`, `eye_white`), so the expression reads at small size.
136
+ - **Halo:** a soft dark edge so it reads on light backgrounds (`look.halo`).
137
+ - **Glow:** a soft light from behind the head, brightening as the expression forms (`look.glow`). It
138
+ is a separate disc behind the face, so it never shows as inner layers.
139
+
140
+ `look` is merged over `FACE_HINT_LOOK` (retint a part with `look.parts.iris`, drop a tint with
141
+ `null`, `false` turns a layer off, `look.material` replaces the ghost). A custom face works if its meshes carry morph targets named like the
142
+ expressions and it faces +Z.
143
+
144
+ ## The example model
145
+
146
+ `assets-src/faces/face-v1.blend` and `build_face.py` (README beside them) build the face from scratch,
147
+ with no third-party asset. The model is one mesh with nine materials and one fixed morph target per
148
+ expression: `smile`, `wink`, `surprised`, `kiss`, `puffCheeks`, `frown`, `scrunch`. The idle face is
149
+ the base shape, and the cheek blush is in `COLOR_0`.
150
+
151
+ Each expression is computed exactly rather than mixed from smaller keys, so the eyelids never cut
152
+ through the eyes. The raw export is ~1.8 MB; `gltf-transform meshopt` brings it to ~255 KB (~105 KB
153
+ gzipped) with every shape within 0.02 mm.
154
+
155
+ ## Example
156
+
157
+ `/face-instructions` covers:
158
+
159
+ - every expression as a chip, and a sequence mode that moves to the next expression when one
160
+ completes;
161
+ - text, nudge, size, placement and hold-time controls;
162
+ - a live readout of the status, the blendshapes the rules read, and the matching expressions.
163
+
164
+ ## Manual visual test plan
165
+
166
+ Open `/face-instructions`.
167
+
168
+ 1. **Every hint reads**: step through all seven chips. The face loops into each expression: closed
169
+ happy eyes and an open smile, a left wink, wide eyes with an O, a pucker, puffed cheeks (clearest
170
+ mid-orbit), slanted brows with a downturned mouth, squinted slits. It stays inside its slot through
171
+ the orbit.
172
+ 2. **Looks**: the ghost is translucent with no back layers showing through, the eyes, brows and
173
+ mouth stay clear, and the halo separates it from a white shirt.
174
+ 3. **Detection**: on the webcam, make each expression. The readout's matches list it and the status
175
+ goes `holding` → `done`. A resting face matches nothing; a wink with either eye works; blinking
176
+ both eyes is not a wink.
177
+ 4. **Completion**: on done, a small pop and a white ring play. With sequence on, it fades out and the
178
+ next expression comes in.
179
+ 5. **Nudge**: turn away for 3 s. The second line fades in and the hint pulses; it fades out when your
180
+ face is back. With the nudge off it never appears.
181
+ 6. **Copy and layout**: type custom text, switch sizes and top / center / bottom placement. Nothing
182
+ overlaps the screen edge.
183
+ 7. **Hands unchanged**: `/hand-instructions` looks and behaves as before (both use the same layout).
@@ -0,0 +1,196 @@
1
+ ---
2
+ title: "Face Liquify"
3
+ description: "2D liquify on the live face: bigger eyes, a slimmer jaw, a smile, a swirl. Eleven presets by weight, your own warps on named face points, every tracked face, with makeup, glasses and hats warping along."
4
+ sidebarTitle: "Face Liquify"
5
+ icon: "face-grin-stars"
6
+ ---
7
+
8
+ `FaceLiquify` reshapes faces on screen with local 2D warps, like a liquify brush that follows the
9
+ face.
10
+
11
+ - **Everything on the face warps together.** It warps the picture after everything 3D is drawn: the
12
+ camera, makeup and lips, face effects, glasses, hats and earrings.
13
+ - **Screen UI stays sharp.** `ScreenImage`, `ScreenText` and other screen UI draw after it.
14
+ - **Weight 0 is the untouched image**, byte for byte.
15
+
16
+ Import from `@vincentt-xr/sdk/face-effects`.
17
+
18
+ ## Quick start
19
+
20
+ ```tsx
21
+ import { VideoBackground, XRScene } from "@vincentt-xr/sdk";
22
+ import { FaceLiquify } from "@vincentt-xr/sdk/face-effects";
23
+
24
+ <XRScene>
25
+ <VideoBackground />
26
+ <FaceLiquify weights={{ bigEyes: 1, slimJaw: 1 }} />
27
+ </XRScene>;
28
+ ```
29
+
30
+ It starts the face model itself; no `FaceTracker` is needed.
31
+
32
+ ## FaceLiquify or FaceWarp3D?
33
+
34
+ | | `FaceLiquify` | [`FaceWarp3D`](/api/face-warp-3d) |
35
+ | --------- | ----------------------------------------------------------------- | ------------------------------------------------------- |
36
+ | How | 2D warps of the screen image around the face | Blend shapes on the face mesh, wearing the camera image |
37
+ | Warps | Everything drawn on the face: makeup, face effects, accessories | The face surface; makeup nested in it rides it |
38
+ | Authoring | Presets and warps in code, no model | Shape keys sculpted in Blender |
39
+ | Best for | Beauty tweaks, cartoon eyes and mouths, swirls, quick fun filters | Character proportions that follow the face in 3D |
40
+
41
+ They combine: the liquify warps the `FaceWarp3D` face too.
42
+
43
+ ## Presets and weights
44
+
45
+ `weights` sets each preset from 0 to 3:
46
+
47
+ - **1** is a subtle, natural look.
48
+ - **2** is clearly stylised.
49
+ - **3** is the strongest cartoon look before the image would fold over itself.
50
+
51
+ There are no negative weights; out-of-range values clamp.
52
+
53
+ | Preset | Does |
54
+ | -------------- | -------------------------------- |
55
+ | `bigEyes` | Magnifies both eyes |
56
+ | `smallNose` | Shrinks the nose |
57
+ | `bigMouth` | Magnifies the mouth |
58
+ | `smile` | Lifts both mouth corners |
59
+ | `chubbyCheeks` | Puffs both cheeks |
60
+ | `slimJaw` | Pushes both jaw angles in and up |
61
+ | `slimFace` | Pushes both sides of the face in |
62
+ | `longChin` | Pulls the chin down |
63
+ | `bigForehead` | Magnifies the forehead |
64
+ | `bigHead` | Magnifies the whole face |
65
+ | `swirl` | Twists the face about its centre |
66
+
67
+ `weight` (0..1) fades everything at once, linearly. Pass a ref to animate it without re-rendering:
68
+
69
+ ```tsx
70
+ const amount = useRef(0);
71
+ useFrame(({ clock }) => {
72
+ amount.current = (1 - Math.cos(clock.elapsedTime * 1.6)) / 2;
73
+ });
74
+ <FaceLiquify weights={{ bigEyes: 3 }} weight={amount} />;
75
+ ```
76
+
77
+ `weights` takes a ref too.
78
+
79
+ ## Your own warps
80
+
81
+ `warps` adds warps by name; set their weight in `weights` (a custom warp without a weight draws as
82
+ authored, at weight 3).
83
+
84
+ ```tsx
85
+ <FaceLiquify
86
+ warps={{
87
+ pointyChin: { kind: "stretch", at: "chin", radius: 0.6, strength: 0.8, direction: [0, -1] },
88
+ elfEars: {
89
+ kind: "push",
90
+ at: "leftFaceSide",
91
+ offset: [0.2, 0.6],
92
+ radius: 0.4,
93
+ strength: 0.7,
94
+ direction: [0.6, 1],
95
+ mirror: true,
96
+ },
97
+ }}
98
+ weights={{ pointyChin: 2, elfEars: 3 }}
99
+ />
100
+ ```
101
+
102
+ | Field | Meaning |
103
+ | ----------- | -------------------------------------------------------------------------------------------------------------------- |
104
+ | `kind` | `bulge` (magnify), `pinch` (shrink), `push` (move along `direction`), `stretch` (magnify along `direction`), `swirl` |
105
+ | `at` | A named point (below) or `{ landmark: n }`, a MediaPipe face landmark |
106
+ | `offset` | From `at`, in eye distances: x toward the person's own left, y up the face |
107
+ | `radius` | The circle it changes, in eye distances (the 3D distance between the eye centres) |
108
+ | `strength` | 0..1: the share of the kind's limit at weight 3. At 1 it is the most that kind can do without folding |
109
+ | `direction` | `push` and `stretch`: the way the content moves, in face axes. Default up the face |
110
+ | `clockwise` | `swirl`: turn the other way |
111
+ | `mirror` | Also apply it on the other side of the face |
112
+
113
+ Named points: `leftEye`, `rightEye`, `noseTip`, `noseBridge`, `mouth`, `leftMouthCorner`,
114
+ `rightMouthCorner`, `chin`, `leftJaw`, `rightJaw`, `leftCheek`, `rightCheek`, `leftFaceSide`,
115
+ `rightFaceSide`, `forehead`, `faceCenter`. Left and right are the person's own sides on every feed.
116
+
117
+ Warps apply one after another, so together they never fold either. A face holds at most 32 warps.
118
+ Memoise the `warps` object: a new object re-resolves the warps.
119
+
120
+ ## Faces, fades and turned heads
121
+
122
+ - **Every tracked face** warps, up to four, each its own pass. `faceIndex` picks one; `numFaces` sets
123
+ how many faces the face model tracks.
124
+ - **Fades:** a face fades in over 150 ms when found, holds through a dropout of up to 250 ms, then
125
+ fades out over 120 ms.
126
+ - **Turned heads:** a warp on one side of the face fades as that side turns away, so the far cheek
127
+ never smears over the nose.
128
+ - **Smoothing:** landmarks are smoothed as face swap's are (`smoothing`, default 0.35; 0 is raw).
129
+
130
+ ## Hands in front (experimental)
131
+
132
+ With `HandCutout` in the scene, a hand over the face stays sharp: hand pixels are never warped, and a
133
+ warp never pulls a hand into the face.
134
+
135
+ ```tsx
136
+ import { HandCutout, HandTracker } from "@vincentt-xr/sdk/tracking";
137
+
138
+ <>
139
+ <HandTracker>
140
+ <HandCutout />
141
+ </HandTracker>
142
+ <FaceLiquify weights={{ bigMouth: 2 }} />
143
+ </>;
144
+ ```
145
+
146
+ Without `HandCutout`, a hand over the face warps with it.
147
+
148
+ ## Props
149
+
150
+ | Prop | Default | Meaning |
151
+ | ------------- | ------------------ | ----------------------------------------------------------------------------- |
152
+ | `weights` | `{}` (nothing) | Preset and custom-warp weights by name, 0..3, or a ref read every frame |
153
+ | `warps` | none | Your own warps by name |
154
+ | `weight` | 1 | Overall fade 0..1, or a ref |
155
+ | `faceIndex` | every tracked face | Only this face (default: the enclosing `FaceTracker`'s face, else every face) |
156
+ | `numFaces` | 1 | Faces the face model tracks when this starts it |
157
+ | `smoothing` | 0.35 | Landmark smoothing 0..1 |
158
+ | `active` | true | False: no model, no copy, nothing drawn |
159
+ | `debug` | false | Draws each warp's circle and direction, and the face's points |
160
+ | `renderOrder` | 998 | The pass's render order |
161
+
162
+ ## Limits
163
+
164
+ - **Draw order.** The warp draws at render order 998. Content drawn after it stays sharp: screen UI
165
+ (999+), a transparent mesh placed directly inside a tracker (wrap it in a `<group>` to warp it),
166
+ your own content at 998 or above.
167
+ - **Opaque screen UI** (`transparent={false}`) draws before it and warps.
168
+ - **Render targets.** Multisampled or float targets (effect composers), WebXR and multi-target passes
169
+ are drawn unwarped, with one console warning.
170
+ - **Cost.** Each face copies and redraws only its warp area. Check phone performance before shipping a
171
+ multi-face effect.
172
+
173
+ ## Example
174
+
175
+ `/face-warp` in the SDK playground, mode "2D liquify", has the preset sliders, a custom-warp editor
176
+ that shows the code to paste, an animate toggle, one or two faces, hands in front and the debug
177
+ circles. Settings are in the URL: `?lq=bigEyes:1,smile:2`, `?lqdebug=1`, `?lqanim=1`,
178
+ `?lqfaces=2`, `?hands=0`. Mode "both" adds the 3D shape keys under the liquify.
179
+
180
+ ## Manual visual test plan
181
+
182
+ Open `/face-warp` on the webcam.
183
+
184
+ 1. **Weight 0** (all presets off): the image is untouched. No edge, band or shimmer around the face.
185
+ 2. **Each preset at 1, then 3**: 1 looks natural, 3 is a strong cartoon. No tearing, no fold, no hard
186
+ circle edge.
187
+ 3. **Sides**: with debug on, the circles sit on your own eyes, mouth corners, jaw and chin, and follow
188
+ tilt and turn.
189
+ 4. **Turned head**: turn far to one side with `chubbyCheeks` at 3. The far cheek fades instead of
190
+ smearing over the nose.
191
+ 5. **Dropout**: cover the camera for a moment. The warp holds briefly, then fades out; it fades back
192
+ in when you reappear.
193
+ 6. **Hands**: with hands in front, put a hand over your mouth with `bigMouth` at 3. The hand keeps its
194
+ real size, with no hand colour spreading into the face. Show a hand away from your face: no hole
195
+ appears in the warp.
196
+ 7. **Two faces**: faces "two" on the two-people clip warps both people.
@@ -108,14 +108,13 @@ subtracts Y while adding X/Z. `DEFAULT_FACE_MESH_TRANSFORM.position.y` is
108
108
  backwards compatibility. New scene-object work should use `FaceMeshRenderer`.
109
109
 
110
110
  ```tsx
111
- import { CanonicalFaceMeshRenderer, FACE_WARP_3D_PRESET } from "@vincentt-xr/sdk/face-effects";
111
+ import { CanonicalFaceMeshRenderer } from "@vincentt-xr/sdk/face-effects";
112
112
 
113
113
  <CanonicalFaceMeshRenderer
114
114
  materialType="shader"
115
115
  shaderPreset="originalFace"
116
116
  textureMap="none"
117
117
  alphaMap="canonical"
118
- faceWarp3D={FACE_WARP_3D_PRESET}
119
118
  />;
120
119
  ```
121
120
 
@@ -126,8 +125,6 @@ import { CanonicalFaceMeshRenderer, FACE_WARP_3D_PRESET } from "@vincentt-xr/sdk
126
125
 
127
126
  ## FaceWarp3D
128
127
 
129
- `FACE_WARP_3D_PRESET`, `DEFAULT_FACE_WARP_3D_SETTINGS`, and
130
- `FaceWarp3DSettings` cover face, forehead, cheek, eye, nose, mouth, jaw, and
131
- chin proportions with normalized values around zero. Use `faceWarp3D` on
132
- `CanonicalFaceMeshRenderer` or `FaceMeshRenderer` settings instead of writing a
133
- second landmark deformation path.
128
+ To reshape the face (bigger eyes, a longer nose), use [`FaceWarp3D`](/api/face-warp-3d). It applies
129
+ blend shapes on the live face, with the camera image itself as the texture. It replaces the old
130
+ proportion sliders and `CanonicalFaceMeshRenderer`'s `faceWarp3D` prop.
@@ -0,0 +1,117 @@
1
+ ---
2
+ title: "Face Morph"
3
+ description: "The person's face morphs into another shape (a sphere, a cube, a character), wearing their live camera face all the way."
4
+ sidebarTitle: "Face Morph"
5
+ icon: "wand-magic-sparkles"
6
+ ---
7
+
8
+ `FaceMorph` morphs the person's face into another shape: a sphere, a cube, or a character. The shape
9
+ wears their live camera face all the way, as in Snap Lens Studio's Face Morph.
10
+
11
+ - `weight` 0 is the live face itself, so the image is unchanged.
12
+ - `weight` 1 is the shape, which still moves with the person's expression.
13
+
14
+ Animate the weight for the transformation.
15
+
16
+ It is part of the face-character pipeline ([#194](https://github.com/vincentt-xr/sdk/issues/194)).
17
+ Import from `@vincentt-xr/sdk/face-effects`.
18
+
19
+ ## Quick start
20
+
21
+ ```tsx
22
+ import { FaceMorph } from "@vincentt-xr/sdk/face-effects";
23
+ import { FaceTracker } from "@vincentt-xr/sdk/tracking";
24
+
25
+ <FaceTracker>
26
+ <FaceMorph shape="sphere" weight={0.8} />
27
+ </FaceTracker>;
28
+ ```
29
+
30
+ ## FaceMorph or FaceWarp3D?
31
+
32
+ `FaceMorph` turns the face into another object (a ball, a box, a stylised character) that wears the camera
33
+ face. To reshape the person's real face instead (bigger eyes, a longer nose, a cartoon's proportions,
34
+ photoreal, with their own hair and skin), use [`FaceWarp3D`](/api/face-warp-3d). On a realistic head model,
35
+ `FaceMorph` shows the model's own material on the skull and ears, while `FaceWarp3D` keeps the person's
36
+ real hair. Use one face effect per face.
37
+
38
+ ## Shapes
39
+
40
+ - **Built-in `"sphere"` and `"cube"`.** These are the face itself, with the eyes and mouth closed
41
+ over, subdivided and pushed out onto the shape. They fade out at the edge of the face.
42
+ - **Your own model**, authored in the canonical head frame (centimetres, as for
43
+ [`ExternalFaceMesh`](/api/external-face-mesh)). Two things matter:
44
+
45
+ - its **base positions**: where it sits on a face. These bind it.
46
+ - a **shape key** named `"morph"` (`morphKey`): what it becomes.
47
+
48
+ In Blender, start from a mesh fitted to the face (the basis), sculpt the shape key, and export
49
+ glTF. A model without the key is its own base. For example, facecap morphs into its own shape.
50
+
51
+ Every vertex is bound through its base pose to its closest point on the face, within `falloff` cm:
52
+
53
+ - A vertex beyond that keeps to the shape, so a skull or the back of a head stays put.
54
+ - Parts named `eye…` wear your eyes.
55
+ - Teeth keep their own material.
56
+
57
+ ## Props
58
+
59
+ | Prop | Default | What it does |
60
+ | ----------------------------------- | --------- | ---------------------------------------------------------------------------------------------------- |
61
+ | `shape` | — | `"sphere"`, `"cube"`, or a model (`THREE.Object3D`). |
62
+ | `weight` | `1` | 0 = the live face, 1 = the shape. Also a ref (`LiveValue`), read every frame. |
63
+ | `expression` | `1` | How strongly the shape takes the expression (Snap's Expression Multiplier). Also a ref. |
64
+ | `scale` | `1` | Scale of the shape around the head (Snap's External Scale). |
65
+ | `morphKey` | `"morph"` | The shape key a model morphs into. |
66
+ | `faceTexture` | `1` | How much of the camera face it wears: 0 shows the model's own material (a character's skin). |
67
+ | `region` | `"face"` | `"face"`, `"eyes"`, `"mouth"` or `"eyesAndMouth"` (see [Face Reprojection](/api/face-reprojection)). |
68
+ | `shading` | `"unlit"` | `"unlit"`: the camera's colours. `"lit"`: shaded by the scene lights. |
69
+ | `color` | `#f1c6a8` | A built-in shape's colour where it shows no face. |
70
+ | `subdivisions` | `2` | Smoothness of a built-in shape. |
71
+ | `falloff` | `[1, 3]` | How far from the face (cm, base pose) a vertex still morphs and wears it. |
72
+ | `facing`, `fps`, `unwrapResolution` | — | As for Face Reprojection. |
73
+ | rig props | — | `faceIndex`, `smoothing`, `holdMs`, `neutral` … (when it runs its own `FaceRig`). |
74
+
75
+ ## How it works
76
+
77
+ 1. **Live face.** Every frame, the live face (`FaceRigState.local`) and its expression
78
+ (`residual`) are read on the filled canonical face. The eye and mouth centres are the
79
+ averages of their rings.
80
+ 2. **Blend.** Each vertex blends from its bound point on the live face to its shape position plus
81
+ the expression, by `weight` and by how close it is to the face.
82
+ 3. **Texture.** The face texture is the reprojector's unwrap, the camera face in the canonical
83
+ layout. Each vertex reads it through its `faceUv` / `faceCoverage` attributes, so no remap pass
84
+ is needed.
85
+
86
+ **Pure pieces:** `createFaceMorphShape`, `createFaceMorphLive`, `writeFaceMorphLive` and
87
+ `stepFaceMorph`.
88
+
89
+ ## Example
90
+
91
+ `/face-morph` offers four shapes:
92
+
93
+ - the sphere;
94
+ - the cube;
95
+ - a **Lens Studio-style head**, sculpted from Snap's face + skull + ears mesh (a "chibi" shape key
96
+ with a bigger skull, puffed cheeks, a small chin and bigger ears);
97
+ - the **facecap** character.
98
+
99
+ The last two are local, git-ignored files. The page has controls for weight (or a looping
100
+ animation), expression, scale, face texture, region and shading.
101
+
102
+ ## Manual visual test plan
103
+
104
+ Open `/face-morph` on the webcam.
105
+
106
+ 1. **Weight 0**: nothing changes. The mesh is exactly your face, with no edge or band.
107
+ 2. **Sphere / cube at 1**: your face is on a ball or a box, sharp and centred. The edges fade into
108
+ the camera image.
109
+ 3. **Animate**: the face swells into the shape and back, smoothly and without popping.
110
+ 4. **Expressions**: at weight 1, open your mouth, smile, blink and raise your brows. The shape does
111
+ too, and `expression` scales it.
112
+ 5. **Lens Studio head**: the skull, cheeks and ears grow as the weight rises. Your face stays on it
113
+ and the ears stay on the head.
114
+ 6. **facecap + face texture**: lower "face texture" and your face fades into facecap's skin. Your
115
+ eyes stay on its eyeballs until it is fully faded.
116
+ 7. **Head turn and dropout**: the shape turns with the head, holds through a short dropout, hides
117
+ when the face is lost, and comes back.
@@ -31,3 +31,10 @@ inspector controls to show for the active material state.
31
31
  Geometry visibility is grouped by FaceMesh part: left eye, right eye, mouth,
32
32
  and nose. Use `CANONICAL_FACE_MESH_GEOMETRY_SPECS` when an inspector needs the
33
33
  runtime group order instead of hardcoding another list.
34
+
35
+ The `showLeftEye…` / `showRightEye…` settings are the person's own eyes on
36
+ every feed (GROUNDING "Left and right"). The mesh's `"left-eye"` /
37
+ `"right-eye"` groups are screen sides (`"left-eye"` is always the eye on the
38
+ screen's left); the renderer maps the settings onto them with
39
+ `resolveFaceMeshEyeVisibility(person, mirrored)`, which swaps them on
40
+ unmirrored feeds.