{"_id":"@aigencorp/face-liveness-sdk","_rev":"10-7ffa5e2f28bb1062fc39b3209d50e25d","name":"@aigencorp/face-liveness-sdk","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.0","author":"","license":"ISC","_id":"@aigencorp/face-liveness-sdk@1.0.0","maintainers":[{"name":"aigen","email":"service@aigencorp.com"}],"dist":{"shasum":"e629e0ac233352081cb74ba34c5d90f02a2445b9","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.0.tgz","fileCount":2,"integrity":"sha512-P3gCyULVMDKdXgHZ5KbQr/qhmsJUCGwyzMPvsCBocYPIjs8FjNmS9O9pPm9nv/0UDPKYgxaQiMfva0y+IUN0ng==","signatures":[{"sig":"MEQCIAdYHybvs+tUlypkzeSrlmjTlrtcS9GozvJ23eqPs1VvAiB+34sHYYbpkRNEhEqK+QeevUxhAD4pWTdPrMamlUA5PQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"aigen","actor":{"name":"aigen","type":"user","email":"service@aigencorp.com"},"email":"service@aigencorp.com"},"_npmVersion":"10.9.2","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.0_1751456452357_0.42657162461758613","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.1","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.1","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"027e32a0defa938933cb8a49181ba3398113b846","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.1.tgz","fileCount":17,"integrity":"sha512-KFMWeUS/oSVrp685G8Edw7uZupMl/E0Wpp1dkpbKjL3Nph3BX/Bf3Wiidhoxp9YM/KEr7TYhlGTvtk9f0pwHOQ==","signatures":[{"sig":"MEUCIDQ3zJwDDDzq1JEe+d4uPLm2eq1vZfSsodtBlLcmg/SFAiEAyLvcRHzRYUbiIeOiHy0ceDvNOVmhpMYzUvbrQZJuk/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67016},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"gitHead":"6f92d2af9be8fb6e1cd1ba7347ff0855e400affb","_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"_npmVersion":"11.4.2","description":"TypeScript SDK for liveness detection and face capture","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1633559619"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.1_1751458679002_0.43246504026628796","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.2","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.2","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"915fa075cc1f1e66bd21682d42d3e81642970ca4","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.2.tgz","fileCount":17,"integrity":"sha512-G/esiRTC9R2k52uRz2wP87jIBRnM0AYsrAMCYDwcz0w9c7V4xb53oTv6Kwn1vfEbtKsQPzWbKfz8tx8znB2B7Q==","signatures":[{"sig":"MEUCIQC0QyyG/Md9s2BE7HmmBrMmkTktAnk1k2h/F2YqNRbCjAIgJoCfrYAGMi+XTn6iJZILZ4fOvY4JUUfuhDj/BnvMAfs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67212},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"gitHead":"6f92d2af9be8fb6e1cd1ba7347ff0855e400affb","_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"_npmVersion":"11.4.2","description":"TypeScript SDK for liveness detection and face capture","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1633559619"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.2_1751458810901_0.39716441784096324","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.3","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.3","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"7b6779112eb5ac7c40df3de25a2fe8f84c1b9dad","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.3.tgz","fileCount":17,"integrity":"sha512-xy5ixc6Agpxu1PtZlziBuHUhJApzKW8lxk1kqCWiovMtcAABS47nj3HvTG3aPyw2NQGo0PX7Wy7nZL1kSSajGQ==","signatures":[{"sig":"MEUCIEQ6CuylJk8hHay+WNZhT4PtZ4bwieYsApiIjxV2RtJKAiEA8OPHR72tNTDbjfca8KATrVu7qzk85sG3YdF703iAoYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67266},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"gitHead":"6f92d2af9be8fb6e1cd1ba7347ff0855e400affb","_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"_npmVersion":"11.4.2","description":"TypeScript SDK for liveness detection and face capture","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1633559619"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.3_1751459617598_0.04671986743967804","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.5","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.5","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"32c07dca1ed16f9e6f2b2e895e01c1dff036c1f8","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.5.tgz","fileCount":18,"integrity":"sha512-VDmrjOzulkpCVRrQ/uElBOTJa7hTZ4f/1ZK/rPSOCMMrEzOkw03QKEd3O+GH5tTd24mCkDirdSB3kfNHQLxirQ==","signatures":[{"sig":"MEQCIGCzrKlCHLeKOu/B60WUYeyq/FtMuke6u3txhwyuGDe4AiADb8jljv+TgRQNIjb1hHES72flvfoHir5yS19N0iQOKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50112},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"description":"TypeScript SDK for liveness detection and face capture","directories":{},"dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1646424915"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.5_1751478947603_0.8130037662248217","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.6","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.6","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"9d17e42d007f041b52802316a0f2770831428070","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.6.tgz","fileCount":18,"integrity":"sha512-SONtaXU/b7jteq6NnB+jkhy+Cngq0NzsydYWzKKLomWRzxP+E55fMmFGaasbhewBCmprg3yIZkZsKYFNhCq1HA==","signatures":[{"sig":"MEUCIEyEKSP1kIjMoyn8fNSgaYtPo+dxK5g/daVd4T5tPC0zAiEA4CMjEi+f2+DK8jF1GskNeQAbYPMJITJxVFyepXTpGd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49826},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"description":"TypeScript SDK for liveness detection and face capture","directories":{},"dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1646424915"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.6_1751479868193_0.09094651127361564","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.7","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.7","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"11f301109ac4cfae7977c3b9ed457ec027983d53","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.7.tgz","fileCount":18,"integrity":"sha512-7Iy0HoHc+yAu5fJsFPqzYnpmxGYGSeCztM9bDcEnC4QYE+roiv3/65+HUA4X554ad8yE5JduIdl9kbHKdNtSTg==","signatures":[{"sig":"MEQCIADyz4YaQhW4/3kN4Cf9UNmouZFbx/Vl4sGkJ3gKQjwIAiBIcHOsQziAHKmBHFO63z9iOFLYZcq8Vrhfl4yWEL/DsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49826},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"description":"TypeScript SDK for liveness detection and face capture","directories":{},"dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1646424915"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.7_1751479959596_0.6176583098280417","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.8","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.8","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"45a17e84de09e1e46502002c730565a2bb4aa434","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.8.tgz","fileCount":18,"integrity":"sha512-hhjHmNNiwlKISOyLH80eeW7CxffmA0Jh6CoMo88QrTgKyTYM1IeZiJM8//4oxgxEHOoWlRd1kjaRVf0i9Z7BAw==","signatures":[{"sig":"MEYCIQDUIW8p35iNo2qClrr+Ljjx41X0QKL2qHq/eC2wVNQO/wIhAITbSIwJ3gyGu+yNcYvlvfeBB/FBwN5QGIFcke37p12J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49887},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"description":"TypeScript SDK for liveness detection and face capture","directories":{},"dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1646424915"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.8_1751480139870_0.7706542927208389","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@aigencorp/face-liveness-sdk","version":"1.0.9","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","_id":"@aigencorp/face-liveness-sdk@1.0.9","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"dist":{"shasum":"9041555aac400ce490d28fc38a32a821cda1254e","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.0.9.tgz","fileCount":18,"integrity":"sha512-2HZ96uX9XCRX6fGOn9NMP0lRxh0voor/fhkMEJnj9vPAWv/CH2BmKgeugokWwQvOIRXLw6qHRkG45gh3YoFAZQ==","signatures":[{"sig":"MEQCIDeGECiaYH+eGDF2pdo68tbc1iAUc+7TUgPEuGfVDVuIAiAMGnP8ti9AeGlG4PluIC202h4XoqWR5o9BwyqetuCXUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49886},"main":"index.js","types":"index.d.ts","engines":{"node":">=16.0.0","yarn":">=1.22.0"},"_npmUser":{"name":"supsupsup","actor":{"name":"supsupsup","type":"user","email":"sitthichai@aigencorp.com"},"email":"sitthichai@aigencorp.com"},"description":"TypeScript SDK for liveness detection and face capture","directories":{},"dependencies":{"@mediapipe/camera_utils":"^0.3.1675466862","@mediapipe/control_utils":"^0.6.1633559619","@mediapipe/drawing_utils":"^0.3.1675466862","@mediapipe/face_detection":"^0.4.1646424915"},"_hasShrinkwrap":false,"peerDependencies":{"@mediapipe/camera_utils":"^0.3.0","@mediapipe/control_utils":"^0.6.0","@mediapipe/drawing_utils":"^0.3.0","@mediapipe/face_detection":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/face-liveness-sdk_1.0.9_1751480533901_0.6235897559878776","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aigencorp/face-liveness-sdk","version":"1.1.0","description":"TypeScript SDK for liveness detection and face capture","main":"index.js","types":"index.d.ts","keywords":["liveness","face-detection","camera","typescript","sdk"],"author":{"name":"Aigen"},"license":"MIT","dependencies":{"@mediapipe/tasks-vision":"^0.10.35"},"engines":{"node":">=16.0.0","yarn":">=1.22.0"},"type":"module","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"}},"_id":"@aigencorp/face-liveness-sdk@1.1.0","gitHead":"dd55031121e7e7abdf1301466593501c162d679b","_nodeVersion":"24.3.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-y+pTbfKCCiv7JQOxWTrI2ofup4s3BvOs8aHfQJSBU7lG3KbXuR6lUEZNffTDPu51v55J2SW0MacxkrO8OM4Slw==","shasum":"555807c95747b268c4bf432fbf9e141177cce0b5","tarball":"https://registry.npmjs.org/@aigencorp/face-liveness-sdk/-/face-liveness-sdk-1.1.0.tgz","fileCount":14,"unpackedSize":51596,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHRmrTeSWsgKuaiH9a1P2EbmQJa/lGdJtHXY6PD/FsZ6AiEAqR0adnmldCWY4zKbZ1TpLAtj3K7cNOpgG5oYkY/cxTE="}]},"_npmUser":{"name":"supsupsup","email":"sitthichai@aigencorp.com"},"directories":{},"maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/face-liveness-sdk_1.1.0_1781604759773_0.06426626125095392"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-02T11:40:52.230Z","modified":"2026-06-16T10:12:40.070Z","1.0.0":"2025-07-02T11:40:52.526Z","1.0.1":"2025-07-02T12:17:59.185Z","1.0.2":"2025-07-02T12:20:11.105Z","1.0.3":"2025-07-02T12:33:37.768Z","1.0.5":"2025-07-02T17:55:47.806Z","1.0.6":"2025-07-02T18:11:08.391Z","1.0.7":"2025-07-02T18:12:39.795Z","1.0.8":"2025-07-02T18:15:40.088Z","1.0.9":"2025-07-02T18:22:14.098Z","1.1.0":"2026-06-16T10:12:39.895Z"},"author":{"name":"Aigen"},"license":"MIT","keywords":["liveness","face-detection","camera","typescript","sdk"],"description":"TypeScript SDK for liveness detection and face capture","maintainers":[{"name":"aigen","email":"service@aigencorp.com"},{"name":"supsupsup","email":"sitthichai@aigencorp.com"}],"readme":"# Face Liveness SDK\n\nA lightweight TypeScript SDK for real-time face liveness detection using MediaPipe Tasks Vision. Capture multiple face images with automatic positioning guidance for anti-spoofing verification.\n\n## Features\n\n- **Real-time face detection** with position guidance (MediaPipe `@mediapipe/tasks-vision` v0.10+)\n- **Automatic image capture** (optimized images)\n- **Cross-platform support** (Web, React, mobile browsers including Samsung)\n- **TypeScript support** with full type definitions\n- **CPU delegate default** for reliable mobile GPU compatibility\n- **Hybrid asset loading** — CDN by default, self-hosted override supported\n\n## Quick Start\n\n### Installation\n\n```bash\n# Using yarn\nyarn add @aigencorp/face-liveness-sdk\n\n# Using npm\nnpm install @aigencorp/face-liveness-sdk\n```\n\n`@mediapipe/tasks-vision` is installed automatically as a dependency.\n\n### Basic Usage\n\n```javascript\nimport { createLivenessSDK } from '@aigencorp/face-liveness-sdk';\n\nconst video = document.getElementById('video');\nconst sdk = await createLivenessSDK(video);\n\n// Handle captured images\nsdk.on('capture:complete', (images) => {\n  console.log('Captured images:', images);\n  // Send to your verification API\n});\n\n// Start capture\nsdk.captureImages();\n```\n\n## Integration Guides\n\nChoose your integration approach:\n\n### 📱 **HTML/JavaScript** → [HTML_GUIDE.md](./HTML_GUIDE.md)\nComplete examples with vanilla JavaScript (no external MediaPipe scripts required).\n\n### ⚛️ **React** → [REACT_GUIDE.md](./REACT_GUIDE.md)\nReact components, hooks, and Next.js setup with TypeScript.\n\n## Requirements\n\n- **HTTPS** for camera access\n- **Network access** to CDN for WASM/models by default (jsdelivr + Google storage)\n- Chrome 88+, Firefox 85+, Safari 14+, Edge 88+, modern mobile browsers\n\nFor offline or restricted networks, self-host assets via `faceDetection` config (see [HTML_GUIDE.md](./HTML_GUIDE.md)).\n\n## Migration from 1.0.x\n\nVersion **1.1.0** migrates from legacy `@mediapipe/face_detection` to `@mediapipe/tasks-vision`. Public API (`createLivenessSDK`, events, image output) is unchanged. Remove any legacy MediaPipe `<script>` tags from your HTML — they are no longer needed.\n\n## How It Works\n\n1. **Initialize** camera and face detection\n2. **Guide user** to position face correctly\n3. **Capture images** automatically when positioned well\n4. **Return base64** images for API verification\n\n## Browser Support\n\n- Chrome 88+, Firefox 85+, Safari 14+, Edge 88+\n- Requires HTTPS for camera access\n- Mobile browsers supported\n\n## API Overview\n\n```typescript\n// Create SDK instance\nconst sdk = await createLivenessSDK(videoElement);\n\n// Event listeners\nsdk.on('camera:ready', () => console.log('Ready'));\nsdk.on('face:position', (pos) => console.log('Position:', pos));\nsdk.on('capture:complete', (images) => console.log('Done:', images));\n\n// Control methods\nawait sdk.captureImages();\nsdk.destroy();\n```\n\n## Configuration\n\n```typescript\nconst sdk = await createLivenessSDK(video, {\n  ui: { enableLogging: true }\n});\n```\n\n**Note**: Core settings (resolution, capture count, quality) are optimized and fixed for consistent performance across devices.\n\n## Image Output\n\nReturns array of base64 strings:\n\n```javascript\n// Example output\n[\n  \"iVBORw0KGgoAAAANSUhEUgAA...\",\n  \"iVBORw0KGgoAAAANSUhEUgAA...\",\n  // ... more images\n]\n```\n\n## Events\n\n| Event | Description | Data |\n|-------|-------------|------|\n| `camera:ready` | Camera initialized | - |\n| `face:position` | Real-time face feedback | `{ isCentered, isGoodDistance, isTooClose, isTooFar }` |\n| `capture:started` | Capture process began | - |\n| `capture:success` | Image captured successfully | - |\n| `capture:complete` | All images captured | `string[]` (base64 images) |\n| `error` | Error occurred | `Error` object |\n\n## Examples\n\n### Send to API\n```javascript\nsdk.on('capture:complete', async (images) => {\n  const response = await fetch('/api/verify-liveness', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ images })\n  });\n  const result = await response.json();\n});\n```\n\n### Position Feedback\n```javascript\nsdk.on('face:position', (position) => {\n  if (position.isCentered && position.isGoodDistance) {\n    showMessage('Perfect! Stay still...');\n  } else if (position.isTooClose) {\n    showMessage('Move back');\n  } else if (position.isTooFar) {\n    showMessage('Move closer');\n  } else {\n    showMessage('Center your face');\n  }\n});\n```\n\n## License\n\nMIT License\n\n## Support\n\n- 📖 Check the integration guides above\n- 🐛 Report issues on GitHub\n- 💬 Community support in discussions\n\n---\n\n**Ready to integrate?** Choose your platform above and follow the step-by-step guide! ","readmeFilename":"README.md"}