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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/GROUNDING.md +1109 -13
  2. package/dist/{DebuggerUI-BjOMr8q_.js → DebuggerUI-C-ldiozL.js} +1 -1
  3. package/dist/{DebuggerUI-B6bP6P9r.cjs → DebuggerUI-CWX5EtQv.cjs} +1 -1
  4. package/dist/FaceMeshRenderer-BEEXZwS6.cjs +158 -0
  5. package/dist/FaceMeshRenderer-UuH5sTXG.js +1322 -0
  6. package/dist/FaceRetouch-C7h7x9kd.js +683 -0
  7. package/dist/FaceRetouch-DqftT26Y.cjs +134 -0
  8. package/dist/GLTFLoader-C5q63sKO.js +1633 -0
  9. package/dist/GLTFLoader-Cb_CRwmG.cjs +1 -0
  10. package/dist/SegmentationOverlay-DQuW3dsc.js +133 -0
  11. package/dist/SegmentationOverlay-aWVod8Kl.cjs +1 -0
  12. package/dist/assets/cache.d.ts +99 -0
  13. package/dist/assets/estimate.d.ts +11 -0
  14. package/dist/assets/index.d.ts +7 -0
  15. package/dist/assets/loaders.d.ts +28 -0
  16. package/dist/assets/react.d.ts +33 -0
  17. package/dist/calibration/calibration.d.ts +70 -0
  18. package/dist/calibration/index.d.ts +6 -0
  19. package/dist/calibration/storage.d.ts +13 -0
  20. package/dist/calibration/types.d.ts +53 -0
  21. package/dist/calibration/useXRCalibration.d.ts +46 -0
  22. package/dist/camera/CameraPermissionGate.d.ts +26 -0
  23. package/dist/camera/devices.d.ts +26 -0
  24. package/dist/camera/index.d.ts +8 -0
  25. package/dist/camera/permission.d.ts +86 -0
  26. package/dist/camera/useCameraPermission.d.ts +35 -0
  27. package/dist/capabilities/detect.d.ts +45 -0
  28. package/dist/capabilities/index.d.ts +5 -0
  29. package/dist/capabilities/types.d.ts +120 -0
  30. package/dist/capabilities/useXRCapabilities.d.ts +18 -0
  31. package/dist/compat/environment.d.ts +5 -0
  32. package/dist/compat/index.d.ts +4 -0
  33. package/dist/compat/run.d.ts +18 -0
  34. package/dist/compat/scenarios.d.ts +10 -0
  35. package/dist/compat/types.d.ts +101 -0
  36. package/dist/components/BodyTracker/index.d.ts +9 -0
  37. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +33 -3
  38. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +12 -0
  39. package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
  40. package/dist/components/FaceMesh/index.d.ts +1 -1
  41. package/dist/components/GestureListener/index.d.ts +11 -0
  42. package/dist/components/HandTracker/index.d.ts +10 -0
  43. package/dist/components/HolisticTracker/index.d.ts +69 -0
  44. package/dist/components/HolisticTracker/settings.d.ts +58 -0
  45. package/dist/components/HolisticTracker/signals.d.ts +49 -0
  46. package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
  47. package/dist/components/IrisEffect/index.d.ts +51 -0
  48. package/dist/components/IrisEffect/settings.d.ts +117 -0
  49. package/dist/components/LipEffect/LipEffect.d.ts +7 -1
  50. package/dist/components/LipEffect/LipEffectMaterial.d.ts +43 -7
  51. package/dist/components/LipEffect/LipEffects.d.ts +9 -0
  52. package/dist/components/LipEffect/defaults.d.ts +27 -4
  53. package/dist/components/LipEffect/index.d.ts +11 -3
  54. package/dist/components/LipEffect/settings.d.ts +271 -0
  55. package/dist/components/LipEffect/types.d.ts +56 -9
  56. package/dist/components/LipEffect/useLipDesignTextures.d.ts +11 -0
  57. package/dist/components/LipEffect/uvGuide.d.ts +59 -0
  58. package/dist/components/PersonCutout/index.d.ts +50 -0
  59. package/dist/components/PersonCutout/personCutout.d.ts +16 -0
  60. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
  61. package/dist/components/ScreenImage/index.d.ts +3 -1
  62. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
  63. package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
  64. package/dist/components/ScreenImage/source.d.ts +6 -0
  65. package/dist/components/ScreenImage/types.d.ts +18 -0
  66. package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
  67. package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
  68. package/dist/components/SegmentationOverlay/index.d.ts +9 -0
  69. package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
  70. package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
  71. package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
  72. package/dist/components/XRProvider/index.d.ts +16 -2
  73. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
  74. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
  75. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
  76. package/dist/components/index.d.ts +3 -0
  77. package/dist/constants/index.d.ts +4 -1
  78. package/dist/contexts-CO0sd4JQ.cjs +1 -0
  79. package/dist/{contexts-ByhzppYl.js → contexts-FzlnnMYD.js} +252 -246
  80. package/dist/coordinates/feed.d.ts +52 -0
  81. package/dist/coordinates/index.d.ts +5 -0
  82. package/dist/coordinates/spaces.d.ts +49 -0
  83. package/dist/coordinates/viewport.d.ts +22 -0
  84. package/dist/coordinates/world.d.ts +15 -0
  85. package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
  86. package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
  87. package/dist/debug-ui/index.d.ts +14 -0
  88. package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
  89. package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
  90. package/dist/debug-ui/media-source.cjs +1 -1
  91. package/dist/debug-ui/media-source.js +1 -1
  92. package/dist/debug-ui/product-hotspots/index.d.ts +24 -0
  93. package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
  94. package/dist/debug-ui/xr-diagnostics/index.d.ts +25 -0
  95. package/dist/debug-ui.cjs +3 -3
  96. package/dist/debug-ui.js +2057 -1687
  97. package/dist/detector-K8aej4MB.js +59 -0
  98. package/dist/detector-ijypGtse.cjs +1 -0
  99. package/dist/entries/core.d.ts +18 -1
  100. package/dist/entries/face-effects.d.ts +11 -3
  101. package/dist/entries/low-level.d.ts +22 -3
  102. package/dist/entries/product.d.ts +11 -0
  103. package/dist/entries/tracking.d.ts +24 -1
  104. package/dist/face-effects.cjs +155 -1
  105. package/dist/face-effects.js +1134 -2197
  106. package/dist/gestures/definitions.d.ts +85 -0
  107. package/dist/gestures/detector.d.ts +87 -0
  108. package/dist/gestures/index.d.ts +8 -0
  109. package/dist/gestures/measures.d.ts +101 -0
  110. package/dist/gestures/settings.d.ts +49 -0
  111. package/dist/{getFaceInfo-C4QpCQIY.js → getFaceInfo-BkZfaQs-.js} +5 -5
  112. package/dist/{getFaceInfo-fA1bFBub.cjs → getFaceInfo-ahPxQFGu.cjs} +1 -1
  113. package/dist/hooks/selectors.d.ts +68 -1
  114. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  115. package/dist/hooks/useFaceInfo.d.ts +13 -1
  116. package/dist/hooks/useFaceInfos.d.ts +1 -1
  117. package/dist/hooks/useGesture.d.ts +32 -0
  118. package/dist/hooks/useIrisTracking.d.ts +45 -0
  119. package/dist/hooks/useXRDiagnostics.d.ts +81 -0
  120. package/dist/hooks/useXRModel.d.ts +7 -0
  121. package/dist/hooks/useXRSession/facade.d.ts +42 -2
  122. package/dist/hooks/useXRSession/index.d.ts +2 -2
  123. package/dist/hooks/useXRSession/reason.d.ts +3 -1
  124. package/dist/hooks/useXRSession/registry.d.ts +14 -0
  125. package/dist/hooks/useXRSession/store.d.ts +52 -3
  126. package/dist/index--RgGzZ6X.cjs +47 -0
  127. package/dist/{index-VJ0SJwmG.js → index-CHVbH0hz.js} +4 -4
  128. package/dist/index-CeVkgsag.cjs +1 -0
  129. package/dist/index-CnGox6Xr.js +3054 -0
  130. package/dist/{index-ByoNj0QP.js → index-CsUdQ-pn.js} +113 -111
  131. package/dist/{index-BjmTe9eM.cjs → index-DKBAh6hV.cjs} +1 -1
  132. package/dist/index-DsZwTfG0.cjs +1 -0
  133. package/dist/index-Dw6tj2Mi.js +144 -0
  134. package/dist/index-OCPjOaeP.cjs +1 -0
  135. package/dist/{index-DXT3WccE.js → index-s9pF4zkG.js} +1065 -1101
  136. package/dist/internal-BYza1h8_.cjs +1 -0
  137. package/dist/{internal-Dmk1cTXq.js → internal-vsfNQycj.js} +15 -16
  138. package/dist/internal.cjs +1 -1
  139. package/dist/internal.js +2 -2
  140. package/dist/iris/compute.d.ts +25 -0
  141. package/dist/iris/index.d.ts +4 -0
  142. package/dist/iris/lead.d.ts +19 -0
  143. package/dist/iris/types.d.ts +87 -0
  144. package/dist/landmarkMask-CbTFzBYG.js +224 -0
  145. package/dist/landmarkMask-u7es2k4X.cjs +1 -0
  146. package/dist/low-level.cjs +1 -1
  147. package/dist/low-level.js +1085 -634
  148. package/dist/main.cjs +1 -1
  149. package/dist/main.js +1519 -465
  150. package/dist/measures-9dQPdw96.js +154 -0
  151. package/dist/measures-KfJzpvod.cjs +1 -0
  152. package/dist/models/Base/index.d.ts +49 -0
  153. package/dist/models/Body/index.d.ts +1 -1
  154. package/dist/models/Face/index.d.ts +1 -1
  155. package/dist/models/Hand/GestureTracking.d.ts +1 -1
  156. package/dist/models/Hand/HandTracking.d.ts +1 -1
  157. package/dist/models/Holistic/index.d.ts +49 -0
  158. package/dist/models/Holistic/result.d.ts +68 -0
  159. package/dist/models/SemanticSegmentation/index.d.ts +31 -0
  160. package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
  161. package/dist/models/index.d.ts +2 -0
  162. package/dist/product/ProductDimensions.d.ts +16 -0
  163. package/dist/product/ProductHotspot.d.ts +16 -0
  164. package/dist/product/ProductViewer.d.ts +9 -0
  165. package/dist/product/details.d.ts +53 -0
  166. package/dist/product/index.d.ts +14 -0
  167. package/dist/product/loadModelViewer.d.ts +4 -0
  168. package/dist/product/types.d.ts +71 -0
  169. package/dist/product/useProductAr.d.ts +37 -0
  170. package/dist/product/useProductDetails.d.ts +60 -0
  171. package/dist/product.cjs +1 -0
  172. package/dist/product.js +414 -0
  173. package/dist/providers-C0Dlhh9Z.js +365 -0
  174. package/dist/providers-YNwkmNeK.cjs +62 -0
  175. package/dist/quality/XRQualityController.d.ts +25 -0
  176. package/dist/quality/controller.d.ts +33 -0
  177. package/dist/quality/index.d.ts +6 -0
  178. package/dist/quality/types.d.ts +100 -0
  179. package/dist/quality/useXRQuality.d.ts +28 -0
  180. package/dist/{renderGroups-KZk6eRiY.js → renderGroups-CN1cGFUo.js} +1 -1
  181. package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-O4KmaMl9.cjs} +1 -1
  182. package/dist/renderPasses-Cg-zqmEz.cjs +21 -0
  183. package/dist/renderPasses-NnKZVfBy.js +1460 -0
  184. package/dist/scene-object.cjs +1 -1
  185. package/dist/scene-object.js +2 -2
  186. package/dist/screenTransform-BenfCtZt.js +44 -0
  187. package/dist/screenTransform-BiXdpVf0.cjs +1 -0
  188. package/dist/segmentation-9PhSvc-R.cjs +1 -0
  189. package/dist/segmentation-CeOTKemr.js +5 -0
  190. package/dist/segmentation2d/faceMemory.d.ts +28 -0
  191. package/dist/segmentation2d/faceRegions.d.ts +24 -0
  192. package/dist/segmentation2d/index.d.ts +9 -0
  193. package/dist/segmentation2d/maskUv.d.ts +23 -0
  194. package/dist/segmentation2d/rasterize.d.ts +14 -0
  195. package/dist/segmentation2d/types.d.ts +46 -0
  196. package/dist/selectors-C5G1PMYL.js +195 -0
  197. package/dist/selectors-Du_PsVnW.cjs +1 -0
  198. package/dist/{session-CpkiK5YA.cjs → session-BBr0yN8h.cjs} +7 -7
  199. package/dist/{session-DLFN_VII.js → session-Cy0m7l7-.js} +76 -76
  200. package/dist/settings-DRR7-snV.cjs +1 -0
  201. package/dist/settings-aQk845NJ.js +73 -0
  202. package/dist/subjects/index.d.ts +2 -0
  203. package/dist/subjects/select.d.ts +62 -0
  204. package/dist/subjects/types.d.ts +55 -0
  205. package/dist/tracking-config/apply.d.ts +57 -0
  206. package/dist/tracking-config/index.d.ts +7 -0
  207. package/dist/tracking-config/resolve.d.ts +25 -0
  208. package/dist/tracking-config/storage.d.ts +8 -0
  209. package/dist/tracking-config/types.d.ts +106 -0
  210. package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
  211. package/dist/tracking.cjs +1 -1
  212. package/dist/tracking.js +1056 -383
  213. package/dist/types/compositor.d.ts +21 -0
  214. package/dist/types/holistic.d.ts +121 -0
  215. package/dist/types/index.d.ts +1 -0
  216. package/dist/types/model.d.ts +22 -2
  217. package/dist/types/nodes.d.ts +27 -2
  218. package/dist/types/segmentation.d.ts +19 -0
  219. package/dist/types/session.d.ts +41 -3
  220. package/dist/useFaceInfo-Blf7FCu3.js +303 -0
  221. package/dist/useFaceInfo-C5mO8NQY.cjs +1 -0
  222. package/dist/useXRCapabilities-B1R2ghy-.cjs +1 -0
  223. package/dist/useXRCapabilities-C68v__wB.js +30 -0
  224. package/dist/utils/fns.d.ts +6 -3
  225. package/dist/utils/integrity.d.ts +4 -1
  226. package/dist/utils/updateThrottle.d.ts +2 -0
  227. package/dist/utils/useStableUniforms.d.ts +18 -0
  228. package/docs/api/adaptive-quality.mdx +104 -0
  229. package/docs/api/asset-lifecycle.mdx +78 -0
  230. package/docs/api/camera-permission.mdx +142 -0
  231. package/docs/api/coordinate-spaces.mdx +165 -0
  232. package/docs/api/cross-camera.mdx +88 -0
  233. package/docs/api/diagnostics-calibration.mdx +97 -0
  234. package/docs/api/face-effects.mdx +6 -0
  235. package/docs/api/face-mesh.mdx +4 -2
  236. package/docs/api/gestures.mdx +173 -0
  237. package/docs/api/holistic-tracker.mdx +159 -0
  238. package/docs/api/iris-tracking.mdx +242 -0
  239. package/docs/api/multi-subject.mdx +95 -0
  240. package/docs/api/person-cutout.mdx +136 -0
  241. package/docs/api/product-ar.mdx +111 -0
  242. package/docs/api/product-details.mdx +78 -0
  243. package/docs/api/screen-space-coordinates.mdx +4 -1
  244. package/docs/api/segmentation-overlay.mdx +301 -0
  245. package/docs/api/session-lifecycle.mdx +136 -0
  246. package/docs/api/trackers.mdx +5 -0
  247. package/docs/api/tracking-config.mdx +108 -0
  248. package/docs/docs.json +23 -1
  249. package/docs/examples/lip-shaders.mdx +224 -0
  250. package/docs/guides/lip-effect-textures.mdx +292 -0
  251. package/docs/guides/lip-uv-template.png +0 -0
  252. package/docs/guides/lip-uv-template.svg +1 -0
  253. package/package.json +13 -1
  254. package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
  255. package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
  256. package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
  257. package/dist/FaceRetouch-DwbKQJAN.js +0 -551
  258. package/dist/contexts-Dr62It_K.cjs +0 -1
  259. package/dist/index-9dlAQAhy.js +0 -1462
  260. package/dist/index-BpEf2BBb.cjs +0 -1
  261. package/dist/index-CyUUurQT.cjs +0 -1
  262. package/dist/index-DCiMbxC3.cjs +0 -1
  263. package/dist/index-DpI-qo5X.cjs +0 -17
  264. package/dist/index-DyVF4vEW.js +0 -111
  265. package/dist/internal-Cq-TEQ5Y.cjs +0 -1
  266. package/dist/renderLayers-lDtL0_43.cjs +0 -1
  267. package/dist/renderLayers-zrK2pv5O.js +0 -13
  268. package/dist/renderPasses-BOoBSr8z.cjs +0 -21
  269. package/dist/renderPasses-BcquyVtu.js +0 -1500
  270. package/dist/selectors-B8H97CKA.js +0 -59
  271. package/dist/selectors-CZLKT2Iv.cjs +0 -1
  272. package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
  273. package/dist/useFaceInfo-Dk426LTu.js +0 -62
  274. package/dist/useFaceResults-CtetsO9M.js +0 -19
  275. package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
