{"_id":"mtr-facemesh","_rev":"50-46b4a9652bfc1282099729001df1e07c","name":"mtr-facemesh","dist-tags":{"latest":"7.8.0"},"versions":{"2.0.0":{"name":"mtr-facemesh","version":"2.0.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@2.0.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"95154d44073b3242ffd5df431c464cc61c7645fd","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-2.0.0.tgz","fileCount":45,"integrity":"sha512-NYGmyS0n4MR+vaj5vQYyR4Go0nOdEl34sNnMEpcNSmngZ6UHmCuU3MwYjhapX8EUUN2RBw7LZCkszAof5HWV2g==","signatures":[{"sig":"MEUCIBWjuqEnK5kwtzEV9yBiL4fvv31EIdGr9t+ytWoEsuJIAiEA9//aKwqDlHGohO6YqYLOj9JUIbGHIEXHfEkOgdYytas=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32065563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjwD2PACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoy/g//Z4IVRSFKcz529GtZwlLle3RoDIXUnlOgcwsQ6Xisq7vulj5X\r\ng4R6Dtx62umZVQqgeUCzXogfA7iCwb+d8gxmdsHgWUG/ty9Wn8kWXkWjxqoL\r\nFmoxbztkjxL3NthVZPaTBNadfTGzNZDqL9+fPsf2//N24VYVAlD8z++j9c7i\r\nin6Yyl9wOLYjTyzSx6zGlI6U+cam3nQ2tQNnjO0L+L6zCIsg0LpCH0ZUIfZg\r\n+0GYCadvmlLqTI0yzI0tw2vLkVjhdgZKY51GFB11fL1XQ3QofAi5JSdZ3W2x\r\nwBKGScC/SsQ5zrn51habNFMYE5xTJEy0pxoLw057TqbbRlIJofVjW5/fHxmD\r\nSILg/ksYLPpLwmodGRPP1c2/gDid5cThj+ZCOmebxTI+K2NmvC+P/Gq7NvhY\r\nAsvZ65+Z7g98Q6N+orAvEu1p/kNxpNzLDdhV0ZArQzayH07v8oVx4ma3zsVZ\r\nSWm7RsTd3/iQT2znPwkSmjLca1TRaM1lCiBGf4D8kZiag1yx2lpiSy9130f+\r\nxNWTrY2nZvFju25AnYDP08b/DjYYQZ4eMP6Kmn59IIkolOr8fupqSfrPxWay\r\n3SiDWEibmqflU2m9MDx0n2iw1M+VTaZV/Z1zZX9ZuRWLV0ATvpVOgBHgnJUB\r\n+b5RCqyLCXpgyGCGi+j1naXeu0qv9zo98rg=\r\n=Psco\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/lib/mtr_facemesh.js","gitHead":"dfc3843084d3674b116f282511ef263475797d15","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"8.18.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"16.17.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","stats.js":"^0.16.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_2.0.0_1673543055393_0.3382828160149809","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"mtr-facemesh","version":"3.0.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@3.0.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"14b6414a2f1c49ebbeaa6d970438491913e7a0eb","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-3.0.0.tgz","fileCount":61,"integrity":"sha512-RBQ2y0DrcEmz4TMoZS8RuF2U3YDnAt0XbTyfwZR7B/yotjUPnQzMa5HOH3hDbDl8Jy4bxJ9jJdxl+nyyAup7vw==","signatures":[{"sig":"MEUCIQDJuFcbNOTQaHD1xBuMkTycPHDIPemsy81Er4+edShh8AIgVDyGF5Q9AgCrH9dytfY2ms1CFdueAj0T3/spc7T/0GY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34423297},"main":"dist/lib/mtr_facemesh.js","gitHead":"d8509006dab503622cbcc2a9576ff5fd897dc4ff","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"8.18.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"16.17.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_3.0.0_1685551671466_0.4022965353052199","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"mtr-facemesh","version":"4.0.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@4.0.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"297702d7e6fb33388fc54ff7915f011303f33f15","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-4.0.0.tgz","fileCount":94,"integrity":"sha512-OtwzQVbPtk2s//Xdf7BL4/JaOwp7WaUqjZhH8iWk9d3PnGJzxcefCvCSsj1inU5x2DHq/wrolEjCrLhypLnG4Q==","signatures":[{"sig":"MEQCIC0eOxXDB+2aIew4fp/py9wU85SI0mJKpGyWV7pKy0xVAiBOmGEW34eetrY5M8UDmiSsOxEM5Vk7Jh8Rq1gdHBRcuA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72831152},"main":"dist/lib/mtr_facemesh.js","gitHead":"691320de88a10d6e63ecc69cad2075de1129efb0","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.155.0","skmeans":"^0.11.3","stats.js":"^0.16.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_4.0.0_1696871014080_0.6048042369941675","host":"s3://npm-registry-packages"}},"4.0.1":{"name":"mtr-facemesh","version":"4.0.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@4.0.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"5c4ba110328dcb4b7cfa5c5c70dc4848bfb719fa","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-4.0.1.tgz","fileCount":94,"integrity":"sha512-99uFm3QOFFXsOBJVRbRsTXolr7qpjz/+IEzpLOlxR+g5CSG/BTD1rfxfDsaEAornxOtHZvt8ahxuLV/N02+row==","signatures":[{"sig":"MEQCICLkg51qBYyy4FUBXtbSDdXLa0IIYMy5+wFk/S3LiIyGAiB+cNjTL5ONFath5UCCyP1gXsfvdsbL9FyJ9/7JTECSbA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72787498},"main":"dist/lib/mtr_facemesh.js","gitHead":"78cf4e8c2915e7fd35d22417d8da79de9beac699","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_4.0.1_1697058007056_0.6976633988557859","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"mtr-facemesh","version":"4.1.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@4.1.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"6b48453ac848996ea7cb0b33ce69809c9a5d0ab0","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-4.1.0.tgz","fileCount":85,"integrity":"sha512-sGGQosi6gOfW8ihOTJp4w05T01PwuTospwZiVSPVL0bFsJCqTgeHV0fwyoIoWc8w2D5saLIWkLgjvjV94ucjaA==","signatures":[{"sig":"MEYCIQC295ZJDXQTbFliIlW87oCPP218wj3SXhQw84T8AObEzAIhAOnbm9dS5of8z4A3Iu2yOEJnkiGD1GiEp+gUDHXPUbg9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36382158},"main":"dist/lib/mtr_facemesh.js","gitHead":"572040d436a6469ca124101c917f27873c24e2fe","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_4.1.0_1716405291283_0.24549666473414478","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"mtr-facemesh","version":"5.0.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.0.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"8e7667f111c0b04c4ac7ff7b9641c49f3910dfd0","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.0.0.tgz","fileCount":136,"integrity":"sha512-IJjlf5C9S7+XV51A6ndtA7zwf1w030ZAhsQjDgpyOyqVAy+Ham2qZhm8l9rWFyHvyGtoU43KJgq0wukBA1aVPQ==","signatures":[{"sig":"MEYCIQCnFh90UwFPnhb6UHPmmxNlvWsq7AGaOZCNKjsP89q2QgIhAMfGIXJG++qupHR87lda/s9PYdWNIHmFkS2xmbygtGVB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52746797},"main":"dist/lib/mtr_facemesh.js","gitHead":"198cd81cb40a085617be6422dc3f1b22b7d9baf1","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.0.0_1716406519917_0.5861043888840927","host":"s3://npm-registry-packages"}},"5.1.0":{"name":"mtr-facemesh","version":"5.1.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"31eeeb67ce5c17584781427b0050fee53dcef0f9","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.0.tgz","fileCount":137,"integrity":"sha512-mFdyvIePyKHuvqRxQkqSJKhz4lg3czUZNZ/3jpx1UQeELlpn1ZxGjcN61X+ybK42erwIhRhR2phgAMVJ4DFdpg==","signatures":[{"sig":"MEYCIQDrqE25Jgwqx18r20tM/BffNjQWx+nCfNNrOWkgAjKZwwIhAN6O+BvSuJiptKhet60clHAanJ1XtO44lGpGlNOkCAAh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77197729},"main":"dist/lib/mtr_facemesh.js","gitHead":"8b3fa6824a831169ca52698ae82faa343fc9843a","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.0_1720017703692_0.43604411646700325","host":"s3://npm-registry-packages"}},"5.1.1":{"name":"mtr-facemesh","version":"5.1.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"d9b5efdce8dec5f47de580b7015569714ba3439a","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.1.tgz","fileCount":137,"integrity":"sha512-j4ffThOabPi3sbOifc+Am/fLIg1xwKEFLklIR5nWGt1+6rbq3e6czRyFEh9k1oNPO3aecHM5cdSXqCGPqz2ygg==","signatures":[{"sig":"MEYCIQCmQw4zEttAPWzr2IGDX7eHmgvf4px6DhB1U2CCcuurVQIhAO4vRNvDy92l+B2rF1JD5PE4PH5cNFogfKYWiHVX8fiz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77197729},"main":"dist/lib/mtr_facemesh.js","gitHead":"d7fba8f6a3847337921c83cd4ea56d237a5d6a1c","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.1_1720808997213_0.9377073970850291","host":"s3://npm-registry-packages"}},"5.1.2":{"name":"mtr-facemesh","version":"5.1.2","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.2","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"8f32c01ab18aaa03b55364f60276708d54f6ca18","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.2.tgz","fileCount":137,"integrity":"sha512-ZF0tv1QQHC7VZs0DAR0pU27altzkaQCsQaS3uDAY6lIiZLRD7zUDIwvkai+YyNT/DrqsYqJwHHviWw70E2zm9A==","signatures":[{"sig":"MEYCIQDDBAQZb7ff1Ix2XE8orVqe7l4XHpu3mKkzabM8PEMCSgIhAKMj6a6oOrucMMNWnvhwlxdyQhxFYUIeZvtCzrXeYH6X","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77198950},"main":"dist/lib/mtr_facemesh.js","gitHead":"3a244235f74ba441ad99ef1e3ce972f8a02aa624","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.2_1721913023587_0.08226936036497978","host":"s3://npm-registry-packages"}},"5.1.3":{"name":"mtr-facemesh","version":"5.1.3","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.3","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"1547affe995014765f2b512a81ee00946f65051c","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.3.tgz","fileCount":137,"integrity":"sha512-KYyz/u6xT3i6jTO5+WtEcY9OeGVDyPyJ+Du1kjUMbsOpQ3mDqGO6s2yjsX2YCgqz2NMS5ysqv+LDo7w1d5nfRw==","signatures":[{"sig":"MEUCIQD/gWKh/bxVm61nAo/rYm0Pwa5FIfFMwcZFvNOOuqfIbAIgL3IdVotVYhXSBm4Ks97kFh5xpI2lmX4l1rdS8SzBL74=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77198909},"main":"dist/lib/mtr_facemesh.js","gitHead":"22bdca27619ab54d9c0edb3f0084fb37780319be","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.3_1723475074021_0.9112912875061991","host":"s3://npm-registry-packages"}},"5.1.4":{"name":"mtr-facemesh","version":"5.1.4","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.4","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"c1a7baafb2415a02b3fc982fea38bd8fa6ccb401","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.4.tgz","fileCount":137,"integrity":"sha512-4o9G1b/KD52Xs1ackS9DvxnhpGzkloupKAhTZQMZyPnQDEwhSCxHExT36mT6rcogbekzQJwhbEgAbykJN5JNqQ==","signatures":[{"sig":"MEUCIGs9ICnekYsL1qYCZpnnQ2Eh7AwFtju5BNzvX6BQm/UrAiEA1Zdbxp7RPH7Delya74aU2rspxZIUcoqbehWPLHkufow=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77198892},"main":"dist/lib/mtr_facemesh.js","gitHead":"e8ff277a553d2325530da7c8661d300dd2d7464d","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.4_1724423322378_0.2636201785203822","host":"s3://npm-registry-packages"}},"5.1.5":{"name":"mtr-facemesh","version":"5.1.5","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.5","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"d39af05a4126099c3b081886aeb2dc480238347d","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.5.tgz","fileCount":137,"integrity":"sha512-jDjCL1GHzParpfE5Hr3inPJu+fSdGGlXlDyj2Rv3eR1jfks56xNMIMt1T6VbuW2IzNWJNBY8dNo3TE9lSAPltg==","signatures":[{"sig":"MEYCIQCdYifKWG5AuTHz3TsAltFlJzw1Cm0s4VzmhrkqrNBwpQIhAK0J5LJ+C05Z4uSaIs9vYTas+syZT6nmUaO5pPKtL6Dl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77198925},"main":"dist/lib/mtr_facemesh.js","gitHead":"a23b95d5abbe85397e914a9b3ce4c87c7bc9356e","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.5_1724429012490_0.12713466170547938","host":"s3://npm-registry-packages"}},"5.1.6":{"name":"mtr-facemesh","version":"5.1.6","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.6","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"1de8c1b57183baf45a4b2c4c6774c3544bdf2e3e","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.6.tgz","fileCount":137,"integrity":"sha512-5Ch0vEIEjFMQy+7Y91AV+mJ4o97/VtIArwf6z83Zdl+2GR23rmb2OTG53nbHSluY/vRGJDIpZ71j+inWIBuE2g==","signatures":[{"sig":"MEUCIQCFp2SwcmhQ/er4W/VmGGQW6r5IiOQ1nGfiqfarWCT/0wIgFj2/OcfqbRk5aEZijiCfZYuVwNUOMEWOsFfuKlgwsRY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77199412},"main":"dist/lib/mtr_facemesh.js","gitHead":"454170c6df14529dd60ed0524ca25b5b7d18ed2e","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.6_1725045925061_0.17356417188910322","host":"s3://npm-registry-packages"}},"5.1.7":{"name":"mtr-facemesh","version":"5.1.7","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.1.7","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"415e96eb644254f0d2d5358be80fe91659392573","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.1.7.tgz","fileCount":137,"integrity":"sha512-oomKV7mdLT+VSLUXD3YvHe7PmONC6S4UY3SHgOc1nFK/h+bo+/ZcZ0Edb3M4gyxQKlNYbdNIMybQR5qwL9LFJw==","signatures":[{"sig":"MEUCIQDXBO0oY5eqqz3We+grN7l/Km1G8oOgsRAdQiKKuZeYDQIgVUoSdHApgmW0UiSy/UD7fwe03d4xmgegw7uB5hbL1/Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77200280},"main":"dist/lib/mtr_facemesh.js","gitHead":"29d3789454059acec2a39b8183ff51b19ce775e6","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"9.7.2","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.4.0","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.1.7_1726148387924_0.3418403140694699","host":"s3://npm-registry-packages"}},"5.2.0":{"name":"mtr-facemesh","version":"5.2.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"55f2b5866818849476725596d21e15c180109a31","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.0.tgz","fileCount":166,"integrity":"sha512-iBX7tdE8M1y4t/0/kwYzDM5MVVomlOORa2aO6D1k7Iye20rbZviBStM6CLNDUsTBnCfjm2hiCfoeoH9Q2R/XdA==","signatures":[{"sig":"MEQCIFsv1zIWCQvqgreg4P7gsUPpajgBIZKg3cO+nZ+ZP4xLAiAKejyOF5zdnKSya8ClNihEgfq1hO7kVcKW2dkZnoc0EQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154149313},"main":"dist/lib/mtr_facemesh.js","gitHead":"bae21db1f60510013431cf3d59c0e4334aa38162","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.0_1726691463980_0.07986632627026591","host":"s3://npm-registry-packages"}},"5.2.1":{"name":"mtr-facemesh","version":"5.2.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"9c9c925c679c9dfe40c6ea4ed61cf7f40bbb3f2c","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.1.tgz","fileCount":166,"integrity":"sha512-kcrQzOtPKrZDtk2a/J2wimQV8nKt2CX/7v8JrGWVq+UdH8bSHKPTxG4WkhMgbLvlTB6jZk3waidr8PdNA53HfQ==","signatures":[{"sig":"MEUCIElVjYunvCbOBGJ/5+n/MV1abC9sA88LM9EXhoTgDWSDAiEA/v2aTS+EqkSKla2r2GPI6e2DzFXYMs35fjiesR/n718=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154149383},"main":"dist/lib/mtr_facemesh.js","gitHead":"91ee5d00016eaba733d0f17a6575d64cef124525","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.1_1726756151528_0.5607680812401412","host":"s3://npm-registry-packages"}},"5.2.2":{"name":"mtr-facemesh","version":"5.2.2","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.2","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"80fced442fbaa532eddc007017992a1946c3d4ae","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.2.tgz","fileCount":166,"integrity":"sha512-2RyJ5KDidJaD+Y7zfuI9WHDM7mDhF8+ZN/S18v0ffB3E5ihG9WrqKcrw8o4FVY37/Ej21qjTnWKLpqGNCl6xYQ==","signatures":[{"sig":"MEYCIQC8aU0UB4C/V70GebCKI7T3TD8Hq+/YUMwXWDwdNyTm0QIhAO1FFRU63jFl/noo9vloXF2I20GaJx2XD0Fj2lMGqE6m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154149389},"main":"dist/lib/mtr_facemesh.js","gitHead":"ef56c7105d270ee620d35221554b67cb43b2a4d6","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.2_1727211744351_0.9356816433847179","host":"s3://npm-registry-packages"}},"5.2.3":{"name":"mtr-facemesh","version":"5.2.3","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.3","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"a006ea0bc84798a2058778157aad5ab4f2c7531e","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.3.tgz","fileCount":166,"integrity":"sha512-hL1hs/EV5O545pfB6zbSfn619gnCTrz7v8UylqQcKmRLLDvkr622S7zGodTSUzMkmQTkUTgXSSLXIE9DWPUWcA==","signatures":[{"sig":"MEQCIAIIeXrf1vf1Hg5Agl/YwtFwY5wJp/e261N8LcJU+SlLAiAup+dpSAqL/1Ha+sc+WWcZNNixfq+3GqpIT77tWvdtoQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154151058},"main":"dist/lib/mtr_facemesh.js","gitHead":"270ea9554ac613bd4177ef8b369899be5f0a6897","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.3_1727897008485_0.5224267492685803","host":"s3://npm-registry-packages"}},"5.2.4":{"name":"mtr-facemesh","version":"5.2.4","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.4","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"aaa0b0536709946882b23043b1c809cbef63625c","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.4.tgz","fileCount":169,"integrity":"sha512-3b/PMUp/2LvKeC3uvmzqhmkqZ83vixE5SmBSya9e5LbloLnyA5Bwfwe1Nli1YHPm2kNiE6S4LpA+diXodG8SMA==","signatures":[{"sig":"MEUCIQCl/oF6KHw5G7evvSGuZSlRCf5x/klkZLmRj8bnr2ymQwIgYkJGZvCIIhERS0I4BnIXDKLfKtlehoo5tqr8/apkhZo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154371174},"main":"dist/lib/mtr_facemesh.js","gitHead":"4ec8424548dc154c8cddbc8bdb525ef16d4c1479","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.4_1728410152079_0.9154399639803437","host":"s3://npm-registry-packages"}},"5.2.5":{"name":"mtr-facemesh","version":"5.2.5","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.5","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"4bd1faa24016bee0401e045e14de36b136cb71b0","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.5.tgz","fileCount":169,"integrity":"sha512-PBlrJMz2aUVlu+Cq76qXwcOOnB0D6iqnP+ezCLlYiu/AyYX1/11F8Fhu2TeUBvCwb6kPy8lQXNXGZpQjuOEh9w==","signatures":[{"sig":"MEYCIQDFw6xZy5mjOcNbBsqbKgipw8SC1G7m+861n8DWgWFnGwIhAITVWA09vN+qGK3VIIZGcvRZ/Uf1kIVFoXOscgJAUPSO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154371366},"main":"dist/lib/mtr_facemesh.js","gitHead":"b2d5b2958e72cf997180738aaaa05209c0fc2417","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.5_1730130292831_0.8638457284191656","host":"s3://npm-registry-packages"}},"5.2.6":{"name":"mtr-facemesh","version":"5.2.6","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.6","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"54e3647f6c48400e9ae82bab260e7921995a4b29","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.6.tgz","fileCount":169,"integrity":"sha512-hZdQAvwj25+bzkXHkwsm761Tg/mwojBV4Co8IlzQiOtBESM4CtakOIUtvc7brXwovHS8cYmbTKjinKkslXoClA==","signatures":[{"sig":"MEUCICe2r12QxnCTYHK17kZLKQYyCCFqNdxqkTu/3iiZS78FAiEAtemABs1Qx4xr0H4HAv0hBjkNQZwrwW/BSbC+MVnmJpE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154371369},"main":"dist/lib/mtr_facemesh.js","gitHead":"d5f3defb453372269449f725d55ddab15ba32115","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.6_1730234639723_0.32157216989965764","host":"s3://npm-registry-packages"}},"5.2.7":{"name":"mtr-facemesh","version":"5.2.7","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.2.7","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"e20cf75e436f3d682edc895c20e30a7ba06364f7","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.2.7.tgz","fileCount":170,"integrity":"sha512-3tr77s5HCWS6bSs4KTzBpMTnQaIG4kFH32fe06gs2/FrqFOeXWECYdIu2nn7PSRsmtZgwezZAR9g3tgNdsBIHQ==","signatures":[{"sig":"MEYCIQDoIM3SNJ1SyJxKgq2j0HsKGL0ArZ74DLazdsDuZDRCwAIhAMp8ys6p/51BPQl1Nzqaft1Lj4Rimu/rRZfTqhbSS13W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155137034},"main":"dist/lib/mtr_facemesh.js","gitHead":"aa560339e57c83831aa15150658667ec8a0060d5","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.10","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.2.7_1737553431994_0.07803402041838159","host":"s3://npm-registry-packages-npm-production"}},"5.3.0":{"name":"mtr-facemesh","version":"5.3.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.3.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"17306d5b0850af9aa53247dc26fece75ea0ac36d","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.3.0.tgz","fileCount":170,"integrity":"sha512-GOF8b9E78bTTg+c7TIMqw9io/9C9xXHKM3NL8UOhKd2Jw9AmO/vU7/Rg9GvA/7GQEdFzqvhUF2y71zm4mXYqhA==","signatures":[{"sig":"MEUCIFuriOpIuxAuChMtFECqucL+x7ClbEzLBnrNj9dxNKSNAiEAn1d5TH6Y3kT1ChrSZKamapub9FuSNeM5fXYg4ani0cA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155277632},"main":"dist/lib/mtr_facemesh.js","gitHead":"5418658c89bda8e7adbe8f1059fd9d05d7fecc77","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.3.0_1738083152265_0.9852728556703969","host":"s3://npm-registry-packages-npm-production"}},"5.3.1":{"name":"mtr-facemesh","version":"5.3.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.3.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"0df46d779efa12c9cc6a088c90d8e797119c314e","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.3.1.tgz","fileCount":173,"integrity":"sha512-ZbuEOy4NOxWxwjVZXjlfctIpaXdOd5hh2PgtpalpnzkEnekyo+hBGKMVaLcew6RCmm8jr3PvKU5tKTVXITURiw==","signatures":[{"sig":"MEYCIQDHjFMf9EVNQju1OHDB9AMekE2azGm5X5YPQYv9z/q/kAIhAKYZA/JACkum0PmAnx44BE/RahTEizsnpEbhdUC40qlT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156870386},"main":"dist/lib/mtr_facemesh.js","gitHead":"07d473f5adbe082b2d4d9aeb9cb82e591d493b9e","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.3.1_1740422562514_0.48372454796027853","host":"s3://npm-registry-packages-npm-production"}},"5.4.1":{"name":"mtr-facemesh","version":"5.4.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@5.4.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"c20fbf0f946f3dc6b1c55dd18780faaebc8698f9","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-5.4.1.tgz","fileCount":31,"integrity":"sha512-qspPThezc8M/+B909w94jxDF6exIjCCaS1U17REDdT0W7KA5WP5tL59vWKDnTT+NdO31axpfyLlrkZ+weFq3Sw==","signatures":[{"sig":"MEQCIAHwzFfI5JSxRDzsejBecZ4iJv1wvLGW7e9DY8PR6L3aAiB+Bn6sjlMNF5fBg3r6rUEEtqScxTzyl5aJr069jeKF2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23527544},"main":"dist/lib/mtr_facemesh.js","gitHead":"67c7188931484164f9eece20824b4017c24f3ca1","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_5.4.1_1741294968044_0.6827763457597167","host":"s3://npm-registry-packages-npm-production"}},"6.0.1":{"name":"mtr-facemesh","version":"6.0.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.0.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"c89bc724831f08bc0d039f296a2f5d27b521ce4f","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.0.1.tgz","fileCount":31,"integrity":"sha512-dPMhjMUkXqu7n4Y1gawyGZceNxv+sa6cOR+R8XvpxlKO9NtPSbBKmQ10mdXn/272b+FHKS4QpGqXPpjWD+RvXA==","signatures":[{"sig":"MEYCIQDRBkoPLKMKzc/A3TNEoxOf+j5EzhjJJDxHWCXG4YMjnQIhAOhRw9K5q0wB3Uas491hJp8j7etZUTyKO9JbcYOt+YJj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23530944},"main":"dist/lib/mtr_facemesh.js","gitHead":"3204d55aae5504df96f466d17dd0f84d776a7a75","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.0.1_1745591247708_0.057000085433019265","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"mtr-facemesh","version":"6.0.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.0.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"4eafdf3dd3c9c3d708e6def120c6fb825d050d48","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.0.0.tgz","fileCount":31,"integrity":"sha512-JRAMuzXXboZzMVmfpQahrBS2YfX6FXpXunkYGmPkxhy50yRjRWjgasa3fcvllAk3tvLR+5dOgKwdH8hUlDNwhA==","signatures":[{"sig":"MEYCIQCMEvGzaXarCcj1nD2CZ72j1yXjxfmynnDNPwoBXvOoKgIhAPDcKWeRT3AFLG1EgvnPRdltw9cCOujOV5MV8Xv2y5Ih","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23530821},"main":"dist/lib/mtr_facemesh.js","gitHead":"d7c3f921a2cb4c37efb3a3ec3d41ce6a220541d8","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.0.0_1745591296806_0.8228182637310837","host":"s3://npm-registry-packages-npm-production"}},"6.0.2":{"name":"mtr-facemesh","version":"6.0.2","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.0.2","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"8b23a678a83dcc4e81f5aa264757d6fafadeecb4","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.0.2.tgz","fileCount":31,"integrity":"sha512-PM1JwwXQCeMlFYmKAkgcX4RW5PjNZ7aUD8pfw0Yva4A1ZzwJG/Ezwu8W2C+13KjKWkV+S7h+0LtNYIAiXsoaZQ==","signatures":[{"sig":"MEQCIGOHc25DmpIyh43wX6e5j6Y7ic9JClflVDVIarkqurRtAiA4rRWw1kjzwSXajI9v0eWSwB+/3/ZHmGS3EGy53SqCdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23530917},"main":"dist/lib/mtr_facemesh.js","gitHead":"cac4b6d6aa48e2f286080e999a9c2589e85101c9","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.0.2_1745613021504_0.7015346083035217","host":"s3://npm-registry-packages-npm-production"}},"6.0.3":{"name":"mtr-facemesh","version":"6.0.3","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.0.3","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"a0f43fa7d67779271ae5de9280c2e2993d5c0c8a","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.0.3.tgz","fileCount":31,"integrity":"sha512-x6YeHw3h0RaBvlHpCYy1l0RBb2Ei7Ctn/Y8DApwZwKthXdPUBmtZrkgaEDosCEFM7dPVsixRMWGuWHSufasTpg==","signatures":[{"sig":"MEYCIQCEUCEc7szFPNnA1qPd6Bac4brXULhU4Elj/BYTXGHvDgIhALtmZGDT8Il5+fVpvpFPQjYDH7G7f5Qf8wduRRtYXlOV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23531620},"main":"dist/lib/mtr_facemesh.js","gitHead":"69a38905be44fd815b95a6481bf26977750e6dcb","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.0.3_1746472618236_0.8197948747696229","host":"s3://npm-registry-packages-npm-production"}},"6.1.0":{"name":"mtr-facemesh","version":"6.1.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.1.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"44429f871388899c96863351a9e962cddacc04be","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.1.0.tgz","fileCount":31,"integrity":"sha512-gh0Sr2gb6ELYHa1+JuQuEtdmHUjvb+IKQ+upGonVhvc9dJqIqBgoAc8Jj657VwulI+LOjonzPZfuQFdXzleRWg==","signatures":[{"sig":"MEUCIQD780JdHeHVZby4qwUsc/EXsZtftWy6qseFJSnexW1ScQIgDdhuqo7uMASFQGUb2shd8F0tzcTT9mAkNihAvr7SqPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25450973},"main":"dist/lib/mtr_facemesh.js","gitHead":"8a2011b218b1131687a63dedb4958ac6505812bc","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.1.0_1757696723011_0.20899859135478427","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"mtr-facemesh","version":"6.2.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.2.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"203342579ce50c9a2fb0dfb32767c189bb1b9014","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.2.0.tgz","fileCount":31,"integrity":"sha512-d35zuCO9ic/PsrHKmpNrEhEL6XB+xa72Q4GaHgoridMM3A931NKt9yQLJmId5aQU4yvx9Wr11OE6UXcz3QZoAQ==","signatures":[{"sig":"MEQCIGj4y0YPUak6zWQLCvTjbKa7WMsuZmYo/eXEVH+9RR7wAiA2es6om+9H5E4w+Zzy/Bj5gKeIecRBnEgW6U2dYRsXIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23531983},"main":"dist/lib/mtr_facemesh.js","gitHead":"ec9c67c2d06802568dc7a7a52d5c862e186606d7","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.2.0_1758134165688_0.6081630383267258","host":"s3://npm-registry-packages-npm-production"}},"6.2.1":{"name":"mtr-facemesh","version":"6.2.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.2.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"8e3902a7e3f657a61844a4ee6017c926b38bcf22","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.2.1.tgz","fileCount":31,"integrity":"sha512-88k8cjTDf8rzukMdVUgaosqIMv1HMdr3B+3zzDBMdCDXthTYMmsj7QrPlt0gtzkOmOc3hgIzGPir/+/8grfgsQ==","signatures":[{"sig":"MEUCIHZu5MIAcFBz/G3h2bmsYcIzKCkjeo1R9RFVJ6mMbXfUAiEA5KzY8Tq3LADiIT6APZNLleXXHCBI+SGi2HC0MJ10K4k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23531983},"main":"dist/lib/mtr_facemesh.js","gitHead":"9ea0caa0fc4bd1ece819da4f90771231882fbabb","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^3.20.0","@mediapipe/tasks-vision":"^0.10.20","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^3.20.0","@tensorflow/tfjs-backend-cpu":"^3.20.0","@tensorflow/tfjs-backend-wasm":"^3.20.0","@tensorflow/tfjs-backend-webgl":"^3.20.0","@tensorflow-models/face-detection":"^1.0.1","@tensorflow-models/face-landmarks-detection":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.2.1_1760728935223_0.24834408467381852","host":"s3://npm-registry-packages-npm-production"}},"6.3.0":{"name":"mtr-facemesh","version":"6.3.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.3.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"43b6521a2caae10cad87087a3f12600aab47c4b2","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.3.0.tgz","fileCount":31,"integrity":"sha512-dd8fEdTcWiAXTZFf/weyxt7JobNSEKULm1zosYdLkABirl9vM/Etp7Dl4hr4Pcoz7IpgxAet7XHs1+8AeVowlg==","signatures":[{"sig":"MEUCIQCsiQmNKvxJ0wqLWNHnRTAclnFP0kGbQU0eRIcC5VySqwIgUmBeVTVTNZ15ewxPkepgDro/30WWNiLDQGsMbEBhZVQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23718796},"main":"dist/lib/mtr_facemesh.js","gitHead":"ff35712a6c15ccf2fae8e7cca775eef8bc63d255","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.22-rc.20250304","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.15.5","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.3.0_1761332330674_0.8108112621520016","host":"s3://npm-registry-packages-npm-production"}},"6.4.0":{"name":"mtr-facemesh","version":"6.4.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.4.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"c5073cdd4c84626a7708b85f27013b3d8ecff381","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.4.0.tgz","fileCount":20,"integrity":"sha512-qE/NBrTZ7mk9cXP+2zqsAUu8wftxybkaGGRS5npQvY+GeLYfPtnamTtvENayzoujQYTLUSnKFbs6FS5m2L9/gA==","signatures":[{"sig":"MEUCICS1HwbP8srtxPx1hJ0290Fox8YYrLMm0i0PsHtnmQApAiEAgEsqRC+7fv6Wg9t0BXYTu1GZPlmUoRCPNlEsZQRF06U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22595826},"main":"dist/lib/mtr_facemesh.js","gitHead":"6a8ea6390fe30ac1797f81f7c3bea5fc81b7c76a","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.22-rc.20250304","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.4.0_1761919272399_0.8949620565518015","host":"s3://npm-registry-packages-npm-production"}},"6.4.1":{"name":"mtr-facemesh","version":"6.4.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@6.4.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"7fdab0ea3e6eb87f92b7a7197541d57a42dd1990","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-6.4.1.tgz","fileCount":20,"integrity":"sha512-CWN6yYMKNj5ryfvRmcI88nH86kpcI2Qi0mG0w+TCUWtwd+YQII8t7mb/6AHnZOKi9RSi82kd87z+TSepReIZtw==","signatures":[{"sig":"MEYCIQCRV/1zuCx075OUBCE3P3SOrYNGsRG77kj6APtMpBDiogIhALyrfTqukzKweiU3tPZ3L3li4p7576oHkLeuqi0HHRBB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22595825},"main":"dist/lib/mtr_facemesh.js","gitHead":"5da20c5b9e17221046a774cf0b128fbe71bd077f","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.143.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.22-rc.20250304","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.143.1","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_6.4.1_1762284956027_0.7306177799966991","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"mtr-facemesh","version":"7.0.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.0.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"a99a28886f445f1cbc10cc293f5b50da00de63b9","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.0.0.tgz","fileCount":28,"integrity":"sha512-kKeS4QUcH3mUodt8X1IJ2wAAEPlfb60q+MKg0lY5Ms7Kp43kTAOAOOlbBrVAuleRzuFGrqjL3aoqkjF0cUyNwQ==","signatures":[{"sig":"MEUCIQDhTIQkF4HuPsgNiCbKwoffJ/ksSG5GaDNCgsv7HAiXfwIgORn77ywiYTxPV3tGWKRwKCm1DMdbHA3R7vCiwOUobuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24837206},"main":"dist/lib/mtr_facemesh.js","gitHead":"30a56494d66034cc0d7e15dcd16c95f93317028c","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.22-rc.20250304","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.0.0_1772651634373_0.3849460043659936","host":"s3://npm-registry-packages-npm-production"}},"7.1.0":{"name":"mtr-facemesh","version":"7.1.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.1.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"deb84379f2858a611449a2ecd6f514380c983044","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.1.0.tgz","fileCount":30,"integrity":"sha512-EUM1plT410qXsn37vmPtX+4OaKpM/Q+RcT9jRI4EoFJ+6s6YZfzEVD+xM2xkIs7dgZfxBw7jYpt23nPUSYhn+Q==","signatures":[{"sig":"MEYCIQDXBY/lW1uBAODikkaww28Ei9D/ruWuX6TG0hS0zapVTAIhALNVdYJp5A1dN9658JHKAwJMxKEeV5kCkwkQsKIPzWGp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27139363},"main":"dist/lib/mtr_facemesh.js","gitHead":"bf8f2c70e245859ac17b421cd40ceacd2f2591ee","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.22-rc.20250304","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.1.0_1780073146657_0.12584658935325832","host":"s3://npm-registry-packages-npm-production"}},"7.2.0":{"name":"mtr-facemesh","version":"7.2.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.2.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"08ecf8c2b8edfeb02f0f4b9d2ebe0e52c92c6aaf","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.2.0.tgz","fileCount":30,"integrity":"sha512-kOWtpeUS4cxiV+S6iXiNrTsoX7lILdr6D7+yp6tGNVOICr1nBxr/4XncM/vU5aD2H2R5MUzv8qAjbB3HebPZmg==","signatures":[{"sig":"MEUCIA1nnZH1h0mayFkCHbKXaWXtB8vKSvFcmINpNtDgGNAnAiEAzqd8UWvrG7z7I3zaWkSBsp7umUAOsnnsEfqfWpMx1jk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27138527},"main":"dist/lib/mtr_facemesh.js","gitHead":"58ab99e52e7aae262527592e4890900738de9ba9","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.2.0_1780073339256_0.00893380711570435","host":"s3://npm-registry-packages-npm-production"}},"7.2.1":{"name":"mtr-facemesh","version":"7.2.1","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.2.1","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"49b05cb4992cb51c8c8cfa5af3b29d37879f227a","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.2.1.tgz","fileCount":30,"integrity":"sha512-//Gllf3kMxXD5Ivumig9J4dJhZ6hjAaui9W7pqCrXnH1DF2WXX7nXssrkLOSSxiKpeu60t/aVbwgLxSlByR1bQ==","signatures":[{"sig":"MEYCIQDG8AX4mVMBTGoFdhmF2WzKIlsZ4teSmNAFOM5UhmNbhQIhAMAZva9frCb2Zl78OA1sMefKSlJORYpYfrE0rcCD6FQT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27139290},"main":"dist/lib/mtr_facemesh.js","gitHead":"fc1718cdc89f7c999bfac9290be776800734c3c2","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.2.1_1780419559124_0.30351055376146086","host":"s3://npm-registry-packages-npm-production"}},"7.4.0":{"name":"mtr-facemesh","version":"7.4.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.4.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"e3bedd077a58cb66cbb48941ea1bae33b780194c","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.4.0.tgz","fileCount":29,"integrity":"sha512-9Ah4Vxxg0BP1igEOh/0EDJLb3lGd8zqICRa5qASEtI+eo6M8BUIwvghxu4NJUF+x9Ze1RxERJ8Fn1wlTg0OOjg==","signatures":[{"sig":"MEUCIF4JVj2IdI1l8loPCdlxnlPP5lQPneZH8Tk5d1c8JahSAiEAl4QF6QcPb3EW+GQ+zdCE18RolKSfkQP6T3osbnZ82vo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24864827},"main":"dist/lib/mtr_facemesh.js","gitHead":"faad2f2abfbdf8ff042bf548f732f6560489dcee","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.4.0_1786031400566_0.8506547001108122","host":"s3://npm-registry-packages-npm-production"}},"7.6.2":{"name":"mtr-facemesh","version":"7.6.2","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.6.2","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"edd12d0bde512636af4162d16314689e9bfc47a2","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.6.2.tgz","fileCount":22,"integrity":"sha512-/bDIZfKf2jtaLovjjpIMA4NHzudHYYuWc64pEuIl0DsbFUSW6xaX/eiLxJcN5crnjtkMtYcitlXcbqtoWHb7fA==","signatures":[{"sig":"MEYCIQCtje6ROVEQUAdFBdo3SetARW4yY/eWs3E6Sfg4mog2VAIhAKd11i/+sMAWy3auk559CkOL2tUzBM93XWu9pHhJzkhV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22825412},"main":"dist/lib/mtr_facemesh.js","gitHead":"4b1f15c9ee86af9539502ed9625728844efbc2eb","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.6.2_1786569346223_0.5874713081909317","host":"s3://npm-registry-packages-npm-production"}},"7.6.3":{"name":"mtr-facemesh","version":"7.6.3","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.6.3","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"3e1c58b27e7d26ba9bbcf5317e3ee4180d6058ba","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.6.3.tgz","fileCount":21,"integrity":"sha512-Ipt5EJOOBpiRlMBXZkt3rR7dFMOekWAb9GdQxZvCdBVHlkfzGBkfHHDcHWhvIdPDJdrdxgSTKoe5Bwnkdicyjw==","signatures":[{"sig":"MEUCIQCjXWkqMN5hddLRQfvzrd0ow4TQTHIfIAorsqppfOHikgIgFNHqfW1KiqueKf+8nohyfVTarWn5fjTg+qAEQhzU/OM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22817907},"main":"dist/lib/mtr_facemesh.js","gitHead":"e5447612870f851d5195d506a2c86cc0358018ff","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.6.3_1786723656203_0.29267466443244006","host":"s3://npm-registry-packages-npm-production"}},"7.7.0":{"name":"mtr-facemesh","version":"7.7.0","keywords":[],"author":{"name":"morethanrealio"},"license":"ISC","_id":"mtr-facemesh@7.7.0","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"3a767d76259e31f9002a3a36a82c732bc5b5679e","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.7.0.tgz","fileCount":27,"integrity":"sha512-Q6/C2hqbOD2YTrpQCm4qKEM00v2gBhaQfbMODbfMhaNvGgjs7iYcCdUQmaLLbbjkhbcyNEyGtZavnS963B9cUw==","signatures":[{"sig":"MEUCIQDhQONzDZNw6377MMTAAv3Nz9W/bhQ3aLL+2nyM+/TtSgIgcQ4FuW0o/jm99aT8LCxvcV6PQgAalfRNcflcaoIazOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22913145},"main":"dist/lib/mtr_facemesh.js","gitHead":"bf4fa74e87cca4f082afcea964282ef3ae87a3bc","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"tmp":"tmp/mtr-facemesh_7.7.0_1789046794404_0.8288130259661559","host":"s3://npm-registry-packages-npm-production"}},"7.8.0":{"_id":"mtr-facemesh@7.8.0","bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"dist":{"shasum":"b853b6040804af29da6ab74430898efea59005d2","tarball":"https://registry.npmjs.org/mtr-facemesh/-/mtr-facemesh-7.8.0.tgz","fileCount":29,"integrity":"sha512-mzaQMFgMjJKM6auwKQMRcbHY1HiDl2Qp/Qv5zcoBp6qcn05j8YX+64G0U4EJ1hXAsfVkVH+7Z050Fhjg4F/M2Q==","signatures":[{"sig":"MEYCIQCaZoCZLzQVOtb9MvT/lFNjV1CcJ+WfKmWyydrrdnwQCQIhAKmCKupXcRMtLPRljDP7izxTYvZQzS+Kl2Il3hmaW6KW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCpd9D3Y5A8TkibednW/fICndatOzpfDB9sPhag5iYCTAIhAPwP8vecswrJOyA3efE+p08bwEroi1hZ+Cy6LDxdOwW0"}],"unpackedSize":22971698},"main":"dist/lib/mtr_facemesh.js","name":"mtr-facemesh","author":{"name":"morethanrealio"},"gitHead":"58058d1cd31151d98c36a7cbdfcd5f51d2d68145","license":"ISC","private":false,"scripts":{"build":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --minify --format=esm --outfile=./dist/lib/mtr_facemesh.js","watch":"esbuild ./src/mtr_facemesh.ts --bundle --target=es2020 --format=esm --outfile=./dist/lib/mtr_facemesh.js --watch","make-dev":"mkdir dev && cp -r dist/* dev/"},"version":"7.8.0","_npmUser":{"name":"morethanreal-io","email":"hello@morethanreal.io"},"homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","keywords":[],"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"_npmVersion":"10.7.0","description":"Face Mesh for MTR projects.","directories":{},"maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"_nodeVersion":"20.15.1","dependencies":{"jsdom":"^20.0.0","three":"^0.182.0","skmeans":"^0.11.3","stats.js":"^0.16.0","html-to-image":"^1.11.13","onnxruntime-web":"^1.18.0","@mediapipe/face_mesh":"^0.4.1633559619","@tensorflow/tfjs-core":"^4.22.0","@mediapipe/tasks-vision":"^0.10.35","@mediapipe/drawing_utils":"^0.3.1620248257","@tensorflow/tfjs-converter":"^4.22.0","@tensorflow/tfjs-backend-cpu":"^4.22.0","@tensorflow/tfjs-backend-wasm":"^4.22.0","@tensorflow/tfjs-backend-webgl":"^4.22.0","@tensorflow-models/face-detection":"^1.0.3","@tensorflow-models/face-landmarks-detection":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^3.1.0","esbuild":"^0.25.11","prettier":"^2.8.8","typescript":"^4.8.2","@types/node":"^18.7.13","@types/jsdom":"^20.0.0","@types/stats":"^0.16.30","@types/three":"^0.182.0","@types/skmeans":"^0.11.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mtr-facemesh_7.8.0_1789574078898_0.6531235462487468"}}},"time":{"created":"2023-01-12T17:04:15.392Z","modified":"2026-09-16T15:54:39.308Z","1.0.0":"2023-01-11T14:45:11.866Z","2.0.0":"2023-01-12T17:04:15.900Z","3.0.0":"2023-05-31T16:47:51.911Z","4.0.0":"2023-10-09T17:03:34.870Z","4.0.1":"2023-10-11T21:00:07.932Z","4.1.0":"2024-05-22T19:14:51.715Z","4.1.1":"2024-05-22T19:16:36.559Z","5.0.0":"2024-05-22T19:35:20.516Z","5.1.0":"2024-07-03T14:41:44.460Z","5.1.1":"2024-07-12T18:29:58.047Z","5.1.2":"2024-07-25T13:10:24.431Z","5.1.3":"2024-08-12T15:04:35.431Z","5.1.4":"2024-08-23T14:28:43.155Z","5.1.5":"2024-08-23T16:03:33.360Z","5.1.6":"2024-08-30T19:25:25.951Z","5.1.7":"2024-09-12T13:39:48.863Z","5.2.0":"2024-09-18T20:31:06.737Z","5.2.1":"2024-09-19T14:29:13.152Z","5.2.2":"2024-09-24T21:02:25.980Z","5.2.3":"2024-10-02T19:23:30.191Z","5.2.4":"2024-10-08T17:55:53.500Z","5.2.5":"2024-10-28T15:44:54.451Z","5.2.6":"2024-10-29T20:44:01.398Z","5.2.7":"2025-01-22T13:43:53.752Z","5.3.0":"2025-01-28T16:52:33.934Z","5.3.1":"2025-02-24T18:42:44.279Z","5.4.0":"2025-02-28T16:26:09.655Z","5.4.1":"2025-03-06T21:02:48.388Z","6.0.1":"2025-04-25T14:27:27.989Z","6.0.0":"2025-04-25T14:28:17.102Z","6.0.2":"2025-04-25T20:30:21.861Z","6.0.3":"2025-05-05T19:16:59.104Z","6.1.0":"2025-09-12T17:05:23.374Z","6.2.0":"2025-09-17T18:36:06.020Z","6.2.1":"2025-10-17T19:22:15.548Z","6.3.0":"2025-10-24T18:58:50.990Z","6.4.0":"2025-10-31T14:01:12.715Z","6.4.1":"2025-11-04T19:35:56.315Z","7.0.0":"2026-03-04T19:13:54.884Z","7.1.0":"2026-05-29T16:45:47.069Z","7.2.0":"2026-05-29T16:48:59.585Z","7.2.1":"2026-06-02T16:59:19.494Z","7.4.0":"2026-08-06T15:50:00.866Z","7.6.2":"2026-08-12T21:15:46.518Z","7.6.3":"2026-08-14T16:07:36.542Z","7.7.0":"2026-09-10T13:26:34.639Z","7.8.0":"2026-09-16T15:54:39.119Z"},"bugs":{"url":"https://github.com/morethanrealio/mtr-facemesh/issues"},"author":{"name":"morethanrealio"},"license":"ISC","homepage":"https://github.com/morethanrealio/mtr-facemesh#readme","keywords":[],"repository":{"url":"git+https://github.com/morethanrealio/mtr-facemesh.git","type":"git"},"description":"Face Mesh for MTR projects.","maintainers":[{"name":"morethanreal-io","email":"hello@morethanreal.io"}],"readme":"# mtr-facemesh\n\n## Contents\n\n- [Description](#description)\n- [Usage](#usage)\n- [Features](#features)\n- [Authoring an eyeliner](#authoring-an-eyeliner)\n- [Authoring a glitter](#authoring-a-glitter)\n- [Demo](#demo)\n- [WASM Compilation](#wasm)\n\n## Description\n\nThe current repository is the mtr-facemesh project. The module projects 3D masks (in this case make ups) on a face from a video element detected by an AI model.\n\n## Usage\n\nIn order to use the module, add the div with **id=\"facemesh-holder\"** and set the width and height of the canvas to show.\n\n```html\n<div id=\"facemesh-holder\" style=\"width: 282px; height: 500px;\"></div>\n```\n\nAfter that, you can create the FaceMesh object with the following.\n\n```js\nimport {FaceMesh, THREE} from './lib/mtr_facemesh.js';\n\n...\n\nconst config = {\n  divName: \"facemesh-holder\",\n  modelConfigs: undefined,\n  meshConfigs: [\n    {\n        alphaMapDir: './assets/imgs/face/mask_lips.jpg',\n        ambientOcclusionMapDir: './assets/imgs/face/ambient_occlusion.png',\n        normalMapDir: './assets/imgs/face/normal_texture_lips_3.png',\n        color: 0xff0000,\n        roughness: 0.25,\n        metalness: 0.1,\n        opacity: 0.3,\n        clearcoat: 0.5,\n        clearcoatRoughness: 1.0,\n    }\n  ],\n  binaryDir: './lib',\n  refineLandmarks: true,\n  backend: 'webgl',\n  flipCamera: true,\n  verbose: true,\n  showFPSPanel: true,\n  showScreenLogs: true,\n  loadedCallback,\n  errorCallback,\n  cameraStatusCallback,\n  oneEuroFilterConfig: {\n    mincutoff: 0.005,\n    beta: 0.12,\n    dcutoff: 1,\n  },\n  faceRetouchConfig: {\n    retouchAlphaMask: './assets/imgs/face/facemesh_alpha_base_v4.jpg',\n    opacity: 1.0,\n    blurRadius: 10,\n  },\n};\n\nfaceMesh = new FaceMesh(config);\n```\n\nWhere config is an object with properties:\n\n- `divName` HTML div ID of the AR holder. Default is facemesh-holder.\n- `imageID` HTML image element ID that will replace the camera.\n- `modelConfig` object of configuration for the 3D model:\n  - `dir`: 3D model file path. File must be .glb or .gltf. No default.\n  - `animationSpeed`: 3D model animation speed. (0, 1) for slower animations and animationSpeed > 1 for faster animations. Defaults to 1.\n  - `scale`: Sets how big the 3D model will be. Defaults to 1.\n  - `position`: position of the model considering camera is at {0, 0, 0}. Defaults to global {0, 0,-distance}.\n  - `rotation`: rotation of the model. Defaults to {0, 0, 0}.\n  - `loop`: if the model should loop. Default is true.\n  - `showMannequin`: show the head occluder to better position the object. Default is false.\n- `meshConfigs` Array of configuration for each make up mesh:\n  - `legacy`: if set to false the layer renders through the custom DynamicMaterial\n    shader (video-derived relief normal and ambient occlusion, PMREM env map,\n    frame light probe) instead of three's MeshPhysicalMaterial. Note this is\n    opt-out: anything other than an explicit false uses the legacy material.\n    Default is true.\n  - `region`: render this layer on its own geometry, generated each frame from the\n    landmarks, instead of on the shared face mesh. `'eyeLidUpper'` and\n    `'eyeLidLower'` build a ribbon along the corresponding tracked lash line of\n    both eyes, with a rectangular parametrisation of its own: `u` is normalised\n    arc length along the lash line (0 at the inner canthus, `eyeStrip.cornerU` at\n    the outer one, 1 at the wing tip) and `v` is the offset away from the\n    aperture, 0 at the lash margin and 1 at the far edge of the stroke. Artwork is\n    therefore authored as a flat strip — see\n    `demos/assets/imgs/face/eye_strip_uv_template.png` — rather than as a sliver\n    of the canonical face atlas.\n\n    One region per layer. An upper and a lower liner are two `meshConfigs`\n    entries, which keeps one entry = one mesh and lets each carry its own artwork\n    and stroke width; a lower liner is normally thinner and gets no wing by\n    default.\n\n    Note the shape must reach the shader through `alphaMapDir`, not\n    `colorMapDir`, if you want `color` to tint it. `colorMapDir` is multiplied as\n    a vec4, so a map whose RGB is black inside the stroke — which is true of every\n    eyeliner asset in this repo — multiplies `color` away. `alphaMapDir` is read\n    on the green channel; `tools/bake_eye_strip.py --emit mask` and\n    `tools/make_liner_strip.py` both write that form.\n\n    This is what an eyeliner needs, because on the shared face mesh a liner\n    inherits two defects that no amount of UV work removes. The `arrayExpand`\n    table in `src/face_mesh_geometry.ts` moves each lid crease vertex to the\n    midpoint toward the lash vertex under it while the UV table stays put, which\n    compresses the artwork exactly 2x across the band; and the band's 3D area\n    swings about 2.6x during a blink against a fixed UV area, which smears the\n    artwork down the lid. Both live in a free scale factor that defining `v`\n    against a pose-invariant length removes.\n\n    Requires `legacy: false`: `MeshPhysicalMaterial` ignores the vertex `color`\n    attribute unless `vertexColors` is set, which would silently drop the seam\n    feather. The layer is skipped with a `verbose` note otherwise. No default.\n  - `eyeStrip`: tuning for `region: 'eyeLidUpper'`. All fields optional.\n    - `columns`: spine samples per eye, wing included. Sets the residual\n      faceting: 48 gives 36 samples over the eye and about 3.5 deg of turn per\n      segment, against 14.8 for the 8-segment landmark polyline. Default is 48.\n    - `rows`: samples across the band. Default is 4.\n    - `cornerU`: `u` of the outer canthus; everything above it is the wing. It is\n      snapped to the nearest real column and the snapped value is readable back\n      off the geometry. Default is 0.75.\n    - `strokeWidth`: band width as a fraction of eye width (inner canthus to\n      outer canthus). Eye width is pose-invariant, so this is a constant physical\n      stroke: 0.11 is about 2.1 mm on an adult. Default is 0.11.\n    - `wingLength`: wing length, also a fraction of eye width. Default is 0.2.\n    - `wingLift`: wing direction, 0 straight out along the lash tangent, 1 fully\n      up the lid. Default is 0.5.\n    - `lift`: offset toward the camera along the surface normal, as a fraction of\n      eye width. Parallax only — depth correctness comes from `depthWrite: false`\n      plus render order. Default is 0.02.\n    - `foldOpenFrac`: fraction of the authored stroke visible with the eye wide\n      open. Default 1.0, i.e. off. Lid skin rolls under the supratarsal crease as\n      the eye opens, so lowering this makes a blink *reveal* more of the stroke\n      instead of stretching a fixed range over more skin. The direction is\n      established; the magnitude is not, so it ships off — `v` = 1 is the band\n      exposed at the canonical rest pose, which is the open-eye reference\n      `tools/bake_eye_strip.py` targets, and a value below 1.0 hides art the bake\n      placed. Tune it live in `demos/controls` against a real blinking face.\n      Width and `v` range always scale together, so skin offset =\n      `v * strokeWidth * eyeWidth` holds at every lid state. Leave it at 1.0 on\n      `'eyeLidLower'`: the fold is an upper-lid phenomenon, the lower lid barely\n      moves during a blink, and the aperture signal cannot tell the two apart.\n    - `foldAttackMs` / `foldDecayMs`: time constants of the running open-eye\n      reference that normalises the aperture across people — fast to learn a\n      wider eye, slow to forget one, so a blink never drags it down. Defaults 150\n      and 8000.\n    - `seamFeather`: alpha ramp at the ribbon's free boundaries, as a fraction of\n      the band (for `v` = 1) and of the strip length (for the two ends). The lash\n      margin at `v` = 0 is never feathered. Set to 0 if the artwork already fades\n      at its edges. Default is 0.12.\n  - `colorMapDir`: texture file path. File must be an image. No default.\n  - `alphaMapDir`: alpha mask file path. File must be an image. No default.\n  - `ambientOcclusionMapDir`: illumination mask file path. File must be an image. No default.\n  - `normalMapDir`: normal map file path. File must be an image. No default.\n  - `color`: make up color in hexadecimal. Default is 0xffffff.\n  - `metalness`: how much the material is like a metal. Wood or stone use 0.0, metallic use 1.0. Default is 0.0.\n  - `opacity`: float in the range of 0.0 - 1.0 indicating how transparent the material is. Default is 1.0.\n  - `clearcoat`: use clear coat related properties to enable multilayer materials\n    that have a thin translucent layer over the base layer. Default is 0.0.\n  - `roughness`: represents the intensity of the clear coat layer, from 0.0 to 1.0. Default is 0.0.\n  - `clearcoatRoughness`: roughness of the clear coat layer, from 0.0 to 1.0. Default is 0.0.\n  - `ior`: index of refraction, which sets how reflective the layer is —\n    `F0 = pow2((ior - 1) / (ior + 1))`, so the default 1.5 gives the usual 4%\n    dielectric reflectance and raising it reflects more. Default is 1.5.\n  - `reflectivity`: **inert** — the uniform exists but no shader line reads it. It\n    is still accepted so existing configs keep working unchanged. Use `ior` for how\n    reflective the layer is, and `specularIntensity` to scale it.\n  - `envMapDir`: static HDR environment map file path for this layer, giving it\n    image-based lighting. No default.\n  - `normalScale`: strength of the combined video-derived and asset normal\n    perturbation. Lower it toward 0 to flatten the relief and calm reflection\n    noise at low roughness. `legacy: false` only. Default is 1.0.\n  - `frameLight`: if set, the camera frame itself becomes the light source for\n    this layer: the real per-pixel shading in the frame is fed to the material as\n    irradiance and radiance, so roughness, metalness, IOR and clearcoat shape the\n    measured light exactly as they shape environment-map light. `legacy: false`\n    only. Merely being present switches the illumination on, so `frameLight: {}`\n    is enough — every field below then takes its value from\n    `DEFAULT_FRAME_LIGHT_CONFIG` (exported by the library), which is the single\n    source of truth for these defaults. Omit `frameLight` entirely to leave the\n    illumination off.\n    Because the probe replaces the scene lights rather than supplementing them,\n    the defaults are calibrated with the directional and ambient intensities at 0\n    (see `autoLightIntensity` below).\n    Each field has exactly one job, listed below with what it acts on. Changing one\n    should never alter another's territory.\n    - 'irradiance' (diffuse): ambient level taken from the frame. The frame's own\n      per-pixel shading, normalised by the measured region mean so it is independent\n      of skin tone and exposure. This is the term that lights the layer; it adds to\n      the ambient light, so zero the scene lights to see the probe alone.\n      Default is 2.64.\n    - 'gain' (specular): overall highlight brightness. A plain monotone multiplier\n      over the whole highlight — it does not move or resize it. Default is 1.5.\n    - 'hdr' (specular): highlight contrast, i.e. how much brighter the peak is than\n      the rest of the lit region. 0.0 lights the region evenly. It shapes the\n      brightness profile and never the extent. Default is 4.0.\n    - 'region' (specular): how much of the make-up is highlighted, in units of the\n      measured mean-to-p85 range. 1.0 means only pixels above the p85, which is\n      already a very small core; useful values sit below that, and 0.0 highlights\n      everything above the mean. Default is 0.6.\n    - 'softness' (specular): edge softness of that region, in the same units. The\n      region's centre does not move as this changes. Default is 0.35.\n    - 'detail' (specular): amount of fine real specular sparkle — the high-frequency\n      texture the broad region averages away. Added on top of the region rather than\n      traded against it, so the two are independently visible. Default is 0.35.\n    - 'radius': radius of the local average that separates the fine detail from the\n      broad region, in x UV units (scaled by aspect in y). Too small and 'detail' is\n      only sensor noise; this cannot reuse the shared blurred video texture, which is\n      about 1.6 px because it feeds the relief normal. Requires\n      `gaussianSobelSmoothing` to be negative (a blur). Default is 0.0135.\n    - 'sheer' (albedo): how much of the real lip or skin chroma shows through the\n      make-up colour. Hue only — the brightness already arrives as irradiance, so\n      this does not double-count the shading. 0.0 is opaque. Default is 0.5.\n\n    Only 'irradiance' and 'sheer' are calibrated values; the specular defaults are\n    starting points. `demos/controls` exposes all of them live, plus a **DEBUG view**\n    that replaces the layer's output with one intermediate term (the shading field,\n    the region mask, the detail, the irradiance or the full radiance) so a single\n    parameter can be checked in isolation.\n\n- `binaryDir` Path to the face mesh binary files. No default.\n- `refineLandmarks` Refine landmarks option. Default is true.\n- `backend` Tensorflow backend: webgl, wasm or cpu. Default is webgl.\n- `flipCamera` Flips the feedback camera. Default is false.\n- `verbose` If set to true shows logs on the console. Default is false.\n- `loadedCallback` Function to call after the AI model is loaded. No default.\n- `cameraStatusCallback` Function to call after the video permission (no default):\n  - 'requesting': when user is requested for the camera\n  - 'hasStream': when user is granted access for the camera\n  - 'failed': when something went wrong with the camera\n- `errorCallback` Function to call after any error. No default.\n- `showFPSPanel` If set to true shows the FPS on the main loop. Default is false.\n- `showScreenLogs` If set to true shows the FPS for every step on the main loop. Default is false.\n- `oneEuroFilterConfig` One Euro Filter parameters.\n  - 'mincutoff': minimum cutoff frequency. Decreasing the minimum cutoff frequency decreases slow speed jitter. Default is 0.001.\n  - 'beta': speed coefficient. Increasing the speed coefficient decreases speed lag. Default is 0.007.\n  - 'dcutoff': cutoff frequency. Default is 1.\n- `faceRetouchConfig` face retouch parameter (one object).\n  - 'retouchAlphaMask': path to the alpha mask file. Only apply the retouch on the mask. No default.\n  - 'blurRadius': Face retouch intensity. Default is 10.\n  - 'color': Foundation color. Default is 0xffffff (white).\n  - 'opacity': Foundation opacity. Default is 0.0 (transparent).\n- `faceRetouchConfigs` face retouch parameters array (multiple face retouch objects). Each object of the array must contain:\n  - 'retouchAlphaMask': path to the alpha mask file. Only apply the retouch on the mask. No default.\n  - 'blurRadius': Face retouch intensity. Default is 10.\n  - 'color': Foundation color. Default is 0xffffff (white).\n  - 'opacity': Foundation opacity. Default is 0.0 (transparent).\n- `foundationMatchConfig` If set, executes the foundation match algorithm after togglePhoto method.\n  - 'option': tone algorithm option.\n  - 'colors': array of foundation colors in RGB and its names.\n- `gaussianSobelSmoothing` Smoothing applied to the video before it is used to\n  derive the relief normal, the ambient occlusion and the frame light probe's\n  specular residual. Negative is a blur, positive is a sharpen. The residual needs\n  a blur, so keep this below 0 when using `frameLight`. Default is -2.0.\n- `frameLightProbeConfig` Overrides for the frame light probe, the CPU luminance\n  measurement that calibrates `frameLight`. Omit to take\n  `DEFAULT_FRAME_LIGHT_PROBE_CONFIG` (exported by the library), which is the single\n  source of truth for the defaults.\n  - 'sampleSize': side of the square offscreen canvas read back. Default is 96.\n  - 'updateInterval': frames between readbacks. Default is 3.\n  - 'regionRungs': outer/inner landmark pairs defining the measured region.\n    Defaults to the 22 lip rungs.\n\nThe scene's directional and ambient lights are switched on or off automatically at\nconstruction. They exist for the legacy lighting path, so they are **on** when any\nmesh is legacy (`legacy !== false`) or a `modelConfig` is present, and **off** —\nboth intensities parked at 0 — when every layer is `legacy: false` and therefore\nlit by the frame light probe and/or an env map. They are shared by the whole scene,\nso a single legacy layer anywhere keeps them on for everything. Set\n`autoLightIntensity` to override.\n\nWhile the flag is true, **luminance** re-derives both intensities from frame\nbrightness every 60 frames. To hold your own values, clear the flag first inside\n**loadedCallback**, otherwise they are overwritten within a couple of seconds:\n\n```js\nfaceMesh.autoLightIntensity = false;\nfaceMesh.directionalLight.intensity = 0.0;\nfaceMesh.ambientLight.intensity = 0.0;\n```\n\nThe method **requestPermissions** must be called after the model is loaded using the **loadedCallback** config property, since the face detector only starts predicting after the video is set. The method receives the camera configuration as a parameter, the same as seen at [getUserMedia](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia). Inside **loadedCallback** you must also add lights to the scene since the textures are very sensible to it. The following code is an example of one **loadedCallback**.\n\n```js\nconst loadedCallback = function () {\n  scene = faceMesh.getScene();\n\n  const hemiLight = new THREE.HemisphereLight(0xffffff, 0x080820, 0.5);\n  scene.add(hemiLight);\n\n  const ambientLight = new THREE.AmbientLight(0x404040, 0.1);\n  scene.add(ambientLight);\n\n  faceMesh.requestPermissions({\n    facingMode: {ideal: 'user'},\n    width: window.innerHeight,\n    height: window.innerWidth,\n  });\n};\n```\n\nWith these lines of code it's already possible to run the face mesh. If you want to personalize the threejs scene, you can do it by using the get methods `faceMesh.getRenderer()`, `faceMesh.getScene()`, `faceMesh.getOrthographicCamera()`, `faceMesh.getPerspectiveCamera()`, `faceMesh.getGroup()` and `faceMesh.getMeshes()`. For example, you can change material params with `faceMesh.getMeshes()[0].material.color = new THREE.Color(0xff0000);`.\n\n## Features\n\nThe AR object also include other functionalities.\n\n### Partial Render\n\nThe partial render works like a curtain for the threejs renderer and only renders what is from 0 to `windowSlider.value * canvas.width`. For this, you need to create a checkbox and a slider from 0 to 1 and then use them as follows.\n\n```js\nconst windowCheckbox = document.getElementById('window-checkbox');\nconst windowSlider = document.getElementById('window-slider');\n\nwindowCheckbox.oninput = function () {\n  faceMesh.setWindow(windowCheckbox.checked);\n  windowSlider.style.display = windowCheckbox.checked ? 'block' : 'none';\n};\n\nwindowSlider.oninput = function () {\n  faceMesh.setWindowFactor(windowSlider.value);\n};\n```\n\n### Photograph\n\nThe photograph functionality is simple and works like it is said. When the method **togglePhoto** is called, the animation loop freezes/unfreezes depending on the actual state. You only need to create on html and use the following code. The method also returns a promise of a canvas of the photograph.\n\n```js\nconst screenshotButton = document.getElementById('photo-button');\n\nscreenshotButton.onclick = async function () {\n  const frozenVideoCanvas = await faceMesh.togglePhoto();\n};\n```\n\n### Share\n\nThe next feature complements the photograph feature. When the **share** method is called, the object takes a screenshot and then share it through the selected social media. For that, you only need to create a button to trigger the method.\n\n```js\nconst shareButton = document.getElementById('share-button');\n\nshareButton.onclick = function () {\n  faceMesh.share('screenshot');\n};\n```\n\n### Stop and Continue\n\nThe application can be stopped or continued after calling **.stop()** and **.continue()** methods. They are useful when you want to stop the application with a close button or start the application instantly after the user clicks a start button. The demo shows an example of usage.\n\n```js\nconst closeButton = document.getElementById('close-button');\n\nvar toggleCloseContinue = true;\n\ncloseButton.onclick = function () {\n  if (toggleCloseContinue) {\n    faceMesh.stop();\n    closeButton.textContent = 'Continue';\n  } else {\n    faceMesh.continue();\n    closeButton.textContent = 'Close';\n  }\n\n  toggleCloseContinue = !toggleCloseContinue;\n};\n```\n\n### Foundation Color\n\nIf `faceRetouchConfig` and/or `faceRetouchConfigs` are set, it is possible to set a color on the users face as if there is a foundation using **.setFoundation** method. The function receives two parameters, color and opacity. The `color` is a number array with 3 positions in RGB space, and the `opacity` is a floating point number between 0.0 and 1.0 that is the strength of the color. If there are multiple face retouch objects, you can set the `color` and `opacity` with the third parameter `index`. The following example will make up the face with red foundation.\n\n```js\nfaceMesh.setFoundation([255, 0, 0], 0.5, 0);\n```\n\n### Light Exposure\n\nLight exposure is a feature related to face color match since it detects the illumination on the users face. If the user face is under or over exposed, the `faceMesh.exposure()` will return `-2` and `2` respectively.\n\n```html\n<button id=\"exposure-log\" style=\"position: absolute; left: 5%; top: 15%;\">Loading</button>\n```\n\n```js\nfunction anim() {\n  document.getElementById(\n    'exposure-log'\n  ).textContent = `${faceMesh.exposure()}`;\n}\nsetInterval(anim, 500);\n```\n\n### Face Color Match\n\nTo use it, call the method `.getFaceClosestColor()` to get the object of closest color. This feature matches the users face color to the closest color in `foundationMatchConfig.colors` and return an object with attributes `foundationID`, `skinColor` and `distances`. \n  - `foundationID` is the index of the best foundation ID in `foundationMatchConfig.colors` array;\n  - `skinColor` is the extracted color of the user skin in RGB space;\n  - `distances` This attribute is also an object with attributes `distance` and `index`. The `index` is the index to the `foundationMatchConfig.colors` array and the `distance` is the euclidean distance from `foundationMatchConfig.colors[foundationID]` to `foundationMatchConfig.colors[distances[..].index]`. This array is sorted in ascending order by the `distance` attribute.\n\n\n```js\nFaceMesh(\n  ...,\n  foundationMatchConfig: {\n    option: 1,\n    colors: [\n      {color: [203, 176, 145], name: '00'},\n      {color: [169, 129, 83], name: '50'},\n      {color: [77, 52, 48], name: '100'},\n    ]\n  }\n)\n```\n\n```js\nwindow.afterScreenshot = function afterScreenshot() {\n  // matches the face color with one of the 3 colors set in foundationMatchConfig\n  const distances = faceMesh.getFaceClosestColor().distances;\n  // second best color distance, and index\n  console.log(distances[1].distance, distances[1].index);\n  const foundationId = faceMesh.getFaceClosestColor().foundationID;\n  console.log(window.foundations[foundationId], foundationId);\n  // uses the setFoundation feature to set the matched color on faceRetouch as a foundation\n  faceMesh.setFoundation(window.foundations[foundationId].color, 0.3, 0);\n```\n\n### Using an image instead of camera\n\nIf faceMesh is created with `imageID` set, the video camera will be replaced with the image loaded on html with `id=<imageID>` and **.requestPermissions()** method will not be necessary to call. For example, an image tag is loaded with id \"photo-id\", and faceMesh is created with it replacing the camera.\n\n```html\n<img id=\"photo-id\" src=\"./any-image\" />\n```\n\n```js\nfaceMesh = new FaceMesh({\n  imageID: \"photo-id\",\n  ...\n});\n```\n\n## Authoring an eyeliner\n\nA `region: 'eyeLidUpper'` / `'eyeLidLower'` layer takes its artwork as a flat\n**strip**: `x` is arc length along the lash line, `y` is offset across the lid, and\n`v = 0` — the lash margin — is the **bottom** row of the image. You do not have to\ndraw in that space; if the art already exists in the canonical face-UV atlas, one\ncommand reprojects it.\n\nThere are two routes to a strip: the studio, in the browser, or the two Python\ntools at a prompt. They do the same arithmetic — `tools/check_strip_bake.py`\ndiffs them — so pick whichever suits the person doing the work.\n\n### The studio (`demos/eyeliner-studio/`)\n\n```sh\nnpx http-server .          # from the repo root, so /src is reachable\n# then open http://localhost:8080/demos/eyeliner-studio/\n```\n\nThree panels: paint the strip on the left, watch it on a tracked face in the\nmiddle, tune the layer on the right. **Bake → face** pushes the drawing into the\nrunning material with no file round trip (and *auto after each stroke* does it\nfor you), so a taper can be judged on a blinking eye rather than guessed at.\n\n- **Import** takes either space. A wide image is loaded as a strip; a squarish one\n  is treated as canonical-atlas art and reprojected on the way in — the same bake\n  `tools/bake_eye_strip.py` does, using whatever `strokeWidth`, `cornerU` and\n  `wingLength` the ribbon is currently set to. Both mask conventions are\n  detected: an image with no transparent pixel is read as a mask (shape in RGB),\n  anything else as art (shape in alpha).\n- **Generate a base stroke** is `tools/make_liner_strip.py` in the page, for when\n  there is no art to start from.\n- The **guides** are read live off the geometry, and they are the point of doing\n  this in a browser at all: `v` labelled in millimetres of skin, where the outer\n  canthus falls, which bands the ribbon feathers away, and — the one that catches\n  people — the `foldOpenFrac` line, above which nothing shows while the eye is\n  open.\n- **Download strip PNG** writes the same file the Python tools write, and **copy\n  config snippet** gives you the `meshConfigs` entry with the `strokeWidth` the\n  art was actually drawn against, which is the trap below made survivable.\n\nThe paint canvas is 1024×128 whatever it is displayed at, so the pointer maps\nstraight to strip texels; *zoom v* only stretches the view, because a strip shown\nat its true 8:1 is unpaintable.\n\n### Bake existing atlas art into a strip\n\n```bash\npython3 tools/bake_eye_strip.py demos/assets/imgs/face/color_map_eye_liner.png \\\n  --emit mask --smooth-u 6 \\\n  --out demos/assets/imgs/face/eye_liner_upper_mask.png\n```\n\nNeeds only `numpy` and `Pillow`. Then point a layer at it:\n\n```js\n{\n  legacy: false,                 // required with region\n  region: 'eyeLidUpper',\n  alphaMapDir: '../assets/imgs/face/eye_liner_upper_mask.png',\n  color: 0x14100f,               // this is what tints it\n  envMapDir: '../assets/imgs/face/studio2.hdr',\n  eyeStrip: {strokeWidth: 0.11}, // MUST match the bake's --stroke\n}\n```\n\nThe flags that matter:\n\n- **`--emit mask`** — almost always what you want. It writes the shape into RGB and\n  makes the image opaque, which is the form `alphaMapDir` needs, because the shader\n  reads `alphaMap` on the **green** channel. Without this you would reach for\n  `colorMapDir`, which is multiplied as a **vec4** — and every eyeliner asset in\n  this repo is pure black inside the stroke, so it would multiply the layer's\n  `color` away and the stroke would be black whatever you set. Use the default\n  `--emit color` only for art whose RGB you actually want.\n- **`--region lower`** — bakes onto the lower lash line instead. Must match the\n  layer's `region`.\n- **`--stroke F`** — where `v = 1` lands, as a fraction of eye width. Default 0.11\n  (about 2.1 mm). **It must equal the layer's `eyeStrip.strokeWidth`**, or `v` means\n  two different things in the art and in the geometry.\n- **`--smooth-u 6`** — optional. The atlas assets here carry a 1–13 texel stroke, so\n  their edge is quantised to whole texels and that transfers as a ~70 µm wobble\n  along the top edge. It is not artistic intent — a synthetic smooth source bakes\n  with a measured 0.0 µm wobble. Leave it off (`0`) for a strictly faithful bake.\n- **`--eye average|left|right`** — `average` (default) cancels left/right asymmetry\n  in the source. The art in this repo is genuinely asymmetric: 15.6% of pixels\n  differ by more than 32 alpha between the two eyes.\n\nIt prints where the ink landed, which is the number to sanity-check:\n\n```\nink occupies v 0.000..0.656  (0.00..1.40 mm from the lash margin on a 19.4 mm eye)\nink occupies u 0.055..0.976   (outer canthus at u=0.745, wing beyond it)\n```\n\nIf the stroke renders thinner than expected, that report is the first place to\nlook — a thin band of ink inside a wide `strokeWidth` band renders thin, and\nraising `strokeWidth` only buys more empty band.\n\n### Or generate one parametrically\n\nWith no art to bake:\n\n```bash\npython3 tools/make_liner_strip.py --region lower \\\n  --out demos/assets/imgs/face/eye_liner_lower_mask.png\n```\n\nAlso mask form. `--start-u` / `--end-u` bound the stroke along the lash line,\n`--thick-inner` / `--thick-outer` ramp its thickness, `--edge` softens the far edge.\nNote `--end-u` defaults to the outer canthus on the lower lid: with `wingLength: 0`,\nthe lower-lid default, every column past the canthus collapses onto it, so ink\npainted out there is never rendered.\n\n### Checking the result\n\nLoad `demos/controls/`, set `USE_STRIP_TEMPLATE = true` in its `config.js`, and both\nribbons render `eye_strip_uv_template.png` instead. The 32 ticks should be evenly\nspaced along the eye, the diagonal should read as one smooth curve, the band should\nhold its width through a blink, and the green bar should sit on the outer canthus.\nCheck that before judging artwork — a geometry problem otherwise reads as an art\nproblem.\n\n## Authoring a glitter\n\nGlitter is a **separate specular lobe**, not a bumpier make-up layer. Any\n`legacy: false` layer can carry it — lipstick, blush, eye shadow, an eyeliner\nribbon — by adding a `glitter` block to its `meshConfigs` entry. It is off unless\nasked for: `intensity` defaults to 0 and the shader skips the whole block.\n\n### Why it is not just a map\n\nThe three reasons a flake field cannot be expressed through the existing maps,\nall measurable in this tree:\n\n- `normalMapDir` is blended **50/50** with the video-derived normal\n  (`DynamicMaterialShader.ts`, `mapN = mix(mapN1, mapN2, 0.5)`), so authored\n  flake normals arrive at half strength, and `normalScale` scales both together.\n- There is **one `material.roughness` per layer**. A flake is a near-mirror\n  (~0.06) suspended in a matte film (~0.8). One scalar cannot be both.\n- Every sampler reads bare `texture2D(map, tUV)` — **no UV transform anywhere** —\n  and the lips are only **1.02% of the UV square** (78 of 880 triangles, 483x177\n  px at 2048²). Flake density would be capped by atlas resolution. `glitter.scale`\n  is the one place in the library that tiles a map.\n\n### The studio (`demos/glitter-studio/`)\n\nPick a palette, shape the flakes, watch it on a tracked face, download the two\nPNGs. Nothing touches disk until you press Download.\n\n```sh\nnpx http-server .          # from the repo ROOT\n# then open http://localhost:8080/demos/glitter-studio/\n```\n\nThe generator runs in the browser as `glitter_gen.js`, a dependency-free port of\n`tools/make_glitter_map.py`. The panel prints the command line that reproduces\nexactly what you downloaded, plus the `glitter` block to paste into a layer —\nthe studio is for **finding** the numbers, the tool is for reproducing them in a\nbuild.\n\nThat duplication is only tolerable while the two agree, so\n`python3 tools/check_glitter_gen.py` diffs them. Change one side, change the\nother, re-run it. Unlike `check_strip_bake.py` the **tolerance is zero**: there\nis no supersample collapse here, just a fixed sequence of IEEE double operations\nboth languages perform identically. Measured: all 13 cases byte-identical, and\n`glitter_gen.js` reproduces the shipped 1024² `glitter_multi` PNGs exactly.\n\nAgreeing at all cost numpy. `default_rng` is PCG64 with no JS equivalent, so\n**neither side uses its language's RNG** — both run the same explicit mulberry32\nand draw the same seven values per flake in the same order. Don't \"simplify\" the\nPython back to `np.random`; it would silently divorce the studio from the tool.\nThe checker also compares the PRNG stream, the rounding and the HSV conversion\nhead-on, because pixel diffing does not cover them: the only `rint` tie a real\nmap produces is 127.5, where every rounding rule agrees, so a broken tie-break\npasses every image case.\n\n**The frame light is on a preset dropdown in both glitter demos**, because it is\nthe thing most likely to bury the flakes. The studio opens on a `calm` preset —\nits job is judging flakes, not judging a look — while `demos/glitter` opens on\nthe validated `tuned` values; each has the other one click away, plus\n`calibrated (demos/controls)` and `off`.\n\nIf the illumination runs away, look at the read-only **`measured by the probe`**\nblock before touching a slider. Every specular term in `frame_light_radiance` is\n`(luma - mean) / max(hi - mean, 0.02)`, so the probe's two measurements are the\ninput the sliders merely scale, and `hdr` and `detail` both multiply a value that\nis **deliberately not clamped at the top**. A `hi` sitting almost on top of `mean`\nmeans the camera is seeing a flat lip region and the 0.02 floor, not your slider,\nis deciding the result. `probe running` freezes the measurement, which is the only\nway to tell a jumpy reading apart from a bad parameter. Debug views 4 and 5 show\nthe irradiance and radiance terms on their own.\n\nOne thing to know before judging density: **`--count` is an absolute number of\nflakes, not a density.** Flake positions scale with the tile while the radius\nstays in pixels, so the same count at 2048² spreads over four times the area at a\nquarter of the coverage. Preview size therefore defaults to the export size, and\nthe panel turns amber when you make them differ.\n\n### Generate the two maps\n\nThey are written together and paired **texel by texel**, so they must always be\nused and swapped as a pair:\n\n| file | RGB | A |\n|---|---|---|\n| `<prefix>_normal.png` | tangent-space flake normal, `(128,128,255)` between flakes | flake coverage |\n| `<prefix>_color.png` | that flake's base hue | that flake's film thickness, 0..1 |\n\n```sh\npython3 tools/make_glitter_map.py     --out-prefix demos/assets/imgs/face/glitter_festa     --size 1024 --count 6000 --radius-px 3.0 --slope 0.75     --palette '#ff3d8b,#ffd23d,#3dffd2,#8b3dff,#ff5f3d,#3dff7a'\n```\n\n`--palette random` spreads saturated hues around the wheel instead. The map\ntiles: flakes crossing an edge are redrawn on the opposite side, so a 1024 tile\nrepeated a few times beats a 4096 one-shot at 1/16 the memory. Needs numpy +\nPillow, nothing else.\n\n### Wire it to a layer\n\nThis is the look `demos/glitter` ships, tuned on a live camera rather than\nassembled from defaults — start here rather than from the defaults:\n\n```js\n{\n  legacy: false,\n  alphaMapDir: '../assets/imgs/face/mask_lips.jpg',\n  envMapDir: '../assets/imgs/face/studio2.hdr',\n\n  // ior 1.0 puts the base's F0 at exactly 0, so it has NO dielectric specular\n  // and all its shine comes through the metallic path. That is what stops the\n  // film competing with the flakes for the same highlight — the pair of\n  // `ior: 1.0` + `metalness: 0.72` go together.\n  color: '#f66151', opacity: 0.37, roughness: 0.6,\n  metalness: 0.72, ior: 1.0, clearcoat: 0, envMapIntensity: 0.68,\n  frameLight: {\n    irradiance: 2.64, gain: 1.16, hdr: 2.86, region: 0.66,\n    softness: 0.44, detail: 0.93, radius: 0.021, sheer: 0.5,\n  },\n\n  glitter: {\n    normalMapDir: '../assets/imgs/face/glitter_multi_normal.png',\n    colorMapDir:  '../assets/imgs/face/glitter_multi_color.png',\n    intensity: 4.0,\n    coverage: 0.9,\n    scale: 2.9,          // how many times the tile repeats over the layer's UV\n    normalScale: 1.43,   // flake tilt, widened — the real \"more sparkle\" lever\n    roughness: 0.47,     // the flakes' own, independent of the layer's\n    metalness: 0.48,     // part-way from metallised film toward a pearl bead\n    iridescence: 0.68,   // 0 = fixed hues only, 1 = + full thin-film travel\n    thicknessRange: [180, 640],\n    ambient: 0.8,\n  },\n}\n```\n\nThe env-map orientation is **not** a `meshConfigs` field — it lives on the\n`FaceMesh`. That look also applies\n`faceMesh.setEnvMapRotation(0.12, 0.12, -2.32)` at startup; the roll does most of\nthe work, swinging the studio HDR's key light so it rakes across the lips rather\nthan hitting them head on, which is what gets flakes at different tilts to light\nup at different moments instead of all together.\n\nEvery field is live-tunable without a recompile — `faceMesh.setGlitter(index, {...})`\nand `faceMesh.setGlitterMaps(index, normalDir, colorDir)`. Unlike `alphaMapDir` /\n`colorMapDir`, the glitter samplers are compiled unconditionally, so a layer built\n**without** a `glitter` block can still be given one at runtime.\n\n### Two colour mechanisms, and how to tell them apart\n\n- **Base hue** — the flake's own pigment, from the colour map's RGB. Fixed: a\n  magenta flake stays magenta from every angle, its neighbour stays gold. This is\n  what separates one flake from the next in a still frame.\n- **Angle shift** — thin-film interference through the same Belcour & Barla\n  `evalIridescence` the layer's own `iridescence` uses, with a **per-flake**\n  thickness from the colour map's alpha. This is what makes a flake *travel*\n  (magenta → gold) as the head turns, and because the thickness is drawn per\n  flake, two flakes of the same base hue travel to different colours.\n\nSweep `iridescence` from 1 to 0 to see them separately: at 0 only the fixed hues\nremain.\n\n### Traps\n\n- **`metalness` defaults to 1, and it should.** A real cosmetic glitter particle\n  is metallised polyester, so its F0 *is* its colour, around 0.9. Built as a\n  dielectric at `ior` 1.8 instead, a flake reflects 8% — measured about **11x too\n  dim**, and it vanished under the lipstick entirely. Drop it toward 0 only for a\n  soft pearl.\n- **The layer's `opacity` fades the flakes**, because the lobe is added to\n  `outgoingLight` and blending multiplies that by the layer's alpha. That is also\n  what keeps the flakes inside the lip mask, so it is not a bug — raise\n  `glitter.intensity` on a sheer layer. On the `demos/controls` lipstick\n  (`opacity: 0.18`) the flakes need about **6** where an opaque base needs 1.\n- **Off-palette flakes are expected, and they are the loudest ones.** A red-only\n  palette still renders some yellow/cyan/blue, because a flake *reflects the\n  environment*: its colour on screen is its own tint **times the colour of\n  whatever it happens to be reflecting**. A red flake's F0 is about\n  `(0.39, 0.06, 0.08)` — the green and blue channels are not zero — so a flake\n  catching a bright cool highlight in `studio2.hdr` can come out blue. That is\n  correct PBR, the same reason a red mirror pointed at a blue lamp looks blue.\n  What makes it conspicuous is that those flakes are also the **brightest**\n  (measured 1.8x the rest overall, 2.8x for the env-map term alone), because they\n  are the ones catching the brightest light — so 3-4% of flakes dominate what the\n  eye picks out. Measured on a four-red palette, share of flakes far from red\n  (hue 45-260): **3.4% with thin film off, 4.2% at `iridescence: 0.62`**.\n  Attribution with thin film off — env map 2.7%, ambient 4.3%, frame light 1.2%.\n  Levers, in the order worth trying: `iridescence` toward 0 (it is what makes the\n  gold and cyan specifically), `saturation` 1.5-2 (tightens mean hue error from\n  16.5 to 12.8 degrees by zeroing the off-hue channels of F0 so light cannot leak\n  through them), a warmer env map or lower `envMapIntensity`, then\n  `frameLightDetail`, which injects the camera's own residual chroma.\n- **On a light base, `occlusion` is the control — not `intensity`, not\n  `saturation`.** The lobe is *added* to the make-up, and adding light can\n  brighten something already near white but cannot tint it. Measured on a white\n  lipstick: the flake contributes ~13 levels over a base at ~83, so the composite\n  is 86% base and the flake's own hue (saturation 0.75, matching the palette) is\n  dragged down to the base's. `occlusion` lets the flake **hide** the film under\n  it, which is what an opaque metallised particle really does. Measured colour\n  lift over the whole lip: **+0.007 additive → +0.027 at occlusion 1.0 → +0.037\n  with `saturation: 2.0`** on top. Expect flakes darker than the base in places —\n  an opaque red flake on a white film *is* darker, except where it catches a\n  highlight. Defaults to 0, so no look tuned before it existed moves.\n- **`coverage` thins flakes toward transparency; it does not remove them.** It\n  scales the map's alpha channel, so `coverage: 0.08` makes every flake 92%\n  transparent rather than leaving 8% of the flakes solid — and since occlusion is\n  weighted by the same value, it also caps occlusion at 0.08. Compensating with a\n  big `intensity` then fights the transparency instead of fixing it. For fewer,\n  solid flakes lower the generator's `--count` and leave `coverage` near 1.\n  Measured: `coverage 1.0` + `occlusion 1.0` at `intensity 1.0` beat\n  `coverage 0.08` at `intensity 7.18` (+0.027 against +0.014) at a seventh of the\n  intensity.\n- **`intensity` saturates, so it is not the lever for \"more sparkle\".** Measured on\n  that same sheer base, total glitter energy goes 0.25M → 0.35M → 0.55M → 0.53M →\n  0.56M for intensity 1 → 3 → 6 → 10 → 16: it knees at ~6 and is flat after. The\n  peak per-pixel delta is pinned at its maximum from intensity 1 onward, which is\n  the explanation — lit flakes already clip to white, and raising intensity clips\n  them harder rather than lighting the flakes that are facing nothing bright. For\n  more sparkle use `coverage` or `scale` (more flakes) or `normalScale` (a wider\n  spread of facing directions).\n- **A hot base hides them.** With `demos/controls`' calibrated frame-light values\n  (`gain: 1.5`, `detail: 0.35`) the lip goes near-white and the flakes disappear\n  into it. `demos/glitter` deliberately runs a much quieter base.\n- **Both maps must change together.** A normal map from one palette with a colour\n  map from another gives every flake the wrong hue.\n- **Mipmapping does not kill the sparkle** — this was expected to be the hard\n  problem and it measurably is not. Sweeping `scale` 1 → 16 (which shrinks the\n  flake footprint exactly as walking away from the camera does), total glitter\n  energy stayed within **77-142%** of the scale-1 value and the peak stayed flat.\n  What changes is character: blobs at 1, distinct coloured specks at 4, fine even\n  dust at 16, where sub-pixel flakes average their colours toward each other.\n  Around 4 keeps the hues telling each other apart. **Not measured:** temporal\n  flicker as the head moves — the test feed was a still image, so it says nothing\n  about flakes popping between frames.\n\n### Checking the result\n\nThe glitter shares the `frameLightDebug` switch, and the `demos/glitter` GUI\nexposes all of it. Slots 6, 7 and 8 are the glitter's:\n\n- **6 coverage** — where the flakes are. It must sit still on the lip as the head\n  moves; if it crawls, it is being sampled in video space instead of atlas space.\n- **7 flake normals** — a normal-map view. A flat lilac field means the tilt is\n  not arriving.\n- **8 glitter only** — the lobe with the make-up removed. This is where you can\n  see that only *some* flakes are lit at any pose, which is the twinkle.\n\nTo prove the flakes are lit by indirect light and not by a lamp: with an env map\nbound the shader already zeroes the directional light\n(`directLight.color *= (1.0 - hasEnvMap)`). Zero the ambient too and rotate the\nenv map — the sparkle must move. Then `clearEnvMap()` and enable the frame light\nprobe — the sparkle must survive, now driven by the real light in the room.\n\n## Demo\n\nThe [demos](./demos/) folder have demos with all the features. The [photo](./demos/photo/) shows an example of using an image loaded on html and the [webcam](./demos/webcam/) uses the user camera. The application loads a canvas and shows blush, lipsticks and eye shadows make ups on the face with the face retouch. It is also possible to render partially with the **setWindow** method, freeze the video like a photograph and share the photo.\n\nThe [eyeliner-studio](./demos/eyeliner-studio/) demo is the authoring bench for the\neyelid ribbons — draw a strip, see it on a tracked face, tune the layer, download\nthe PNG. See [Authoring an eyeliner](#authoring-an-eyeliner). Serve the **repo\nroot**, not `demos/`: it reads `src/geometry.ts` for the canonical model.\n\nThe [glitter-studio](./demos/glitter-studio/) demo is the authoring bench for the\nflakes — pick a palette, shape them, see them on a tracked face, download the\nPNGs, and copy the command that reproduces them. See\n[Authoring a glitter](#authoring-a-glitter). Serve the **repo root**, not\n`demos/`.\n\nThe [glitter](./demos/glitter/) demo is a **temporary** bench for the glitter\nlobe: one lipstick layer, a lil-gui panel for every glitter knob, a palette\ndropdown, and the env-map / frame-light switches needed to prove the flakes are\nlit by indirect light. See [Authoring a glitter](#authoring-a-glitter).\n\nThe [controls](./demos/controls/) demo is the parameter sandbox: it runs the webcam through the custom DynamicMaterial shader and exposes every knob live in a lil-gui panel — full PBR per layer, the video-derived normal scale, the Gaussian/Sobel smoothing, environment-map upload, and the frame light probe (with a read-only readout of what the illumination is currently measuring). Upload an image from the same page to A/B against a still instead of the camera.\n\n## WASM\n\n1. Activate o EMSDK\n   ```sh\n   source /path/to/emsdk/emsdk_env.sh\n   ```\n2. Generate the Makefile with cmake command\n   ```sh\n   cd ./wasm/build/\n   emcmake cmake .\n   ```\n3. Compile\n   ```sh\n   emmake make\n   ```\n4. The **wasm** and **js** files will be inside **output** directory\n","readmeFilename":"README.md"}