@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.
- package/GROUNDING.md +1109 -13
- package/dist/{DebuggerUI-BjOMr8q_.js → DebuggerUI-C-ldiozL.js} +1 -1
- package/dist/{DebuggerUI-B6bP6P9r.cjs → DebuggerUI-CWX5EtQv.cjs} +1 -1
- package/dist/FaceMeshRenderer-BEEXZwS6.cjs +158 -0
- package/dist/FaceMeshRenderer-UuH5sTXG.js +1322 -0
- package/dist/FaceRetouch-C7h7x9kd.js +683 -0
- package/dist/FaceRetouch-DqftT26Y.cjs +134 -0
- package/dist/GLTFLoader-C5q63sKO.js +1633 -0
- package/dist/GLTFLoader-Cb_CRwmG.cjs +1 -0
- package/dist/SegmentationOverlay-DQuW3dsc.js +133 -0
- package/dist/SegmentationOverlay-aWVod8Kl.cjs +1 -0
- package/dist/assets/cache.d.ts +99 -0
- package/dist/assets/estimate.d.ts +11 -0
- package/dist/assets/index.d.ts +7 -0
- package/dist/assets/loaders.d.ts +28 -0
- package/dist/assets/react.d.ts +33 -0
- package/dist/calibration/calibration.d.ts +70 -0
- package/dist/calibration/index.d.ts +6 -0
- package/dist/calibration/storage.d.ts +13 -0
- package/dist/calibration/types.d.ts +53 -0
- package/dist/calibration/useXRCalibration.d.ts +46 -0
- package/dist/camera/CameraPermissionGate.d.ts +26 -0
- package/dist/camera/devices.d.ts +26 -0
- package/dist/camera/index.d.ts +8 -0
- package/dist/camera/permission.d.ts +86 -0
- package/dist/camera/useCameraPermission.d.ts +35 -0
- package/dist/capabilities/detect.d.ts +45 -0
- package/dist/capabilities/index.d.ts +5 -0
- package/dist/capabilities/types.d.ts +120 -0
- package/dist/capabilities/useXRCapabilities.d.ts +18 -0
- package/dist/compat/environment.d.ts +5 -0
- package/dist/compat/index.d.ts +4 -0
- package/dist/compat/run.d.ts +18 -0
- package/dist/compat/scenarios.d.ts +10 -0
- package/dist/compat/types.d.ts +101 -0
- package/dist/components/BodyTracker/index.d.ts +9 -0
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +33 -3
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +12 -0
- package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
- package/dist/components/FaceMesh/index.d.ts +1 -1
- package/dist/components/GestureListener/index.d.ts +11 -0
- package/dist/components/HandTracker/index.d.ts +10 -0
- package/dist/components/HolisticTracker/index.d.ts +69 -0
- package/dist/components/HolisticTracker/settings.d.ts +58 -0
- package/dist/components/HolisticTracker/signals.d.ts +49 -0
- package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
- package/dist/components/IrisEffect/index.d.ts +51 -0
- package/dist/components/IrisEffect/settings.d.ts +117 -0
- package/dist/components/LipEffect/LipEffect.d.ts +7 -1
- package/dist/components/LipEffect/LipEffectMaterial.d.ts +43 -7
- package/dist/components/LipEffect/LipEffects.d.ts +9 -0
- package/dist/components/LipEffect/defaults.d.ts +27 -4
- package/dist/components/LipEffect/index.d.ts +11 -3
- package/dist/components/LipEffect/settings.d.ts +271 -0
- package/dist/components/LipEffect/types.d.ts +56 -9
- package/dist/components/LipEffect/useLipDesignTextures.d.ts +11 -0
- package/dist/components/LipEffect/uvGuide.d.ts +59 -0
- package/dist/components/PersonCutout/index.d.ts +50 -0
- package/dist/components/PersonCutout/personCutout.d.ts +16 -0
- package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
- package/dist/components/ScreenImage/index.d.ts +3 -1
- package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
- package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
- package/dist/components/ScreenImage/source.d.ts +6 -0
- package/dist/components/ScreenImage/types.d.ts +18 -0
- package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
- package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
- package/dist/components/SegmentationOverlay/index.d.ts +9 -0
- package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
- package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
- package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
- package/dist/components/XRProvider/index.d.ts +16 -2
- package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
- package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
- package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/constants/index.d.ts +4 -1
- package/dist/contexts-CO0sd4JQ.cjs +1 -0
- package/dist/{contexts-ByhzppYl.js → contexts-FzlnnMYD.js} +252 -246
- package/dist/coordinates/feed.d.ts +52 -0
- package/dist/coordinates/index.d.ts +5 -0
- package/dist/coordinates/spaces.d.ts +49 -0
- package/dist/coordinates/viewport.d.ts +22 -0
- package/dist/coordinates/world.d.ts +15 -0
- package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
- package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
- package/dist/debug-ui/index.d.ts +14 -0
- package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
- package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
- package/dist/debug-ui/media-source.cjs +1 -1
- package/dist/debug-ui/media-source.js +1 -1
- package/dist/debug-ui/product-hotspots/index.d.ts +24 -0
- package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
- package/dist/debug-ui/xr-diagnostics/index.d.ts +25 -0
- package/dist/debug-ui.cjs +3 -3
- package/dist/debug-ui.js +2057 -1687
- package/dist/detector-K8aej4MB.js +59 -0
- package/dist/detector-ijypGtse.cjs +1 -0
- package/dist/entries/core.d.ts +18 -1
- package/dist/entries/face-effects.d.ts +11 -3
- package/dist/entries/low-level.d.ts +22 -3
- package/dist/entries/product.d.ts +11 -0
- package/dist/entries/tracking.d.ts +24 -1
- package/dist/face-effects.cjs +155 -1
- package/dist/face-effects.js +1134 -2197
- package/dist/gestures/definitions.d.ts +85 -0
- package/dist/gestures/detector.d.ts +87 -0
- package/dist/gestures/index.d.ts +8 -0
- package/dist/gestures/measures.d.ts +101 -0
- package/dist/gestures/settings.d.ts +49 -0
- package/dist/{getFaceInfo-C4QpCQIY.js → getFaceInfo-BkZfaQs-.js} +5 -5
- package/dist/{getFaceInfo-fA1bFBub.cjs → getFaceInfo-ahPxQFGu.cjs} +1 -1
- package/dist/hooks/selectors.d.ts +68 -1
- package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
- package/dist/hooks/useFaceInfo.d.ts +13 -1
- package/dist/hooks/useFaceInfos.d.ts +1 -1
- package/dist/hooks/useGesture.d.ts +32 -0
- package/dist/hooks/useIrisTracking.d.ts +45 -0
- package/dist/hooks/useXRDiagnostics.d.ts +81 -0
- package/dist/hooks/useXRModel.d.ts +7 -0
- package/dist/hooks/useXRSession/facade.d.ts +42 -2
- package/dist/hooks/useXRSession/index.d.ts +2 -2
- package/dist/hooks/useXRSession/reason.d.ts +3 -1
- package/dist/hooks/useXRSession/registry.d.ts +14 -0
- package/dist/hooks/useXRSession/store.d.ts +52 -3
- package/dist/index--RgGzZ6X.cjs +47 -0
- package/dist/{index-VJ0SJwmG.js → index-CHVbH0hz.js} +4 -4
- package/dist/index-CeVkgsag.cjs +1 -0
- package/dist/index-CnGox6Xr.js +3054 -0
- package/dist/{index-ByoNj0QP.js → index-CsUdQ-pn.js} +113 -111
- package/dist/{index-BjmTe9eM.cjs → index-DKBAh6hV.cjs} +1 -1
- package/dist/index-DsZwTfG0.cjs +1 -0
- package/dist/index-Dw6tj2Mi.js +144 -0
- package/dist/index-OCPjOaeP.cjs +1 -0
- package/dist/{index-DXT3WccE.js → index-s9pF4zkG.js} +1065 -1101
- package/dist/internal-BYza1h8_.cjs +1 -0
- package/dist/{internal-Dmk1cTXq.js → internal-vsfNQycj.js} +15 -16
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +2 -2
- package/dist/iris/compute.d.ts +25 -0
- package/dist/iris/index.d.ts +4 -0
- package/dist/iris/lead.d.ts +19 -0
- package/dist/iris/types.d.ts +87 -0
- package/dist/landmarkMask-CbTFzBYG.js +224 -0
- package/dist/landmarkMask-u7es2k4X.cjs +1 -0
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +1085 -634
- package/dist/main.cjs +1 -1
- package/dist/main.js +1519 -465
- package/dist/measures-9dQPdw96.js +154 -0
- package/dist/measures-KfJzpvod.cjs +1 -0
- package/dist/models/Base/index.d.ts +49 -0
- package/dist/models/Body/index.d.ts +1 -1
- package/dist/models/Face/index.d.ts +1 -1
- package/dist/models/Hand/GestureTracking.d.ts +1 -1
- package/dist/models/Hand/HandTracking.d.ts +1 -1
- package/dist/models/Holistic/index.d.ts +49 -0
- package/dist/models/Holistic/result.d.ts +68 -0
- package/dist/models/SemanticSegmentation/index.d.ts +31 -0
- package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
- package/dist/models/index.d.ts +2 -0
- package/dist/product/ProductDimensions.d.ts +16 -0
- package/dist/product/ProductHotspot.d.ts +16 -0
- package/dist/product/ProductViewer.d.ts +9 -0
- package/dist/product/details.d.ts +53 -0
- package/dist/product/index.d.ts +14 -0
- package/dist/product/loadModelViewer.d.ts +4 -0
- package/dist/product/types.d.ts +71 -0
- package/dist/product/useProductAr.d.ts +37 -0
- package/dist/product/useProductDetails.d.ts +60 -0
- package/dist/product.cjs +1 -0
- package/dist/product.js +414 -0
- package/dist/providers-C0Dlhh9Z.js +365 -0
- package/dist/providers-YNwkmNeK.cjs +62 -0
- package/dist/quality/XRQualityController.d.ts +25 -0
- package/dist/quality/controller.d.ts +33 -0
- package/dist/quality/index.d.ts +6 -0
- package/dist/quality/types.d.ts +100 -0
- package/dist/quality/useXRQuality.d.ts +28 -0
- package/dist/{renderGroups-KZk6eRiY.js → renderGroups-CN1cGFUo.js} +1 -1
- package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-O4KmaMl9.cjs} +1 -1
- package/dist/renderPasses-Cg-zqmEz.cjs +21 -0
- package/dist/renderPasses-NnKZVfBy.js +1460 -0
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/screenTransform-BenfCtZt.js +44 -0
- package/dist/screenTransform-BiXdpVf0.cjs +1 -0
- package/dist/segmentation-9PhSvc-R.cjs +1 -0
- package/dist/segmentation-CeOTKemr.js +5 -0
- package/dist/segmentation2d/faceMemory.d.ts +28 -0
- package/dist/segmentation2d/faceRegions.d.ts +24 -0
- package/dist/segmentation2d/index.d.ts +9 -0
- package/dist/segmentation2d/maskUv.d.ts +23 -0
- package/dist/segmentation2d/rasterize.d.ts +14 -0
- package/dist/segmentation2d/types.d.ts +46 -0
- package/dist/selectors-C5G1PMYL.js +195 -0
- package/dist/selectors-Du_PsVnW.cjs +1 -0
- package/dist/{session-CpkiK5YA.cjs → session-BBr0yN8h.cjs} +7 -7
- package/dist/{session-DLFN_VII.js → session-Cy0m7l7-.js} +76 -76
- package/dist/settings-DRR7-snV.cjs +1 -0
- package/dist/settings-aQk845NJ.js +73 -0
- package/dist/subjects/index.d.ts +2 -0
- package/dist/subjects/select.d.ts +62 -0
- package/dist/subjects/types.d.ts +55 -0
- package/dist/tracking-config/apply.d.ts +57 -0
- package/dist/tracking-config/index.d.ts +7 -0
- package/dist/tracking-config/resolve.d.ts +25 -0
- package/dist/tracking-config/storage.d.ts +8 -0
- package/dist/tracking-config/types.d.ts +106 -0
- package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +1056 -383
- package/dist/types/compositor.d.ts +21 -0
- package/dist/types/holistic.d.ts +121 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/model.d.ts +22 -2
- package/dist/types/nodes.d.ts +27 -2
- package/dist/types/segmentation.d.ts +19 -0
- package/dist/types/session.d.ts +41 -3
- package/dist/useFaceInfo-Blf7FCu3.js +303 -0
- package/dist/useFaceInfo-C5mO8NQY.cjs +1 -0
- package/dist/useXRCapabilities-B1R2ghy-.cjs +1 -0
- package/dist/useXRCapabilities-C68v__wB.js +30 -0
- package/dist/utils/fns.d.ts +6 -3
- package/dist/utils/integrity.d.ts +4 -1
- package/dist/utils/updateThrottle.d.ts +2 -0
- package/dist/utils/useStableUniforms.d.ts +18 -0
- package/docs/api/adaptive-quality.mdx +104 -0
- package/docs/api/asset-lifecycle.mdx +78 -0
- package/docs/api/camera-permission.mdx +142 -0
- package/docs/api/coordinate-spaces.mdx +165 -0
- package/docs/api/cross-camera.mdx +88 -0
- package/docs/api/diagnostics-calibration.mdx +97 -0
- package/docs/api/face-effects.mdx +6 -0
- package/docs/api/face-mesh.mdx +4 -2
- package/docs/api/gestures.mdx +173 -0
- package/docs/api/holistic-tracker.mdx +159 -0
- package/docs/api/iris-tracking.mdx +242 -0
- package/docs/api/multi-subject.mdx +95 -0
- package/docs/api/person-cutout.mdx +136 -0
- package/docs/api/product-ar.mdx +111 -0
- package/docs/api/product-details.mdx +78 -0
- package/docs/api/screen-space-coordinates.mdx +4 -1
- package/docs/api/segmentation-overlay.mdx +301 -0
- package/docs/api/session-lifecycle.mdx +136 -0
- package/docs/api/trackers.mdx +5 -0
- package/docs/api/tracking-config.mdx +108 -0
- package/docs/docs.json +23 -1
- package/docs/examples/lip-shaders.mdx +224 -0
- package/docs/guides/lip-effect-textures.mdx +292 -0
- package/docs/guides/lip-uv-template.png +0 -0
- package/docs/guides/lip-uv-template.svg +1 -0
- package/package.json +13 -1
- package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
- package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
- package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
- package/dist/FaceRetouch-DwbKQJAN.js +0 -551
- package/dist/contexts-Dr62It_K.cjs +0 -1
- package/dist/index-9dlAQAhy.js +0 -1462
- package/dist/index-BpEf2BBb.cjs +0 -1
- package/dist/index-CyUUurQT.cjs +0 -1
- package/dist/index-DCiMbxC3.cjs +0 -1
- package/dist/index-DpI-qo5X.cjs +0 -17
- package/dist/index-DyVF4vEW.js +0 -111
- package/dist/internal-Cq-TEQ5Y.cjs +0 -1
- package/dist/renderLayers-lDtL0_43.cjs +0 -1
- package/dist/renderLayers-zrK2pv5O.js +0 -13
- package/dist/renderPasses-BOoBSr8z.cjs +0 -21
- package/dist/renderPasses-BcquyVtu.js +0 -1500
- package/dist/selectors-B8H97CKA.js +0 -59
- package/dist/selectors-CZLKT2Iv.cjs +0 -1
- package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
- package/dist/useFaceInfo-Dk426LTu.js +0 -62
- package/dist/useFaceResults-CtetsO9M.js +0 -19
- package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var H=Object.defineProperty;var z=(t,e,r)=>e in t?H(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e,r)=>z(t,typeof e!="symbol"?e+"":e,r);const m=require("react/jsx-runtime"),n=require("react"),O=require("./selectors-Du_PsVnW.cjs"),$=require("./index-CeVkgsag.cjs"),B=require("@react-three/fiber");require("./hasFullUnitUVBounds-p1Dl0ejX.cjs");const K=({children:t,defaultCollapsed:e=!0,title:r,width:s=320})=>{const[o,a]=n.useState(e);return o?m.jsx("button",{type:"button",onClick:()=>a(!1),"aria-label":`Open ${r}`,title:`Open ${r}`,style:{position:"absolute",right:16,bottom:16,zIndex:40,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",pointerEvents:"auto"},children:"◫"}):m.jsxs("div",{style:{position:"absolute",right:16,bottom:16,zIndex:40,width:s,maxWidth:"calc(100vw - 32px)",padding:14,borderRadius:14,boxShadow:"0 12px 30px rgba(0,0,0,0.26)",backdropFilter:"blur(10px)",pointerEvents:"auto",background:"rgba(15, 23, 42, 0.78)",border:"1px solid rgba(255,255,255,0.12)",color:"#e5eefb"},children:[m.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:10},children:[m.jsx("div",{style:{fontSize:13,fontWeight:700},children:r}),m.jsx("button",{type:"button",onClick:()=>a(!0),"aria-label":`Close ${r}`,title:`Close ${r}`,style:{width:32,height:32,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(255,255,255,0.04)",color:"#e5eefb",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),t]})};class V{constructor(){i(this,"frameTimestamps",[]);i(this,"lastUpdateTime",0);i(this,"currentFPS",0);i(this,"updateInterval",500);this.lastUpdateTime=performance.now()}trackFrame(){const e=performance.now();this.frameTimestamps.push(e);const r=e-this.updateInterval;this.frameTimestamps=this.frameTimestamps.filter(s=>s>r),e-this.lastUpdateTime>=this.updateInterval&&(this.currentFPS=this.frameTimestamps.length*2,this.lastUpdateTime=e)}getFPS(){return this.currentFPS}reset(){this.frameTimestamps=[],this.lastUpdateTime=performance.now(),this.currentFPS=0}}function W(t,e=1){return t.toFixed(e)}function x(t){return t/(1024*1024)}function X(t,e){return e===0?0:t/e*100}class J{constructor(e=1e3){i(this,"intervalId",null);i(this,"memoryUsage",null);i(this,"updateInterval");i(this,"isSupported",!1);this.updateInterval=e,this.checkSupport()}checkSupport(){const e=performance;this.isSupported="memory"in e&&e.memory!==void 0,this.isSupported||console.warn("[MemoryTracker] performance.memory not available (Chrome-only API)")}start(){if(this.intervalId!==null){console.warn("[MemoryTracker] Already running");return}if(!this.isSupported){this.memoryUsage=null;return}this.updateMemory(),this.intervalId=window.setInterval(()=>{this.updateMemory()},this.updateInterval)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}updateMemory(){if(!this.isSupported)return;const e=performance;if(!e.memory)return;const r=e.memory.usedJSHeapSize,s=e.memory.jsHeapSizeLimit;this.memoryUsage={used:x(r),total:x(s),percentage:X(r,s)}}getMemoryUsage(){return this.memoryUsage}isMemorySupported(){return this.isSupported}}class G{constructor(){i(this,"resolution","N/A");i(this,"videoElement",null);i(this,"metadataListener",null)}start(e){if(!e){this.resolution="N/A";return}this.videoElement=e,e.videoWidth>0&&e.videoHeight>0&&this.updateResolution(),this.metadataListener=()=>{this.updateResolution()},e.addEventListener("loadedmetadata",this.metadataListener)}stop(){this.videoElement&&this.metadataListener&&(this.videoElement.removeEventListener("loadedmetadata",this.metadataListener),this.metadataListener=null),this.videoElement=null,this.resolution="N/A"}updateResolution(){if(!this.videoElement){this.resolution="N/A";return}const e=this.videoElement.videoWidth,r=this.videoElement.videoHeight;e>0&&r>0?this.resolution=`${e}x${r}`:this.resolution="N/A"}getResolution(){return this.videoElement&&this.updateResolution(),this.resolution}}class Q{constructor(e={}){i(this,"options");i(this,"isRunning",!1);i(this,"metrics",{cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"});i(this,"cameraFPSTracker");i(this,"memoryTracker");i(this,"resolutionTracker");i(this,"frameTimes",[]);i(this,"lastEffectiveFPSUpdate",0);this.options={enableMemoryTracking:e.enableMemoryTracking??!0,memoryUpdateInterval:e.memoryUpdateInterval??1e3},this.cameraFPSTracker=new V,this.memoryTracker=new J(this.options.memoryUpdateInterval),this.resolutionTracker=new G}start(e){if(this.isRunning){console.warn("[MetricsCollector] Already running");return}this.isRunning=!0,this.lastEffectiveFPSUpdate=performance.now(),this.options.enableMemoryTracking&&this.memoryTracker.start(),e&&this.resolutionTracker.start(e),this.setupCameraFPSHook(),console.info("[MetricsCollector] Started")}stop(){this.isRunning&&(this.isRunning=!1,this.memoryTracker.stop(),this.resolutionTracker.stop(),this.cameraFPSTracker.reset(),this.cleanupCameraFPSHook(),console.info("[MetricsCollector] Stopped"))}setupCameraFPSHook(){const e=window;e.__xr_debugger_metrics||(e.__xr_debugger_metrics={trackCameraFrame:()=>{this.cameraFPSTracker.trackFrame(),this.metrics.cameraFPS=this.cameraFPSTracker.getFPS()}})}cleanupCameraFPSHook(){const e=window;e.__xr_debugger_metrics&&delete e.__xr_debugger_metrics}getMetrics(){return this.updateMetricsFromTrackers(),{...this.metrics}}updateMetricsFromTrackers(){this.isRunning&&(this.metrics.memory=this.memoryTracker.getMemoryUsage(),this.metrics.resolution=this.resolutionTracker.getResolution(),this.updateEffectiveFPS())}updateRenderTime(e){this.metrics.renderTime=e,this.updateEffectiveFPS()}async updateDetectionTime(e){if(!e||!this.isRunning){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}try{const r=Object.values(e).filter(Boolean);if(r.length===0){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}const s=r.map(c=>c&&typeof c.getPerformanceData=="function"?c.getPerformanceData():Promise.resolve({name:"unknown",processingTime:0})),o=await Promise.all(s);this.metrics.modelPerformance=o.map(c=>({name:c.name,processingTime:c.processingTime||0}));const a=o.reduce((c,p)=>c+(p.processingTime||0),0);this.metrics.detectionTime=a,this.updateEffectiveFPS()}catch(r){console.warn("[MetricsCollector] Error updating detection time:",r),this.metrics.detectionTime=0,this.metrics.modelPerformance=[]}}updateEffectiveFPS(){const e=performance.now(),r=this.metrics.detectionTime+this.metrics.renderTime;if(this.frameTimes.push(r),e-this.lastEffectiveFPSUpdate>=1e3){if(this.frameTimes.length>0){const s=this.frameTimes.reduce((o,a)=>o+a,0)/this.frameTimes.length;this.metrics.effectiveFPS=s>0?1e3/s:0}this.frameTimes=[],this.lastEffectiveFPSUpdate=e}}isActive(){return this.isRunning}}const Y=n.lazy(async()=>({default:(await Promise.resolve().then(()=>require("./DebuggerUI-CWX5EtQv.cjs"))).DebuggerUI})),k=n.createContext(null);function Z({children:t,keyboardShortcut:e="ctrl+shift+d",initialEnabled:r=!1,position:s="top-left"}){const[o,a]=n.useState(r),[c,p]=n.useState(!1),[y,_]=n.useState({cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"}),f=n.useRef(null),u=n.useRef(null),g=n.useRef(!1),{session:b}=$.useXRContext(),T=O.useXRReady();n.useEffect(()=>(f.current||(f.current=new Q,window.__xr_metrics_collector=f.current),()=>{f.current&&f.current.stop(),u.current&&clearInterval(u.current),window.__xr_metrics_collector&&delete window.__xr_metrics_collector}),[]),n.useEffect(()=>{const l=f.current;if(l){if(o&&T){const d=b._getVideoElement();l.start(d),u.current=window.setInterval(async()=>{if(!g.current){g.current=!0;try{const S=Object.fromEntries(b.store.getSnapshot().pipeline);await l.updateDetectionTime(S),_(l.getMetrics())}finally{g.current=!1}}},100)}else l.stop(),u.current&&(clearInterval(u.current),u.current=null),g.current=!1;return()=>{u.current&&(clearInterval(u.current),u.current=null)}}},[o,T,b]),n.useEffect(()=>{const l=d=>{const h=e.toLowerCase().split("+"),D=h.includes("ctrl")||h.includes("control"),I=h.includes("shift"),M=h.includes("alt"),U=h[h.length-1],j=D?d.ctrlKey||d.metaKey:!0,L=I?d.shiftKey:!0,A=M?d.altKey:!0,q=d.key.toLowerCase()===U;j&&L&&A&&q&&(d.preventDefault(),a(N=>!N))};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[e]);const C=n.useCallback(()=>{a(l=>!l)},[]),R=n.useCallback(()=>{a(!0)},[]),w=n.useCallback(()=>{a(!1)},[]),E={state:{enabled:o,collapsed:c,metrics:y},toggle:C,setCollapsed:p,enable:R,disable:w};return m.jsxs(k.Provider,{value:E,children:[t,o&&m.jsx(n.Suspense,{fallback:null,children:m.jsx(Y,{metrics:y,collapsed:c,onCollapse:p,onClose:w,position:s,keyboardShortcut:e})})]})}function ee(){const t=n.useContext(k);if(!t)throw new Error("useDebuggerContext must be used within a DebuggerProvider");return t}function te({onUpdate:t}){const e=n.useRef(0),r=n.useRef(!0);return B.useFrame(()=>{if(r.current)r.current=!1;else{const o=performance.now()-e.current;t(o)}e.current=performance.now()},-1e3),null}function P(){const t=ee();return{metrics:t.state.metrics,enabled:t.state.enabled,collapsed:t.state.collapsed,toggle:t.toggle,setCollapsed:t.setCollapsed,enable:t.enable,disable:t.disable}}function re(){const{enabled:t}=P(),e=r=>{const s=window;s.__xr_metrics_collector&&s.__xr_metrics_collector.updateRenderTime(r)};return t?m.jsx(te,{onUpdate:e}):null}const v=600;function F(){if(typeof window>"u")return;const t=window;return t.__xrCalibrationDebugState||(t.__xrCalibrationDebugState={events:[]}),t.__xrCalibrationDebugState}function se(t,e,r){const s=F();s&&(s.events.push({source:t,label:e,payload:r,ts:performance.now()}),s.events.length>v&&s.events.splice(0,s.events.length-v))}function ie(t=v){const e=F();return e?e.events.slice(Math.max(0,e.events.length-t)):[]}exports.DebuggerOverlay=re;exports.DebuggerProvider=Z;exports.XRDebugView=K;exports.formatNumber=W;exports.readCalibrationDebugEvents=ie;exports.recordCalibrationDebugEvent=se;exports.useDebugger=P;
|
|
@@ -3,12 +3,11 @@ var O = (t, e, r) => e in t ? K(t, e, { enumerable: !0, configurable: !0, writab
|
|
|
3
3
|
var s = (t, e, r) => O(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
4
|
import { jsx as f, jsxs as w } from "react/jsx-runtime";
|
|
5
5
|
import W, { useState as b, useRef as h, useEffect as T, useCallback as y, createContext as X, Suspense as V, lazy as q } from "react";
|
|
6
|
-
import {
|
|
7
|
-
import { u as G } from "./index-
|
|
6
|
+
import { b as J } from "./selectors-C5G1PMYL.js";
|
|
7
|
+
import { u as G } from "./index-CnGox6Xr.js";
|
|
8
8
|
import { useFrame as Q } from "@react-three/fiber";
|
|
9
9
|
import "./hasFullUnitUVBounds-BGvcFsQM.js";
|
|
10
|
-
|
|
11
|
-
const pe = ({
|
|
10
|
+
const he = ({
|
|
12
11
|
children: t,
|
|
13
12
|
defaultCollapsed: e = !0,
|
|
14
13
|
title: r,
|
|
@@ -132,7 +131,7 @@ class Y {
|
|
|
132
131
|
this.frameTimestamps = [], this.lastUpdateTime = performance.now(), this.currentFPS = 0;
|
|
133
132
|
}
|
|
134
133
|
}
|
|
135
|
-
function
|
|
134
|
+
function pe(t, e = 1) {
|
|
136
135
|
return t.toFixed(e);
|
|
137
136
|
}
|
|
138
137
|
function _(t) {
|
|
@@ -376,8 +375,8 @@ class re {
|
|
|
376
375
|
return this.isRunning;
|
|
377
376
|
}
|
|
378
377
|
}
|
|
379
|
-
const ie = q(async () => ({ default: (await import("./DebuggerUI-
|
|
380
|
-
function
|
|
378
|
+
const ie = q(async () => ({ default: (await import("./DebuggerUI-C-ldiozL.js")).DebuggerUI })), C = X(null);
|
|
379
|
+
function ge({
|
|
381
380
|
children: t,
|
|
382
381
|
keyboardShortcut: e = "ctrl+shift+d",
|
|
383
382
|
initialEnabled: r = !1,
|
|
@@ -487,7 +486,7 @@ function oe() {
|
|
|
487
486
|
disable: t.disable
|
|
488
487
|
};
|
|
489
488
|
}
|
|
490
|
-
function
|
|
489
|
+
function be() {
|
|
491
490
|
const { enabled: t } = oe(), e = (r) => {
|
|
492
491
|
const i = window;
|
|
493
492
|
i.__xr_metrics_collector && i.__xr_metrics_collector.updateRenderTime(r);
|
|
@@ -501,7 +500,7 @@ function R() {
|
|
|
501
500
|
const t = window;
|
|
502
501
|
return t.__xrCalibrationDebugState || (t.__xrCalibrationDebugState = { events: [] }), t.__xrCalibrationDebugState;
|
|
503
502
|
}
|
|
504
|
-
function
|
|
503
|
+
function ve(t, e, r) {
|
|
505
504
|
const i = R();
|
|
506
505
|
i && (i.events.push({
|
|
507
506
|
source: t,
|
|
@@ -510,16 +509,16 @@ function Te(t, e, r) {
|
|
|
510
509
|
ts: performance.now()
|
|
511
510
|
}), i.events.length > S && i.events.splice(0, i.events.length - S));
|
|
512
511
|
}
|
|
513
|
-
function
|
|
512
|
+
function Te(t = S) {
|
|
514
513
|
const e = R();
|
|
515
514
|
return e ? e.events.slice(Math.max(0, e.events.length - t)) : [];
|
|
516
515
|
}
|
|
517
516
|
export {
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
517
|
+
ge as D,
|
|
518
|
+
he as X,
|
|
519
|
+
be as a,
|
|
520
|
+
ve as b,
|
|
521
|
+
pe as f,
|
|
522
|
+
Te as r,
|
|
524
523
|
oe as u
|
|
525
524
|
};
|
package/dist/internal.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-BYza1h8_.cjs"),r=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),n=require("./selectors-Du_PsVnW.cjs");exports.DebuggerOverlay=e.DebuggerOverlay;exports.DebuggerProvider=e.DebuggerProvider;exports.XRDebugView=e.XRDebugView;exports.readCalibrationDebugEvents=e.readCalibrationDebugEvents;exports.recordCalibrationDebugEvent=e.recordCalibrationDebugEvent;exports.useDebugger=e.useDebugger;exports._resetUVBoundsWarnings=r._resetUVBoundsWarnings;exports.logUVBoundsWarningOnce=r.logUVBoundsWarningOnce;exports.RENDER_LAYERS=n.RENDER_LAYERS;
|
package/dist/internal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a, D as s, X as o, r as g, b as n, u } from "./internal-
|
|
1
|
+
import { a, D as s, X as o, r as g, b as n, u } from "./internal-vsfNQycj.js";
|
|
2
2
|
import { _ as i, l as t } from "./hasFullUnitUVBounds-BGvcFsQM.js";
|
|
3
|
-
import { R as d } from "./
|
|
3
|
+
import { R as d } from "./selectors-C5G1PMYL.js";
|
|
4
4
|
export {
|
|
5
5
|
a as DebuggerOverlay,
|
|
6
6
|
s as DebuggerProvider,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IrisEye, IrisPoint, IrisResult, IrisSide } from './types';
|
|
2
|
+
/** Eyelid opening (gap / eye width) at or above which an eye counts as fully open. */
|
|
3
|
+
export declare const IRIS_FULL_OPENNESS = 0.2;
|
|
4
|
+
export declare const createIrisEye: (side: IrisSide) => IrisEye;
|
|
5
|
+
export declare const createIrisResult: (faceIndex?: number) => IrisResult;
|
|
6
|
+
/**
|
|
7
|
+
* Derive one eye's iris data from a refined face-mesh landmark set (478
|
|
8
|
+
* points, MediaPipe image space). Returns `false`, and marks the eye
|
|
9
|
+
* undetected, when the landmarks are missing. Allocation-free: writes into
|
|
10
|
+
* `eye`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const computeIrisEye: (landmarks: ReadonlyArray<IrisPoint> | undefined, side: IrisSide, eye: IrisEye, confidenceScale?: number, mirrored?: boolean) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Update a full `IrisResult` from one face's landmarks. `faceConfidence` is
|
|
15
|
+
* 1 for a live face and the hold decay while held; it scales both eyes'
|
|
16
|
+
* confidence. `mirrored` says the frame is a mirror of the person (the
|
|
17
|
+
* session's webcam feed) so `offset.x` keeps its anatomical sign. Pass
|
|
18
|
+
* `undefined` landmarks for an absent face.
|
|
19
|
+
*/
|
|
20
|
+
export declare const updateIrisResult: (result: IrisResult, landmarks: ReadonlyArray<IrisPoint> | undefined, nowMs: number, options?: {
|
|
21
|
+
faceIndex?: number;
|
|
22
|
+
held?: boolean;
|
|
23
|
+
faceConfidence?: number;
|
|
24
|
+
mirrored?: boolean;
|
|
25
|
+
}) => IrisResult;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { IRIS_FULL_OPENNESS, computeIrisEye, createIrisEye, createIrisResult, updateIrisResult, } from './compute';
|
|
2
|
+
export { IrisLead } from './lead';
|
|
3
|
+
export { IRIS_LANDMARKS, IRIS_LANDMARK_COUNT } from './types';
|
|
4
|
+
export type { IrisEye, IrisPoint, IrisResult, IrisSide } from './types';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IrisPoint } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Bridges the gap between throttled inference samples and the render rate.
|
|
4
|
+
* Inference lands at, say, 24 fps while frames render at 60+, so a point
|
|
5
|
+
* that only updates on new samples holds then jumps. `observe` records each
|
|
6
|
+
* new sample and its velocity; `apply` advances the point along that
|
|
7
|
+
* velocity by the time since the sample, capped at `leadMs`, so motion
|
|
8
|
+
* reads continuous between samples. Reset on re-acquire.
|
|
9
|
+
*/
|
|
10
|
+
export declare class IrisLead {
|
|
11
|
+
private slots;
|
|
12
|
+
private readonly maxGapMs;
|
|
13
|
+
constructor(maxGapMs?: number);
|
|
14
|
+
reset(): void;
|
|
15
|
+
/** Record a fresh inference sample for `key` (e.g. "left"). */
|
|
16
|
+
observe(key: string, point: IrisPoint, nowMs: number): void;
|
|
17
|
+
/** Write the extrapolated position of `key` into `out`; a no-op before the first sample. */
|
|
18
|
+
apply(key: string, nowMs: number, leadMs: number, out: IrisPoint): IrisPoint;
|
|
19
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { TrackerPoint } from '../types/common';
|
|
2
|
+
/** Person's perspective: `left` is the person's left eye (MediaPipe mesh indices 473–477). */
|
|
3
|
+
export type IrisSide = "left" | "right";
|
|
4
|
+
/**
|
|
5
|
+
* MediaPipe face-mesh indices used for iris tracking, per side. Sides follow
|
|
6
|
+
* the mesh topology, so they are the person's anatomical sides on every
|
|
7
|
+
* source, mirrored webcam included.
|
|
8
|
+
*/
|
|
9
|
+
export declare const IRIS_LANDMARKS: {
|
|
10
|
+
readonly left: {
|
|
11
|
+
/** Iris center. */
|
|
12
|
+
readonly center: 473;
|
|
13
|
+
/** Iris ring: outer, top, inner, bottom (image order: right, up, left, down for the left eye). */
|
|
14
|
+
readonly ring: readonly [474, 475, 476, 477];
|
|
15
|
+
readonly innerCorner: 362;
|
|
16
|
+
readonly outerCorner: 263;
|
|
17
|
+
readonly upperLid: 386;
|
|
18
|
+
readonly lowerLid: 374;
|
|
19
|
+
};
|
|
20
|
+
readonly right: {
|
|
21
|
+
readonly center: 468;
|
|
22
|
+
readonly ring: readonly [469, 470, 471, 472];
|
|
23
|
+
readonly innerCorner: 133;
|
|
24
|
+
readonly outerCorner: 33;
|
|
25
|
+
readonly upperLid: 159;
|
|
26
|
+
readonly lowerLid: 145;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/** Minimum landmark count for iris data: the refined face mesh (468 + 10 iris points). */
|
|
30
|
+
export declare const IRIS_LANDMARK_COUNT = 478;
|
|
31
|
+
export type IrisPoint = {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
z: number;
|
|
35
|
+
};
|
|
36
|
+
export type IrisEye = {
|
|
37
|
+
side: IrisSide;
|
|
38
|
+
/** False when the face has no iris landmarks (fewer than 478 points) or the face is absent. */
|
|
39
|
+
detected: boolean;
|
|
40
|
+
/** Iris center in MediaPipe image space: 0..1, top-left origin, Y down; `z` is tracker-relative depth. */
|
|
41
|
+
center: IrisPoint;
|
|
42
|
+
/** The same center in SDK tracker space: center origin, X right, Y up, Z toward the viewer. */
|
|
43
|
+
trackerCenter: TrackerPoint;
|
|
44
|
+
/** The four iris ring landmarks in image space (outer, top, inner, bottom). */
|
|
45
|
+
ring: [IrisPoint, IrisPoint, IrisPoint, IrisPoint];
|
|
46
|
+
/** Iris radius as half the horizontal ring diameter, in image-width units (0..1). */
|
|
47
|
+
radius: number;
|
|
48
|
+
/** Midpoint of the eye corners in image space. */
|
|
49
|
+
eyeCenter: IrisPoint;
|
|
50
|
+
/** Corner-to-corner eye width in image-width units. */
|
|
51
|
+
eyeWidth: number;
|
|
52
|
+
/** Eyelid gap divided by eye width; ~0.25–0.35 open, ~0 closed. */
|
|
53
|
+
openness: number;
|
|
54
|
+
/**
|
|
55
|
+
* Iris center relative to the eye center, each axis divided by half the
|
|
56
|
+
* eye width and clamped to [-1, 1]; +x toward the person's left, +y up,
|
|
57
|
+
* on every source (the sign is corrected on the mirrored webcam feed).
|
|
58
|
+
* This is where the iris sits inside the eyelid opening, NOT a gaze
|
|
59
|
+
* direction: it ignores head pose and eye geometry.
|
|
60
|
+
*/
|
|
61
|
+
offset: {
|
|
62
|
+
x: number;
|
|
63
|
+
y: number;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* 0..1 from eyelid opening (full at `openness` >= 0.2, zero when closed),
|
|
67
|
+
* scaled by the hold decay while the face is held. MediaPipe emits iris
|
|
68
|
+
* points even for a closed eye, so this is the signal to gate effects on.
|
|
69
|
+
*/
|
|
70
|
+
confidence: number;
|
|
71
|
+
};
|
|
72
|
+
export type IrisResult = {
|
|
73
|
+
/** Bumped on every update. 0 until the first face is seen. */
|
|
74
|
+
version: number;
|
|
75
|
+
/** `performance.now()` of the last update. */
|
|
76
|
+
timestampMs: number;
|
|
77
|
+
/** Result-array index of the face read (not a persistent identity). */
|
|
78
|
+
faceIndex: number;
|
|
79
|
+
/** True while a face with iris landmarks is live or held. */
|
|
80
|
+
detected: boolean;
|
|
81
|
+
/** True while the face is replayed from memory after a dropout. */
|
|
82
|
+
held: boolean;
|
|
83
|
+
/** 1 while live, decaying to 0 over `holdMs` while held. */
|
|
84
|
+
confidence: number;
|
|
85
|
+
left: IrisEye;
|
|
86
|
+
right: IrisEye;
|
|
87
|
+
};
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
const S = [
|
|
2
|
+
"bg",
|
|
3
|
+
"brows",
|
|
4
|
+
"eyes",
|
|
5
|
+
"face_skin",
|
|
6
|
+
"hair",
|
|
7
|
+
"lips",
|
|
8
|
+
"mouth",
|
|
9
|
+
"person"
|
|
10
|
+
], g = [
|
|
11
|
+
"normal",
|
|
12
|
+
"multiply",
|
|
13
|
+
"screen",
|
|
14
|
+
"overlay"
|
|
15
|
+
], O = {
|
|
16
|
+
label: "lips",
|
|
17
|
+
invert: !1,
|
|
18
|
+
color: "#e85d75",
|
|
19
|
+
opacity: 0.8,
|
|
20
|
+
blendMode: "multiply",
|
|
21
|
+
feather: 1,
|
|
22
|
+
mirrored: !1
|
|
23
|
+
}, p = (e, o, r, l) => typeof e == "number" && Number.isFinite(e) ? Math.min(r, Math.max(o, e)) : l, M = (e = {}) => {
|
|
24
|
+
const o = O;
|
|
25
|
+
return {
|
|
26
|
+
label: typeof e.label == "string" && e.label.trim() ? e.label : o.label,
|
|
27
|
+
invert: typeof e.invert == "boolean" ? e.invert : o.invert,
|
|
28
|
+
color: typeof e.color == "string" && e.color.trim() ? e.color : o.color,
|
|
29
|
+
opacity: p(e.opacity, 0, 1, o.opacity),
|
|
30
|
+
blendMode: g.includes(
|
|
31
|
+
e.blendMode
|
|
32
|
+
) ? e.blendMode : o.blendMode,
|
|
33
|
+
feather: p(e.feather, 0, 8, o.feather),
|
|
34
|
+
mirrored: typeof e.mirrored == "boolean" ? e.mirrored : o.mirrored
|
|
35
|
+
};
|
|
36
|
+
}, Y = (e, o) => M({ ...e, ...o }), w = (e) => (typeof e == "string" ? e.split(",") : e).map((o) => o.trim()).filter(Boolean), P = [
|
|
37
|
+
{
|
|
38
|
+
key: "label",
|
|
39
|
+
label: "Region",
|
|
40
|
+
type: "select",
|
|
41
|
+
options: S.map((e) => ({ label: e, value: e }))
|
|
42
|
+
},
|
|
43
|
+
{ key: "invert", label: "Invert selection", type: "boolean" },
|
|
44
|
+
{ key: "color", label: "Color", type: "color" },
|
|
45
|
+
{ key: "opacity", label: "Opacity", type: "number", min: 0, max: 1, step: 0.01 },
|
|
46
|
+
{
|
|
47
|
+
key: "blendMode",
|
|
48
|
+
label: "Blend",
|
|
49
|
+
type: "select",
|
|
50
|
+
options: g.map((e) => ({ label: e, value: e }))
|
|
51
|
+
},
|
|
52
|
+
{ key: "feather", label: "Feather (texels)", type: "number", min: 0, max: 8, step: 0.5 },
|
|
53
|
+
{ key: "mirrored", label: "Mirror mask", type: "boolean" }
|
|
54
|
+
], _ = 512, d = [
|
|
55
|
+
10,
|
|
56
|
+
338,
|
|
57
|
+
297,
|
|
58
|
+
332,
|
|
59
|
+
284,
|
|
60
|
+
251,
|
|
61
|
+
389,
|
|
62
|
+
356,
|
|
63
|
+
454,
|
|
64
|
+
323,
|
|
65
|
+
361,
|
|
66
|
+
288,
|
|
67
|
+
397,
|
|
68
|
+
365,
|
|
69
|
+
379,
|
|
70
|
+
378,
|
|
71
|
+
400,
|
|
72
|
+
377,
|
|
73
|
+
152,
|
|
74
|
+
148,
|
|
75
|
+
176,
|
|
76
|
+
149,
|
|
77
|
+
150,
|
|
78
|
+
136,
|
|
79
|
+
172,
|
|
80
|
+
58,
|
|
81
|
+
132,
|
|
82
|
+
93,
|
|
83
|
+
234,
|
|
84
|
+
127,
|
|
85
|
+
162,
|
|
86
|
+
21,
|
|
87
|
+
54,
|
|
88
|
+
103,
|
|
89
|
+
67,
|
|
90
|
+
109
|
|
91
|
+
], v = [
|
|
92
|
+
33,
|
|
93
|
+
246,
|
|
94
|
+
161,
|
|
95
|
+
160,
|
|
96
|
+
159,
|
|
97
|
+
158,
|
|
98
|
+
157,
|
|
99
|
+
173,
|
|
100
|
+
133,
|
|
101
|
+
155,
|
|
102
|
+
154,
|
|
103
|
+
153,
|
|
104
|
+
145,
|
|
105
|
+
144,
|
|
106
|
+
163,
|
|
107
|
+
7
|
|
108
|
+
], L = [
|
|
109
|
+
362,
|
|
110
|
+
398,
|
|
111
|
+
384,
|
|
112
|
+
385,
|
|
113
|
+
386,
|
|
114
|
+
387,
|
|
115
|
+
388,
|
|
116
|
+
466,
|
|
117
|
+
263,
|
|
118
|
+
249,
|
|
119
|
+
390,
|
|
120
|
+
373,
|
|
121
|
+
374,
|
|
122
|
+
380,
|
|
123
|
+
381,
|
|
124
|
+
382
|
|
125
|
+
], A = [
|
|
126
|
+
61,
|
|
127
|
+
146,
|
|
128
|
+
91,
|
|
129
|
+
181,
|
|
130
|
+
84,
|
|
131
|
+
17,
|
|
132
|
+
314,
|
|
133
|
+
405,
|
|
134
|
+
321,
|
|
135
|
+
375,
|
|
136
|
+
291,
|
|
137
|
+
409,
|
|
138
|
+
270,
|
|
139
|
+
269,
|
|
140
|
+
267,
|
|
141
|
+
0,
|
|
142
|
+
37,
|
|
143
|
+
39,
|
|
144
|
+
40,
|
|
145
|
+
185
|
|
146
|
+
], F = [
|
|
147
|
+
78,
|
|
148
|
+
95,
|
|
149
|
+
88,
|
|
150
|
+
178,
|
|
151
|
+
87,
|
|
152
|
+
14,
|
|
153
|
+
317,
|
|
154
|
+
402,
|
|
155
|
+
318,
|
|
156
|
+
324,
|
|
157
|
+
308,
|
|
158
|
+
415,
|
|
159
|
+
310,
|
|
160
|
+
311,
|
|
161
|
+
312,
|
|
162
|
+
13,
|
|
163
|
+
82,
|
|
164
|
+
81,
|
|
165
|
+
80,
|
|
166
|
+
191
|
|
167
|
+
], I = [70, 63, 105, 66, 107, 55, 65, 52, 53, 46], N = [336, 296, 334, 293, 300, 276, 283, 282, 295, 285], R = [
|
|
168
|
+
v,
|
|
169
|
+
L,
|
|
170
|
+
A,
|
|
171
|
+
F,
|
|
172
|
+
I,
|
|
173
|
+
N
|
|
174
|
+
], E = (e, o, r) => {
|
|
175
|
+
T(e, o, d, r);
|
|
176
|
+
}, h = (e, o, r) => {
|
|
177
|
+
const l = i(o, 10, r), a = i(o, 103, r), t = i(o, 332, r), s = i(o, 105, r), b = i(o, 334, r);
|
|
178
|
+
if (!l || !a || !t || !s || !b) return;
|
|
179
|
+
const y = (s.y + b.y) * 0.5, m = Math.abs(t.x - a.x), c = Math.max(Math.abs(y - l.y) * 0.72, m * 0.08), n = Math.max(0, l.y - c), f = c * 0.34;
|
|
180
|
+
e.beginPath(), e.moveTo(a.x, a.y - f), e.quadraticCurveTo((a.x + l.x) * 0.5, n, l.x, n), e.quadraticCurveTo(
|
|
181
|
+
(t.x + l.x) * 0.5,
|
|
182
|
+
n,
|
|
183
|
+
t.x,
|
|
184
|
+
t.y - f
|
|
185
|
+
), e.lineTo(b.x, y), e.quadraticCurveTo(l.x, y + c * 0.16, s.x, y), e.closePath(), e.fill();
|
|
186
|
+
}, C = (e, o, r) => {
|
|
187
|
+
R.forEach((l) => T(e, o, l, r));
|
|
188
|
+
}, i = (e, o, r) => {
|
|
189
|
+
const l = e[o];
|
|
190
|
+
return l ? {
|
|
191
|
+
x: l.x * r,
|
|
192
|
+
y: l.y * r
|
|
193
|
+
} : null;
|
|
194
|
+
}, T = (e, o, r, l) => {
|
|
195
|
+
const a = i(o, r[0], l);
|
|
196
|
+
if (a) {
|
|
197
|
+
e.beginPath(), e.moveTo(a.x, a.y);
|
|
198
|
+
for (let t = 1; t < r.length; t += 1) {
|
|
199
|
+
const s = i(o, r[t], l);
|
|
200
|
+
s && e.lineTo(s.x, s.y);
|
|
201
|
+
}
|
|
202
|
+
e.closePath(), e.fill();
|
|
203
|
+
}
|
|
204
|
+
}, u = (e, o, r = _, l = {}) => {
|
|
205
|
+
e.clearRect(0, 0, r, r), o != null && o.length && (e.save(), e.globalCompositeOperation = "lighter", e.fillStyle = "rgb(0, 0, 255)", E(e, o, r), l.foreheadCoverage && h(e, o, r), e.restore(), e.save(), e.globalCompositeOperation = "lighter", e.filter = "blur(8px)", e.fillStyle = "rgb(255, 0, 0)", E(e, o, r), l.foreheadCoverage && h(e, o, r), e.restore(), e.save(), e.globalCompositeOperation = "lighter", e.filter = "blur(3px)", e.fillStyle = "rgb(0, 255, 0)", C(e, o, r), e.restore());
|
|
206
|
+
};
|
|
207
|
+
export {
|
|
208
|
+
O as D,
|
|
209
|
+
_ as F,
|
|
210
|
+
F as I,
|
|
211
|
+
I as L,
|
|
212
|
+
A as O,
|
|
213
|
+
N as R,
|
|
214
|
+
g as S,
|
|
215
|
+
d as a,
|
|
216
|
+
v as b,
|
|
217
|
+
L as c,
|
|
218
|
+
u as d,
|
|
219
|
+
P as e,
|
|
220
|
+
Y as f,
|
|
221
|
+
S as g,
|
|
222
|
+
w as p,
|
|
223
|
+
M as r
|
|
224
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const O=["bg","brows","eyes","face_skin","hair","lips","mouth","person"],T=["normal","multiply","screen","overlay"],p={label:"lips",invert:!1,color:"#e85d75",opacity:.8,blendMode:"multiply",feather:1,mirrored:!1},S=(e,o,r,l)=>typeof e=="number"&&Number.isFinite(e)?Math.min(r,Math.max(o,e)):l,h=(e={})=>{const o=p;return{label:typeof e.label=="string"&&e.label.trim()?e.label:o.label,invert:typeof e.invert=="boolean"?e.invert:o.invert,color:typeof e.color=="string"&&e.color.trim()?e.color:o.color,opacity:S(e.opacity,0,1,o.opacity),blendMode:T.includes(e.blendMode)?e.blendMode:o.blendMode,feather:S(e.feather,0,8,o.feather),mirrored:typeof e.mirrored=="boolean"?e.mirrored:o.mirrored}},F=(e,o)=>h({...e,...o}),Y=e=>(typeof e=="string"?e.split(","):e).map(o=>o.trim()).filter(Boolean),C=[{key:"label",label:"Region",type:"select",options:O.map(e=>({label:e,value:e}))},{key:"invert",label:"Invert selection",type:"boolean"},{key:"color",label:"Color",type:"color"},{key:"opacity",label:"Opacity",type:"number",min:0,max:1,step:.01},{key:"blendMode",label:"Blend",type:"select",options:T.map(e=>({label:e,value:e}))},{key:"feather",label:"Feather (texels)",type:"number",min:0,max:8,step:.5},{key:"mirrored",label:"Mirror mask",type:"boolean"}],g=512,M=[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],A=[33,246,161,160,159,158,157,173,133,155,154,153,145,144,163,7],m=[362,398,384,385,386,387,388,466,263,249,390,373,374,380,381,382],L=[61,146,91,181,84,17,314,405,321,375,291,409,270,269,267,0,37,39,40,185],N=[78,95,88,178,87,14,317,402,318,324,308,415,310,311,312,13,82,81,80,191],I=[70,63,105,66,107,55,65,52,53,46],v=[336,296,334,293,300,276,283,282,295,285],G=[A,m,L,N,I,v],_=(e,o,r)=>{R(e,o,M,r)},f=(e,o,r)=>{const l=i(o,10,r),t=i(o,103,r),a=i(o,332,r),E=i(o,105,r),y=i(o,334,r);if(!l||!t||!a||!E||!y)return;const s=(E.y+y.y)*.5,d=Math.abs(a.x-t.x),n=Math.max(Math.abs(s-l.y)*.72,d*.08),b=Math.max(0,l.y-n),c=n*.34;e.beginPath(),e.moveTo(t.x,t.y-c),e.quadraticCurveTo((t.x+l.x)*.5,b,l.x,b),e.quadraticCurveTo((a.x+l.x)*.5,b,a.x,a.y-c),e.lineTo(y.x,s),e.quadraticCurveTo(l.x,s+n*.16,E.x,s),e.closePath(),e.fill()},B=(e,o,r)=>{G.forEach(l=>R(e,o,l,r))},i=(e,o,r)=>{const l=e[o];return l?{x:l.x*r,y:l.y*r}:null},R=(e,o,r,l)=>{const t=i(o,r[0],l);if(t){e.beginPath(),e.moveTo(t.x,t.y);for(let a=1;a<r.length;a+=1){const E=i(o,r[a],l);E&&e.lineTo(E.x,E.y)}e.closePath(),e.fill()}},u=(e,o,r=g,l={})=>{e.clearRect(0,0,r,r),o!=null&&o.length&&(e.save(),e.globalCompositeOperation="lighter",e.fillStyle="rgb(0, 0, 255)",_(e,o,r),l.foreheadCoverage&&f(e,o,r),e.restore(),e.save(),e.globalCompositeOperation="lighter",e.filter="blur(8px)",e.fillStyle="rgb(255, 0, 0)",_(e,o,r),l.foreheadCoverage&&f(e,o,r),e.restore(),e.save(),e.globalCompositeOperation="lighter",e.filter="blur(3px)",e.fillStyle="rgb(0, 255, 0)",B(e,o,r),e.restore())};exports.DEFAULT_SEGMENTATION_OVERLAY_SETTINGS=p;exports.FACE_MASK_SIZE=g;exports.FACE_OVAL=M;exports.INNER_MOUTH=N;exports.LEFT_EYE=A;exports.LEFT_EYEBROW=I;exports.OUTER_LIPS=L;exports.RIGHT_EYE=m;exports.RIGHT_EYEBROW=v;exports.SEGMENTATION_OVERLAY_BLEND_MODES=T;exports.SEGMENTATION_OVERLAY_SETTINGS_FIELDS=C;exports.SEMANTIC_MASK_LABELS=O;exports.drawFaceRetouchMask=u;exports.parseOverlayLabels=Y;exports.patchSegmentationOverlaySettings=F;exports.resolveSegmentationOverlaySettings=h;
|