@@ -0,0 +1,683 @@
1
+ import { F as g, a as D, b as A, c as T, d as I, e as n, f as M } from "./FaceMeshRenderer-UuH5sTXG.js";
2
+ import * as f from "three";
3
+ import { jsx as F, jsxs as V } from "react/jsx-runtime";
4
+ import { useMemo as R, useEffect as X } from "react";
5
+ import { X as j } from "./index-CnGox6Xr.js";
6
+ import { u as K } from "./index-CsUdQ-pn.js";
7
+ import { useThree as Z, useFrame as q } from "@react-three/fiber";
8
+ import { u as J } from "./selectors-C5G1PMYL.js";
9
+ import { F as Q, d as $ } from "./landmarkMask-CbTFzBYG.js";
10
+ const ee = {
11
+ enabled: !1,
12
+ strength: 1,
13
+ faceWidth: 0,
14
+ faceHeight: 0,
15
+ faceRoundness: 0,
16
+ midfaceHeight: 0,
17
+ foreheadHeight: 0,
18
+ foreheadWidth: 0,
19
+ cheekboneWidth: 0,
20
+ cheekWidth: 0,
21
+ cheekHollowness: 0,
22
+ midfaceDepth: 0,
23
+ scalpHeight: 0,
24
+ headCurve: 0,
25
+ faceTwist: 0,
26
+ faceSwirl: 0,
27
+ browDistance: 0,
28
+ browHeight: 0,
29
+ browDepth: 0,
30
+ eyeSize: 0,
31
+ leftEyeSize: 0,
32
+ rightEyeSize: 0,
33
+ eyeDistance: 0,
34
+ leftEyeX: 0,
35
+ rightEyeX: 0,
36
+ leftEyeY: 0,
37
+ rightEyeY: 0,
38
+ noseSize: 0,
39
+ noseLength: 0,
40
+ mouthWidth: 0,
41
+ mouthHeight: 0,
42
+ jawWidth: 0,
43
+ chinHeight: 0
44
+ }, Me = {
45
+ ...ee,
46
+ enabled: !0,
47
+ strength: 1,
48
+ faceWidth: -0.08,
49
+ faceHeight: 0.04,
50
+ foreheadHeight: 0.04,
51
+ cheekWidth: -0.04,
52
+ eyeSize: 0.08,
53
+ eyeDistance: 0.03,
54
+ noseSize: -0.05,
55
+ noseLength: 0.03,
56
+ mouthWidth: 0.06,
57
+ mouthHeight: 0.02,
58
+ jawWidth: -0.05,
59
+ chinHeight: 0.03
60
+ }, Ee = [
61
+ { label: "Wireframe", value: g.wireframe },
62
+ { label: "Basic", value: g.basic },
63
+ { label: "Standard", value: g.standard },
64
+ { label: "Physical", value: g.physical },
65
+ { label: "Toon", value: g.toon },
66
+ { label: "Normal", value: g.normal },
67
+ { label: "Matcap", value: g.matcap },
68
+ { label: "Shader", value: g.shader }
69
+ ], Ce = [
70
+ { label: "Original Face", value: D.originalFace },
71
+ { label: "Composite", value: D.composite }
72
+ ], Fe = [
73
+ { label: "Front", value: A.front },
74
+ { label: "Back", value: A.back },
75
+ { label: "Double", value: A.double }
76
+ ], we = [
77
+ { label: "None", value: T.none },
78
+ { label: "UV Map 1", value: T.canonical },
79
+ { label: "UV Map 2", value: T.style2 }
80
+ ], Le = [
81
+ { label: "None", value: I.none },
82
+ { label: "Default Mask", value: I.canonical }
83
+ ], Ae = [
84
+ { label: "Solid", value: M.solid },
85
+ { label: "Gradient", value: M.gradient },
86
+ { label: "Image URL", value: M.imageUrl },
87
+ { label: "Media URL", value: M.mediaUrl }
88
+ ], Te = [
89
+ { label: "Normal", value: n.normal },
90
+ { label: "Add", value: n.add },
91
+ { label: "Subtract", value: n.subtract },
92
+ { label: "Multiply", value: n.multiply },
93
+ { label: "Screen", value: n.screen },
94
+ { label: "Overlay", value: n.overlay },
95
+ { label: "Soft Light", value: n.softLight },
96
+ { label: "Hard Light", value: n.hardLight },
97
+ { label: "Lighten", value: n.lighten },
98
+ { label: "Darken", value: n.darken },
99
+ { label: "Difference", value: n.difference },
100
+ { label: "Exclusion", value: n.exclusion }
101
+ ], te = ["both", "left", "right"], ae = ["shader", "image"], oe = {
102
+ eye: "both",
103
+ mode: "shader",
104
+ color: "#4fa3ff",
105
+ textureUrl: "",
106
+ tintImage: !1,
107
+ scale: 1,
108
+ opacity: 0.85,
109
+ targetFps: 0,
110
+ smoothing: 0,
111
+ leadMs: 80,
112
+ mirrored: !1,
113
+ faceIndex: 0,
114
+ holdMs: 250
115
+ }, _e = [
116
+ {
117
+ key: "eye",
118
+ label: "Eye",
119
+ type: "select",
120
+ options: te.map((e) => ({ label: e, value: e }))
121
+ },
122
+ {
123
+ key: "mode",
124
+ label: "Material",
125
+ type: "select",
126
+ options: ae.map((e) => ({ label: e, value: e }))
127
+ },
128
+ { key: "color", label: "Color / tint", type: "color" },
129
+ { key: "textureUrl", label: "Image URL (image mode)", type: "text" },
130
+ { key: "tintImage", label: "Tint image with color", type: "boolean" },
131
+ { key: "scale", label: "Scale (× iris radius)", type: "number", min: 0.2, max: 4, step: 0.05 },
132
+ { key: "opacity", label: "Opacity", type: "number", min: 0, max: 1, step: 0.05 },
133
+ { key: "targetFps", label: "Face FPS (0 = session)", type: "number", min: 0, max: 60, step: 1 },
134
+ { key: "smoothing", label: "Smoothing (0 = raw)", type: "number", min: 0, max: 60, step: 1 },
135
+ { key: "leadMs", label: "Lead between samples (ms)", type: "number", min: 0, max: 200, step: 10 },
136
+ { key: "mirrored", label: "Mirror material", type: "boolean" },
137
+ { key: "faceIndex", label: "Face index", type: "number", min: 0, max: 3, step: 1 },
138
+ { key: "holdMs", label: "Hold (ms)", type: "number", min: 0, max: 1e3, step: 10 }
139
+ ], Oe = (e) => ({
140
+ ...oe,
141
+ ...e
142
+ }), Pe = (e, t) => ({ ...e, ...t }), Y = [
143
+ "lipstick",
144
+ "gloss",
145
+ "matte",
146
+ "tint",
147
+ "metallic",
148
+ "gradient"
149
+ ], re = ["texture", "solid"], le = ["outward", "vertical", "horizontal"], ie = {
150
+ preset: "custom",
151
+ maskMode: "outer-and-inner-lips",
152
+ colorMode: "texture",
153
+ color: "#e85d75",
154
+ opacity: 0.8,
155
+ intensity: 1,
156
+ shading: 0.6,
157
+ gloss: 0.35,
158
+ roughness: 0.5,
159
+ highlightColor: "#ffffff",
160
+ gradientColor: "#ffd6de",
161
+ gradientAmount: 0,
162
+ gradientDirection: "outward",
163
+ edgeSoftness: 0.12,
164
+ innerLipColor: "#7a1f36",
165
+ innerLipAmount: 0,
166
+ innerLipWidth: 0.35,
167
+ splitLips: !1,
168
+ lowerLipColor: "#e85d75",
169
+ lowerLipOpacity: 0.8,
170
+ textureScaleX: 1,
171
+ textureScaleY: 1,
172
+ textureOffsetX: 0,
173
+ textureOffsetY: 0,
174
+ textureRotation: 0,
175
+ textureFlipX: !1,
176
+ textureFlipY: !1
177
+ }, N = {
178
+ lipstick: {
179
+ color: "#c0304f",
180
+ opacity: 0.85,
181
+ intensity: 1,
182
+ shading: 0.6,
183
+ gloss: 0.35,
184
+ roughness: 0.5,
185
+ highlightColor: "#ffffff",
186
+ gradientAmount: 0
187
+ },
188
+ gloss: {
189
+ color: "#e05a7a",
190
+ opacity: 0.7,
191
+ intensity: 1,
192
+ shading: 0.5,
193
+ gloss: 0.95,
194
+ roughness: 0.12,
195
+ highlightColor: "#ffffff",
196
+ gradientAmount: 0
197
+ },
198
+ matte: {
199
+ color: "#a8323e",
200
+ opacity: 0.92,
201
+ intensity: 1,
202
+ shading: 0.8,
203
+ gloss: 0,
204
+ roughness: 1,
205
+ highlightColor: "#ffffff",
206
+ gradientAmount: 0
207
+ },
208
+ tint: {
209
+ color: "#ff6b81",
210
+ opacity: 0.4,
211
+ intensity: 1,
212
+ shading: 0.9,
213
+ gloss: 0.1,
214
+ roughness: 0.7,
215
+ highlightColor: "#ffffff",
216
+ gradientAmount: 0
217
+ },
218
+ metallic: {
219
+ color: "#b5485a",
220
+ opacity: 0.9,
221
+ intensity: 1,
222
+ shading: 0.5,
223
+ gloss: 1,
224
+ roughness: 0.3,
225
+ highlightColor: "#f3c46b",
226
+ gradientAmount: 0
227
+ },
228
+ gradient: {
229
+ color: "#d6336c",
230
+ opacity: 0.8,
231
+ intensity: 1,
232
+ shading: 0.6,
233
+ gloss: 0.3,
234
+ roughness: 0.5,
235
+ highlightColor: "#ffffff",
236
+ gradientColor: "#f9c2cf",
237
+ gradientAmount: 0.85,
238
+ gradientDirection: "outward"
239
+ }
240
+ }, W = (e) => typeof e == "string" && Y.includes(e), i = (e, t, a, r) => typeof e == "number" && Number.isFinite(e) ? Math.min(a, Math.max(t, e)) : r, se = (e, t) => typeof e == "number" && Number.isFinite(e) ? e : t, S = (e, t) => typeof e == "string" && e.trim() ? e : t, _ = (e, t) => typeof e == "boolean" ? e : t, B = (e, t, a) => typeof t == "string" && e.includes(t) ? t : a, H = (e = {}) => {
241
+ const t = W(e.preset) ? e.preset : "custom", a = {
242
+ ...ie,
243
+ ...t === "custom" ? {} : N[t]
244
+ }, r = Object.fromEntries(
245
+ Object.entries(e).filter(([, s]) => s !== void 0)
246
+ ), o = { ...a, ...r };
247
+ return {
248
+ preset: t,
249
+ maskMode: o.maskMode === "outer-lips" ? "outer-lips" : "outer-and-inner-lips",
250
+ colorMode: B(re, o.colorMode, a.colorMode),
251
+ color: S(o.color, a.color),
252
+ opacity: i(o.opacity, 0, 1, a.opacity),
253
+ intensity: i(o.intensity, 0, 1, a.intensity),
254
+ shading: i(o.shading, 0, 1, a.shading),
255
+ gloss: i(o.gloss, 0, 1, a.gloss),
256
+ roughness: i(o.roughness, 0, 1, a.roughness),
257
+ highlightColor: S(o.highlightColor, a.highlightColor),
258
+ gradientColor: S(o.gradientColor, a.gradientColor),
259
+ gradientAmount: i(o.gradientAmount, 0, 1, a.gradientAmount),
260
+ gradientDirection: B(
261
+ le,
262
+ o.gradientDirection,
263
+ a.gradientDirection
264
+ ),
265
+ edgeSoftness: i(o.edgeSoftness, 0, 1, a.edgeSoftness),
266
+ innerLipColor: S(o.innerLipColor, a.innerLipColor),
267
+ innerLipAmount: i(o.innerLipAmount, 0, 1, a.innerLipAmount),
268
+ innerLipWidth: i(o.innerLipWidth, 0, 1, a.innerLipWidth),
269
+ splitLips: _(o.splitLips, a.splitLips),
270
+ lowerLipColor: S(o.lowerLipColor, a.lowerLipColor),
271
+ lowerLipOpacity: i(o.lowerLipOpacity, 0, 1, a.lowerLipOpacity),
272
+ textureScaleX: i(o.textureScaleX, 0.05, 20, a.textureScaleX),
273
+ textureScaleY: i(o.textureScaleY, 0.05, 20, a.textureScaleY),
274
+ textureOffsetX: i(o.textureOffsetX, -2, 2, a.textureOffsetX),
275
+ textureOffsetY: i(o.textureOffsetY, -2, 2, a.textureOffsetY),
276
+ textureRotation: se(o.textureRotation, a.textureRotation),
277
+ textureFlipX: _(o.textureFlipX, a.textureFlipX),
278
+ textureFlipY: _(o.textureFlipY, a.textureFlipY)
279
+ };
280
+ }, Ue = (e, t) => {
281
+ const a = t.preset;
282
+ if (!(a !== void 0 && a !== e.preset && W(a))) return H({ ...e, ...t });
283
+ const o = Object.fromEntries(
284
+ Object.entries(t).filter(
285
+ ([s, c]) => c !== void 0 && c !== e[s]
286
+ )
287
+ );
288
+ return H({
289
+ ...e,
290
+ ...N[a],
291
+ ...o,
292
+ preset: a
293
+ });
294
+ }, p = { min: 0, max: 1, step: 0.01 }, De = [
295
+ {
296
+ key: "preset",
297
+ label: "Preset",
298
+ type: "select",
299
+ options: [
300
+ { label: "Custom", value: "custom" },
301
+ ...Y.map((e) => ({
302
+ label: e[0].toUpperCase() + e.slice(1),
303
+ value: e
304
+ }))
305
+ ]
306
+ },
307
+ {
308
+ key: "maskMode",
309
+ label: "Mask mode",
310
+ type: "select",
311
+ options: [
312
+ { label: "Outer + inner lips (mouth cut out)", value: "outer-and-inner-lips" },
313
+ { label: "Outer lips (mouth included)", value: "outer-lips" }
314
+ ]
315
+ },
316
+ {
317
+ key: "colorMode",
318
+ label: "Color mode",
319
+ type: "select",
320
+ options: [
321
+ { label: "Design texture", value: "texture" },
322
+ { label: "Procedural (solid / gradient)", value: "solid" }
323
+ ]
324
+ },
325
+ { key: "color", label: "Tint color", type: "color" },
326
+ { key: "opacity", label: "Opacity", type: "number", ...p },
327
+ { key: "intensity", label: "Tint intensity", type: "number", ...p },
328
+ { key: "shading", label: "Skin shading", type: "number", ...p },
329
+ { key: "gloss", label: "Gloss", type: "number", ...p },
330
+ { key: "roughness", label: "Roughness", type: "number", ...p },
331
+ { key: "highlightColor", label: "Highlight color", type: "color" },
332
+ { key: "gradientColor", label: "Gradient color", type: "color" },
333
+ { key: "gradientAmount", label: "Gradient amount", type: "number", ...p },
334
+ {
335
+ key: "gradientDirection",
336
+ label: "Gradient direction",
337
+ type: "select",
338
+ options: [
339
+ { label: "Mouth line → outer edge", value: "outward" },
340
+ { label: "Bottom → top", value: "vertical" },
341
+ { label: "Left → right", value: "horizontal" }
342
+ ]
343
+ },
344
+ { key: "edgeSoftness", label: "Edge softness", type: "number", ...p },
345
+ { key: "innerLipColor", label: "Inner lip color", type: "color" },
346
+ { key: "innerLipAmount", label: "Inner lip amount", type: "number", ...p },
347
+ { key: "innerLipWidth", label: "Inner lip width", type: "number", ...p },
348
+ { key: "splitLips", label: "Separate lower lip", type: "boolean" },
349
+ { key: "lowerLipColor", label: "Lower lip color", type: "color" },
350
+ { key: "lowerLipOpacity", label: "Lower lip opacity", type: "number", ...p },
351
+ { key: "textureScaleX", label: "Texture scale X", type: "number", min: 0.1, max: 10, step: 0.05 },
352
+ { key: "textureScaleY", label: "Texture scale Y", type: "number", min: 0.1, max: 10, step: 0.05 },
353
+ { key: "textureOffsetX", label: "Texture offset X", type: "number", min: -1, max: 1, step: 0.01 },
354
+ { key: "textureOffsetY", label: "Texture offset Y", type: "number", min: -1, max: 1, step: 0.01 },
355
+ {
356
+ key: "textureRotation",
357
+ label: "Texture rotation°",
358
+ type: "number",
359
+ min: -180,
360
+ max: 180,
361
+ step: 1
362
+ },
363
+ { key: "textureFlipX", label: "Flip horizontal", type: "boolean" },
364
+ { key: "textureFlipY", label: "Flip vertical", type: "boolean" }
365
+ ], Ie = (e, t, a = new f.Matrix3()) => {
366
+ const r = (t.minU + t.maxU) / 2, o = (t.minV + t.maxV) / 2, s = t.maxU - t.minU, c = t.maxV - t.minV, v = -f.MathUtils.degToRad(e.textureRotation), h = Math.cos(v), m = Math.sin(v), b = (e.textureFlipX ? -1 : 1) / Math.max(e.textureScaleX, 1e-3), u = (e.textureFlipY ? -1 : 1) / Math.max(e.textureScaleY, 1e-3), d = b * h, x = -b * m, l = u * m, y = u * h, k = r + e.textureOffsetX * s, w = o + e.textureOffsetY * c, P = r - (d * k + x * w), L = o - (l * k + y * w);
367
+ return a.set(d, x, P, l, y, L, 0, 0, 1);
368
+ }, ne = `
369
+ varying vec2 vUv;
370
+
371
+ void main() {
372
+ vUv = uv;
373
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
374
+ }
375
+ `, ce = `
376
+ uniform sampler2D cameraTexture;
377
+ uniform sampler2D retouchMaskTexture;
378
+ uniform vec2 texelSize;
379
+ uniform float retouchAmount;
380
+ uniform float blurRadius;
381
+ uniform float detailPreservation;
382
+ uniform float blemishReduction;
383
+ uniform float blemishRadius;
384
+ uniform float previewMask;
385
+ uniform float protectLandmarks;
386
+ uniform float clipMinX;
387
+ uniform float clipMaxX;
388
+ varying vec2 vUv;
389
+
390
+ vec3 sampleCamera(vec2 uv) {
391
+ return texture2D(cameraTexture, clamp(uv, vec2(0.0), vec2(1.0))).rgb;
392
+ }
393
+
394
+ vec3 readRetouchMask(vec2 uv) {
395
+ vec4 mask = texture2D(retouchMaskTexture, uv);
396
+ float faceRegion = clamp(mask.b, 0.0, 1.0);
397
+ float softFaceRegion = min(mask.r, faceRegion);
398
+ float protectedRegion = min(mask.g, faceRegion) * protectLandmarks;
399
+ float hardProtectedRegion = step(0.08, protectedRegion);
400
+ float softRetouchRegion = softFaceRegion * (1.0 - protectedRegion);
401
+ float hardRetouchRegion = step(0.5, faceRegion) * (1.0 - hardProtectedRegion);
402
+
403
+ return vec3(
404
+ clamp(softRetouchRegion, 0.0, 1.0),
405
+ clamp(protectedRegion, 0.0, 1.0),
406
+ clamp(hardRetouchRegion, 0.0, 1.0)
407
+ );
408
+ }
409
+
410
+ float retouchCoverage(vec2 uv) {
411
+ return step(0.001, readRetouchMask(uv).x);
412
+ }
413
+
414
+ void addMaskedBlurSample(inout vec3 color, inout float weightSum, vec2 centerUv, vec2 sampleUv, float weight) {
415
+ float coverage = retouchCoverage(sampleUv);
416
+ vec3 sampleColor = mix(sampleCamera(centerUv), sampleCamera(sampleUv), coverage);
417
+ color += sampleColor * weight;
418
+ weightSum += weight;
419
+ }
420
+
421
+ vec3 maskedBlurCamera(vec2 uv, float radius) {
422
+ vec2 r = texelSize * radius;
423
+ vec3 color = sampleCamera(uv) * 0.2;
424
+ float weightSum = 0.2;
425
+
426
+ addMaskedBlurSample(color, weightSum, uv, uv + vec2(r.x, 0.0), 0.1);
427
+ addMaskedBlurSample(color, weightSum, uv, uv - vec2(r.x, 0.0), 0.1);
428
+ addMaskedBlurSample(color, weightSum, uv, uv + vec2(0.0, r.y), 0.1);
429
+ addMaskedBlurSample(color, weightSum, uv, uv - vec2(0.0, r.y), 0.1);
430
+ addMaskedBlurSample(color, weightSum, uv, uv + r, 0.075);
431
+ addMaskedBlurSample(color, weightSum, uv, uv - r, 0.075);
432
+ addMaskedBlurSample(color, weightSum, uv, uv + vec2(r.x, -r.y), 0.075);
433
+ addMaskedBlurSample(color, weightSum, uv, uv + vec2(-r.x, r.y), 0.075);
434
+ addMaskedBlurSample(color, weightSum, uv, uv + r * 2.0, 0.05);
435
+ addMaskedBlurSample(color, weightSum, uv, uv - r * 2.0, 0.05);
436
+
437
+ return color / max(weightSum, 0.001);
438
+ }
439
+
440
+ float retouchLuminance(vec3 color) {
441
+ return dot(color, vec3(0.299, 0.587, 0.114));
442
+ }
443
+
444
+ vec3 reduceBlemishes(vec3 current, vec3 source, vec3 localAverage, vec3 skinBase, float skinMask) {
445
+ float originalLum = retouchLuminance(source);
446
+ float localLum = retouchLuminance(localAverage);
447
+ float redness = max(source.r - max(source.g, source.b), 0.0);
448
+ float localRedness = max(localAverage.r - max(localAverage.g, localAverage.b), 0.0);
449
+ float excessRedness = max(redness - localRedness * 0.72, 0.0);
450
+ float darkSpot = max(localLum - originalLum, 0.0);
451
+ float contrast = length(source - localAverage);
452
+ float candidate =
453
+ smoothstep(0.012, 0.09, excessRedness) +
454
+ smoothstep(0.018, 0.13, darkSpot) +
455
+ smoothstep(0.03, 0.16, contrast);
456
+ float blemishMask = clamp(candidate * 0.72, 0.0, 1.0) * skinMask * blemishReduction;
457
+
458
+ vec3 chromaReduced = vec3(
459
+ mix(current.r, min(current.r, localAverage.r * 1.04), blemishMask),
460
+ mix(current.g, max(current.g, localAverage.g * 0.98), 0.35 * blemishMask),
461
+ mix(current.b, max(current.b, localAverage.b * 0.98), 0.35 * blemishMask)
462
+ );
463
+ vec3 texture = source - localAverage;
464
+ vec3 repaired = clamp(skinBase + texture * detailPreservation * 0.18, 0.0, 1.0);
465
+
466
+ return mix(chromaReduced, repaired, min(blemishMask * 1.15, 1.0));
467
+ }
468
+
469
+ void main() {
470
+ if (vUv.x < clipMinX || vUv.x > clipMaxX) discard;
471
+
472
+ vec3 original = sampleCamera(vUv);
473
+ vec3 masks = readRetouchMask(vUv);
474
+ float faceAlpha = max(max(masks.x, masks.y), masks.z);
475
+
476
+ if (previewMask > 0.5) {
477
+ float sharpPreview = 1.0 - step(0.001, retouchAmount + blurRadius);
478
+ float retouchPreview = mix(masks.x, masks.z, sharpPreview);
479
+ float protectedPreview = mix(masks.y, step(0.08, masks.y), sharpPreview);
480
+ vec3 facePreview = vec3(retouchPreview, 0.08, 0.08);
481
+ vec3 featurePreview = vec3(0.05, protectedPreview, 0.1);
482
+ vec3 maskPreview = max(facePreview, featurePreview);
483
+ vec3 debugColor = mix(original * 0.18, maskPreview, max(retouchPreview, protectedPreview));
484
+ gl_FragColor = vec4(debugColor, faceAlpha);
485
+ #include <colorspace_fragment>
486
+ return;
487
+ }
488
+
489
+ float effectiveBlurRadius = min(blurRadius, 12.0);
490
+ vec3 smallBlur = maskedBlurCamera(vUv, max(0.0, effectiveBlurRadius * 0.45));
491
+ vec3 largeBlur = maskedBlurCamera(vUv, max(0.0, effectiveBlurRadius));
492
+ vec3 detail = original - smallBlur;
493
+ float detailAmount = mix(detailPreservation, 0.9, masks.y);
494
+ vec3 smoothed = clamp(largeBlur + detail * detailAmount, 0.0, 1.0);
495
+ vec3 color = mix(original, smoothed, min(retouchAmount, 0.72) * masks.x);
496
+ vec3 blemishAverage = maskedBlurCamera(vUv, max(1.0, blemishRadius));
497
+ color = reduceBlemishes(color, original, blemishAverage, smoothed, masks.x);
498
+ gl_FragColor = vec4(color, faceAlpha);
499
+ #include <colorspace_fragment>
500
+ }
501
+ `, ue = ({
502
+ retouchMask: e,
503
+ retouchAmount: t,
504
+ blurRadius: a,
505
+ detailPreservation: r = 0.62,
506
+ blemishReduction: o = 0.35,
507
+ blemishRadius: s = 3,
508
+ previewMask: c,
509
+ protectLandmarks: v,
510
+ clipMinX: h = 0,
511
+ clipMaxX: m = 1,
512
+ renderOrder: b = -1e3
513
+ }) => {
514
+ const { camera: u, size: d } = Z(), x = J(), l = R(
515
+ () => ({
516
+ cameraTexture: { value: null },
517
+ retouchMaskTexture: { value: null },
518
+ texelSize: { value: new f.Vector2(1 / 1280, 1 / 720) },
519
+ retouchAmount: { value: 0 },
520
+ blurRadius: { value: 0 },
521
+ detailPreservation: { value: 0 },
522
+ blemishReduction: { value: 0 },
523
+ blemishRadius: { value: 0 },
524
+ previewMask: { value: 0 },
525
+ protectLandmarks: { value: 1 },
526
+ clipMinX: { value: 0 },
527
+ clipMaxX: { value: 1 }
528
+ }),
529
+ []
530
+ ), y = R(() => {
531
+ if (!u.isPerspectiveCamera)
532
+ return [10, 10];
533
+ const k = u, L = (k.position.z || 5) - -1, G = f.MathUtils.degToRad(k.fov), U = 2 * Math.tan(G / 2) * L;
534
+ return [U * (d.width / d.height), U];
535
+ }, [u, d]);
536
+ return q(() => {
537
+ l.cameraTexture.value = x ?? null, l.retouchMaskTexture.value = e, l.texelSize.value.set(1 / Math.max(d.width, 1), 1 / Math.max(d.height, 1)), l.retouchAmount.value = t, l.blurRadius.value = a, l.detailPreservation.value = r, l.blemishReduction.value = o, l.blemishRadius.value = s, l.previewMask.value = c ? 1 : 0, l.protectLandmarks.value = v ? 1 : 0, l.clipMinX.value = h, l.clipMaxX.value = m;
538
+ }), x ? /* @__PURE__ */ F("group", { position: [0, 0, -1], children: /* @__PURE__ */ V("mesh", { renderOrder: b, children: [
539
+ /* @__PURE__ */ F("planeGeometry", { args: y }),
540
+ /* @__PURE__ */ F(
541
+ "shaderMaterial",
542
+ {
543
+ uniforms: l,
544
+ vertexShader: ne,
545
+ fragmentShader: ce,
546
+ transparent: !0,
547
+ depthTest: !1,
548
+ depthWrite: !1,
549
+ toneMapped: !1
550
+ }
551
+ )
552
+ ] }) }) : null;
553
+ }, me = (e) => {
554
+ const t = document.createElement("canvas");
555
+ t.width = e, t.height = e;
556
+ const a = t.getContext("2d", { willReadFrequently: !1 });
557
+ if (!a) throw new Error("Unable to create face retouch mask context");
558
+ const r = new f.CanvasTexture(t);
559
+ return r.colorSpace = f.NoColorSpace, r.minFilter = f.LinearFilter, r.magFilter = f.LinearFilter, r.generateMipmaps = !1, r.needsUpdate = !0, { canvas: t, context: a, texture: r };
560
+ }, de = (e, t = Q, a = {}, r = 0) => {
561
+ const o = R(() => me(t), [t]);
562
+ return X(() => {
563
+ let s = 0;
564
+ const c = () => {
565
+ var h, m;
566
+ s = requestAnimationFrame(c);
567
+ const v = (m = (h = e == null ? void 0 : e.detectionResults) == null ? void 0 : h.faceLandmarks) == null ? void 0 : m[r];
568
+ $(o.context, v, t, a), o.texture.needsUpdate = !0;
569
+ };
570
+ return c(), () => {
571
+ cancelAnimationFrame(s);
572
+ };
573
+ }, [r, e, o.context, o.texture, a, t]), X(() => () => {
574
+ o.texture.dispose();
575
+ }, [o.texture]), { canvas: o.canvas, texture: o.texture };
576
+ }, Xe = [
577
+ { key: "skinSmoothing", label: "Skin smoothing", type: "number", min: 0, max: 1, step: 0.01 },
578
+ { key: "skinRealism", label: "Skin realism", type: "number", min: 0, max: 1, step: 0.01 },
579
+ {
580
+ key: "blemishReduction",
581
+ label: "Blemish reduction",
582
+ type: "number",
583
+ min: 0,
584
+ max: 1,
585
+ step: 0.01
586
+ },
587
+ { key: "previewMask", label: "Preview mask", type: "boolean" }
588
+ ], pe = (e) => {
589
+ const t = Number(e);
590
+ return Number.isFinite(t) ? Math.max(0, Math.round(t)) : 0;
591
+ }, he = (e, t) => {
592
+ const a = Number(t);
593
+ return Number.isFinite(a) ? Math.max(e + 1, Math.round(a)) : e + 1;
594
+ }, E = {
595
+ skinSmoothing: 0.55,
596
+ skinRealism: 0.62,
597
+ blemishReduction: 0.35,
598
+ previewMask: !1
599
+ }, C = {
600
+ blurRadius: 8,
601
+ blemishRadius: 3,
602
+ protectLandmarks: !0,
603
+ foreheadCoverage: !0
604
+ }, O = (e, t) => {
605
+ const a = Number(e);
606
+ return Number.isFinite(a) ? Math.min(1, Math.max(0, a)) : t;
607
+ }, z = (e = {}) => ({
608
+ skinSmoothing: O(e.skinSmoothing, E.skinSmoothing),
609
+ skinRealism: O(e.skinRealism, E.skinRealism),
610
+ blemishReduction: O(e.blemishReduction, E.blemishReduction),
611
+ previewMask: typeof e.previewMask == "boolean" ? e.previewMask : E.previewMask
612
+ }), Be = (e, t) => z({ ...e, ...t }), He = ({
613
+ faceIndex: e,
614
+ numFaces: t,
615
+ skinSmoothing: a,
616
+ skinRealism: r,
617
+ blemishReduction: o,
618
+ previewMask: s,
619
+ clipMinX: c = 0,
620
+ clipMaxX: v = 1,
621
+ renderOrder: h
622
+ }) => {
623
+ const m = pe(e), b = he(m, t), u = z({
624
+ skinSmoothing: a,
625
+ skinRealism: r,
626
+ blemishReduction: o,
627
+ previewMask: s
628
+ }), d = R(() => ({ numFaces: b }), [b]), { node: x } = K(
629
+ j.FACE_TRACKER,
630
+ d
631
+ ), l = R(
632
+ () => ({ foreheadCoverage: C.foreheadCoverage }),
633
+ []
634
+ ), y = de(x, void 0, l, m);
635
+ return /* @__PURE__ */ F(
636
+ ue,
637
+ {
638
+ retouchMask: y.texture,
639
+ retouchAmount: u.skinSmoothing,
640
+ blurRadius: C.blurRadius,
641
+ detailPreservation: u.skinRealism,
642
+ blemishReduction: u.blemishReduction,
643
+ blemishRadius: C.blemishRadius,
644
+ previewMask: u.previewMask,
645
+ protectLandmarks: C.protectLandmarks,
646
+ clipMinX: c,
647
+ clipMaxX: v,
648
+ renderOrder: h
649
+ }
650
+ );
651
+ };
652
+ export {
653
+ ie as D,
654
+ Me as F,
655
+ te as I,
656
+ le as L,
657
+ H as a,
658
+ oe as b,
659
+ Ie as c,
660
+ ae as d,
661
+ _e as e,
662
+ Fe as f,
663
+ Le as g,
664
+ Te as h,
665
+ re as i,
666
+ N as j,
667
+ Y as k,
668
+ De as l,
669
+ Ee as m,
670
+ W as n,
671
+ Ue as o,
672
+ Pe as p,
673
+ ee as q,
674
+ Oe as r,
675
+ Ce as s,
676
+ we as t,
677
+ E as u,
678
+ Xe as v,
679
+ He as w,
680
+ Be as x,
681
+ z as y,
682
+ Ae as z
683
+ };