{"_id":"scanic","_rev":"20-66015361b790841a2b8fccd38e438f5e","name":"scanic","dist-tags":{"latest":"1.6.0"},"versions":{"0.1.4":{"name":"scanic","version":"0.1.4","keywords":["document","scanner","image","processing","contour","detection"],"author":"","license":"MIT","_id":"scanic@0.1.4","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"dist":{"shasum":"5cfdc2c3e69672b936657bb137de7a7e9812940e","tarball":"https://registry.npmjs.org/scanic/-/scanic-0.1.4.tgz","fileCount":10,"integrity":"sha512-KG6cE3ftHOxGwsPcGVUE4QJGD0biD6oKSZR25okZOOtL2BHRiXILND3qsoTpkcDL2RE6xOpSlu+GvXpR9T+3tQ==","signatures":[{"sig":"MEYCIQCUYqgjnyhV49V1tcZgN5avhjtKWFu/0vB6Lgx3x7yh2gIhAObCIDSh2zusWBfsJJUTM6XDyHMfmehAun8Gxl+SLrsy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":477511},"main":"dist/scanic.umd.js","type":"module","types":"dist/scanic.d.ts","module":"dist/scanic.js","gitHead":"3786b0ea91fcaf17b9a833474bdceda1b8dfb464","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","actor":{"name":"marquaye","type":"user","email":"Stephan.akrong@gmail.com"},"email":"Stephan.akrong@gmail.com"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4"},"_npmOperationalInternal":{"tmp":"tmp/scanic_0.1.4_1752140568385_0.5003416118072439","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"scanic","version":"0.1.5","keywords":["document","scanner","image","processing","contour","detection"],"author":"","license":"MIT","_id":"scanic@0.1.5","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"dist":{"shasum":"adcfe953763ec0c9bbeea674116b467251830ebe","tarball":"https://registry.npmjs.org/scanic/-/scanic-0.1.5.tgz","fileCount":10,"integrity":"sha512-fnCloDqn1m1242mYfI/P7UF2Z12R81Tppldzq/I6zc+VmNigwbCb/3OjYXAqcp6Q0PEoE1p/g+mJjGAhNUxIdg==","signatures":[{"sig":"MEUCICXKwXL74337hVb8uxbmDxxftv52Czec8ykIrul5mZqFAiEAhJe09O5rRbtm3qN9x5FY25L056upq6ZP+YwCoP22OiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474656},"main":"dist/scanic.umd.js","type":"module","types":"dist/scanic.d.ts","module":"dist/scanic.js","gitHead":"cbf5d5d9f3cea15ee99b9420bbfa3a0807254c9a","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","actor":{"name":"marquaye","type":"user","email":"Stephan.akrong@gmail.com"},"email":"Stephan.akrong@gmail.com"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4"},"_npmOperationalInternal":{"tmp":"tmp/scanic_0.1.5_1752151473847_0.5743062574107249","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"scanic","version":"0.1.6","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@0.1.6","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"7a1f81a4270d1c0c9ba56ab1a0158191ff701987","tarball":"https://registry.npmjs.org/scanic/-/scanic-0.1.6.tgz","fileCount":10,"integrity":"sha512-j8VwqJGhwu66pK5I6QE+BzZ2Jo5J3iBl4lnKM1PfLinJWAsmnM/0s1Km8Vzct8xJmIHPPoCGZ7jEAmAXdsiO0w==","signatures":[{"sig":"MEQCIHwfqWsrUfa4uZrHrcC65kRLmgCaSkcEZ9rhIkM5sl0bAiBepogzQdy40Xf2N4Q3emVN22uhh5oYEAGsrfRUpiPvBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":475333},"main":"dist/scanic.umd.js","type":"module","types":"dist/scanic.d.ts","module":"dist/scanic.js","gitHead":"1581866d65f5956a48e98592e375e30f4421ab92","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","actor":{"name":"marquaye","type":"user","email":"Stephan.akrong@gmail.com"},"email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4"},"_npmOperationalInternal":{"tmp":"tmp/scanic_0.1.6_1752153693009_0.48363566868916186","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"scanic","version":"0.1.7","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@0.1.7","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"05ba1315b681a73c4b30e4126496f4335465c191","tarball":"https://registry.npmjs.org/scanic/-/scanic-0.1.7.tgz","fileCount":10,"integrity":"sha512-ClTeBCP9nfs47ZRdrWqQ8/FexlI+Zl7EDYzrsqtXHfEzHpbRBjslnWkOG8CHp1XuPIKGm9PSIWQqUANYjjV/fQ==","signatures":[{"sig":"MEUCIQCBU7Pt82/dsSAjFJ98enxIBEri3H0bchUzUCvVduTAAAIgT/QeB06rUKbniDpCggiz26Y6tREkF9Vfj1k/uh8N9Xk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424398},"main":"dist/scanic.umd.js","type":"module","types":"dist/scanic.d.ts","module":"dist/scanic.js","gitHead":"99a474ce69829565488bd32f9fa4ad4e797c83ba","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4"},"_npmOperationalInternal":{"tmp":"tmp/scanic_0.1.7_1753546665139_0.5976624334565372","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"scanic","version":"0.1.8","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@0.1.8","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"e1c004983941ccd8178fd462a0b9891047ee95c7","tarball":"https://registry.npmjs.org/scanic/-/scanic-0.1.8.tgz","fileCount":10,"integrity":"sha512-ggOtVefHItUBAKI1b2yDrT33rKDfFblICXGvbkfC/D9ldX9qD4iAu1HD6Mx70ViwnrXVXAsFpSfqnPXFeHKK4A==","signatures":[{"sig":"MEUCIEOudj20oPdvZwJA8sQPqYGU8awcimVx8yzzVTdr/+9aAiEAv7m8xzpJOghRKJJSVGZUgd281hPYMktt+j2h70jukNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424398},"main":"dist/scanic.umd.js","type":"module","types":"dist/scanic.d.ts","module":"dist/scanic.js","gitHead":"a812fd5468399ecd5c2f79251e17e38a36f8596f","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4"},"_npmOperationalInternal":{"tmp":"tmp/scanic_0.1.8_1754078387185_0.20320736012499907","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"scanic","version":"1.0.2","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.0.2","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"567d742e91980c8d0343d937b1e6dfb616797021","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.0.2.tgz","fileCount":10,"integrity":"sha512-0nuvNSBtqNebgJEsRbpFdrvJey04AbQqYYeufBUWCIvnE58rtxgMtI7ANa33RBqApEg/29LsMqaIbece4L3LhA==","signatures":[{"sig":"MEQCIGR7QUHMwQEeG5O1FjhbEBAiZJrjymMYM67sWFwckaC5AiAGlpGth8dHjYBIyDxO/35iXQeV3K8kEYRPXD0yoj/bkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453996},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"61b222ed1605209ae9a6c85af8996c60551015be","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.0.2_1767874126762_0.8423587218046971","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"scanic","version":"1.0.4","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.0.4","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"942c2e4c621534ec745682556793625ea849ade7","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.0.4.tgz","fileCount":6,"integrity":"sha512-yeRgEnPcX6ANXzqYk5HyEvBItGb/AKH1abwQJmTuY+tg/3D2d8W0jBPCm60uoHJNBYiBhlO81NultghzTpfpTg==","signatures":[{"sig":"MEQCHxbjbh7zhrj538htBGiDaa9KS9jTf0PWDDKWfnYnSKECIQC+wypPU0LdicTf+qNoJYmanx8I98qpoJIBQEsV6LG2sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182960},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"2547b6bad72c5af3a94fe1a8b9b18b345b5db563","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","build:gh-pages":"vite build && cp index.html dist/ && cp -r src dist/ && cp -r testImages dist/ && cp -r public/* dist/ 2>/dev/null || true","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.0.4_1767874517341_0.604498693327165","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"scanic","version":"1.0.5","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.0.5","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"6aaa73d6466c00db0aab92dc434fda529fe8e2b5","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.0.5.tgz","fileCount":6,"integrity":"sha512-igUX+w2r9inEQNtKIQZIK3+ljxp9fdaS1eogV9Tlh75k+BLHea/ApKMi6Alj+VP5HVY/GqAtNayntJrOJpMkhg==","signatures":[{"sig":"MEUCIQCskPX0SaM/bN7SwisO86sjaP/Z9IEKkdFWkj/3YyblkgIgL0Q7YAPyX3rJCgW0C2U6HZE6fL3MNs5P1I/nMho0b0c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183181},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"4232830bf1a3da1418dadff475847c0e828957cd","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.0.5_1767876331352_0.6590101983634511","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"scanic","version":"1.0.6","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.0.6","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"f2887bb29a99a93609d758b28668657e81df1053","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.0.6.tgz","fileCount":6,"integrity":"sha512-OSK5yXCX16nwtp+2n9vSCTsZs3/ohaePaQsAMpwt1zkMtIxYcW9isCJYoKB5kh1ucnzv3ea/9ZU+3r/0nCWkgg==","signatures":[{"sig":"MEYCIQDbuDFFFbX4K8b+3nO03DTAPfGWk3gPrMY1hGLgNmOVVAIhAKNq6G2uZHXUMrkF24v6DSiJibyQyeETnTLKXi89KdYv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183181},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"ef873e7f0e4b40abc766e8d1fae3b5c7fe321dbb","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.0.6_1767909893835_0.6044043483455261","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"scanic","version":"1.0.7","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.0.7","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"a238c041373b3cacfaf20ebe2d646aab807f3dcb","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.0.7.tgz","fileCount":6,"integrity":"sha512-NizJlyaIvmw54FfsXwbM6+QxUI3VDsqzDBw3Bue7lbGPDny+pd2Tftq21gMgfj4TtemyxtOIGdCWpW139dzI8g==","signatures":[{"sig":"MEUCIQDjVqhcPekmZckKlIiUU0kOuJmAbZ9upMyLxobi3Jy1sgIgDtlcLL/cK7/ekDRd9+QlgqeUVTmM1+dQ7zb/Ioq1QiM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219476},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"8d4124e5b269f8d7b78e61b3125ed91ec79427c8","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","baseline:check":"node scripts/baseline.js","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.0.7_1779196971103_0.33515275911290887","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"scanic","version":"1.0.8","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.0.8","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"2c22ad8522c5aa32b03d390527c88b453d40dc73","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.0.8.tgz","fileCount":6,"integrity":"sha512-T+uoT1r5WyqHAre0RbzEsVP20gQLxUpLgx1MMvWsT67aAKeeHZlKSolS9ddCGTDDOEqFYXUATbpo1TcWpYuHiQ==","signatures":[{"sig":"MEQCIBN3fdyvf5H4wCEkhs4n9Wz4DCBWgVQkdFTBOS7k4deaAiA0HKeqDteED9ba+wkM/V1D5ADqOziYzjOGGJtKEXBa9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219480},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"9b644640e128a1b8e283f4a3168594705d99744d","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","baseline:check":"node scripts/baseline.js","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.0.8_1779197185188_0.694928427376869","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"scanic","version":"1.1.0","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.1.0","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"94c183c55c3ca246b4f6e11320a36d44c98841a6","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.1.0.tgz","fileCount":6,"integrity":"sha512-/I6Kq6AMZPF6IwBcPnYHLO+G0NWdw7E5gdH5WL/ArI/hDJ3Yh6awcZF0yTPVIdslHgQ8InnM6kAt9M28BaUv8w==","signatures":[{"sig":"MEUCIQC+QGpT8KcjZpXND1JORSAgBYQ2ep7A0Hiaql/iHcMVEQIgTjFJsTdCZZ+GkW66E0m8SwSZjAWLFjo0AMh21XXOTSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257515},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"d60678b8cdd1cbfb9b5338637a42a3fa5a5524c3","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build","test:watch":"vitest","baseline:check":"node scripts/baseline.js","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.1.0_1781523531197_0.4723120613926557","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"scanic","version":"1.1.1","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.1.1","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"f189b24340bdadc4b04842a32d63a5213a82f481","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.1.1.tgz","fileCount":6,"integrity":"sha512-FmfUR8lb9xbjfeyxBO8f+3+16BJEoWhz8MYnpd51CMnswDQl30dMS+/HfsjZAkm5K7dBI4v7pGB263+jpSkyxw==","signatures":[{"sig":"MEUCIB1Gx2eno4hrGyIPqzwSQSSaCzrjpl0d6eC6qCh+czlQAiEA+fXzm+5AvajvxaSxPSuBjs/8uo6jS2DZNN5o7Xbmkwg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258063},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"1a57248223cbfc33dd30549bb8ed5e5964edad0c","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","test:watch":"vitest","baseline:check":"node scripts/baseline.js","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.1.1_1781858491574_0.8159994096753578","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"scanic","version":"1.2.0","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.2.0","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://github.com/marquaye/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"98843e89ae3dd22ee626cb2b0493fba445458204","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.2.0.tgz","fileCount":6,"integrity":"sha512-a9JAsC5oh+uO0LJuTq8E0z+iMOaEDdM+EEfuVaCyEHcgUDJnSgxtvnInNglj5Ajv6ZkLf33bjAlun1CtcZwwng==","signatures":[{"sig":"MEUCIETgrGHiyYmH2XDEs7FN+QcHbsZcBGZTQB+Ij3/Y0frHAiEAzKOG3SFmksMLyshJb43EUOhL/wuqayydeym6Rtg3G4I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276138},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"5edfcfd491761a990c4beb47e59556b6a1a1ceb4","scripts":{"dev":"vite","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","docs:dev":"vitepress dev docs","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","docs:build":"vite build && node scripts/stage-docs-demo.mjs && vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs","baseline:check":"node scripts/baseline.js","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","vite":"^6.3.4","jsdom":"^27.4.0","canvas":"^3.2.0","terser":"^5.44.1","vitest":"^4.0.16","vitepress":"^1.6.4"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.2.0_1781898808991_0.5302235588428377","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"scanic","version":"1.3.0","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.3.0","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://marquaye.github.io/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"2de99f0b158717d8220acb2be460f42d1fa04e19","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.3.0.tgz","fileCount":6,"integrity":"sha512-uNlAl8bdkiZbmDEuF1uqXM3bzdfreFFLB/PHiaa5eGi16/OaqhVImQATaJMX6s45hNth9TljQKMjXfkiRnaDqw==","signatures":[{"sig":"MEYCIQCO7IQRvI3ZZkrLHA0l96e5vEDoU8z9eXOS9bCGkEGvIwIhAOFYhG/JMSPChLuhXs61M6zLloKWH7hy7PC6rAcXyLDD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/scanic@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":226495},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"b4b819e8791b73cb74d3ca75803d90c84af89e17","scripts":{"dev":"vite","lint":"eslint src scripts","test":"vitest run","build":"vite build","preview":"vite preview","release":"node scripts/release.js","docs:dev":"vitepress dev docs","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","docs:build":"vite build && node scripts/stage-docs-demo.mjs && vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs","test:coverage":"vitest run --coverage","baseline:check":"node scripts/baseline.js","build:gh-pages":"vite build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","vite":"^8.0.16","jsdom":"^29.1.1","canvas":"^3.2.0","eslint":"^10.5.0","terser":"^5.44.1","vitest":"^4.0.16","globals":"^17.6.0","vitepress":"^1.6.4","@eslint/js":"^10.0.1","playwright":"^1.61.1","onnxruntime-web":"1.23.2","@vitest/coverage-v8":"^4.1.9"},"peerDependencies":{"onnxruntime-web":"1.23.x"},"peerDependenciesMeta":{"onnxruntime-web":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.3.0_1782803358700_0.3120192564137789","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"scanic","version":"1.4.0","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.4.0","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://marquaye.github.io/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"49310c057c080fa889655ede3fa649677b922637","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.4.0.tgz","fileCount":8,"integrity":"sha512-YZvsIiWtzf8jmcpBxXc35DgegTiXYZgAtDMEHtXG0ZdWVWQvH8YdMNtVGQlb6wO5lTomySKbr/uQc7XKOlJ/lw==","signatures":[{"sig":"MEYCIQCYQ0sBalXQor1hHu+sh1Nsyo2rht+2S1mBV6ebuLJm3AIhAL9Uv9NSJmPwCYSbPmviBhRbRpW/i6dr42hhu435I6lz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/scanic@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":281143},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"5fd543131b84c434f97496b97276361c8fa3b6fe","scripts":{"dev":"vite","lint":"eslint src scripts","test":"vitest run","build":"node scripts/build-lib.mjs","preview":"vite preview","release":"node scripts/release.js","docs:dev":"vitepress dev docs","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","docs:build":"npm run build && node scripts/stage-docs-demo.mjs && vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs","test:coverage":"vitest run --coverage","baseline:check":"node scripts/baseline.js","build:gh-pages":"npm run build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","vite":"^8.0.16","jsdom":"^29.1.1","canvas":"^3.2.0","eslint":"^10.5.0","terser":"^5.44.1","vitest":"^4.0.16","globals":"^17.6.0","vitepress":"^1.6.4","@eslint/js":"^10.0.1","playwright":"^1.61.1","onnxruntime-web":"1.23.2","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.4.0_1782820808754_0.3798901204313423","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"scanic","version":"1.4.1","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.4.1","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://marquaye.github.io/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"9596c5e6d3095f09023d4b231d846ec5dce9924e","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.4.1.tgz","fileCount":8,"integrity":"sha512-ALGRJBxQcQ5j6/309oskGRLAZwEtZWMZZYmWyVmkuUyOCPe2Ow8Q7PP6sDgxX+Fn0UMo+bniSVQGZWrqn2jwrw==","signatures":[{"sig":"MEUCIGbmRd0cFfsBQcrwXn0h39PLLQhfKpJjYXHTFml74c3AAiEAwKOql69O/m6c/ivQ4WNPswxCAcDY6q7+V7vDD6qV5mo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/scanic@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":281028},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"303e7f7fb86ab0a29ad02ddcdc11b83d038bc62d","scripts":{"dev":"vite","lint":"eslint src scripts","test":"vitest run","build":"node scripts/build-lib.mjs","preview":"vite preview","release":"node scripts/release.js","docs:dev":"vitepress dev docs","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","docs:build":"npm run build && node scripts/stage-docs-demo.mjs && vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs","test:coverage":"vitest run --coverage","baseline:check":"node scripts/baseline.js","build:gh-pages":"npm run build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","diagnose:quality":"node scripts/diagnose-quality.js"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","vite":"^8.0.16","jsdom":"^29.1.1","canvas":"^3.2.0","eslint":"^10.5.0","terser":"^5.44.1","vitest":"^4.0.16","globals":"^17.6.0","vitepress":"^1.6.4","@eslint/js":"^10.0.1","playwright":"^1.61.1","onnxruntime-web":"1.23.2","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.4.1_1782821790554_0.9722327899516181","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"scanic","version":"1.5.0","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.5.0","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://marquaye.github.io/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"9dfc8323420259d6bb772949e9cc1611e64160cb","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.5.0.tgz","fileCount":8,"integrity":"sha512-81hwO5pTX/ZEK4YybrlDm54PRus0DRrcmISsvp651ttFiaXGyotNq9E1JhCzCR41V2/qMPTg8j1ZP2gJ3ZlX/w==","signatures":[{"sig":"MEUCIAwzjvLki+Pqols2ueo6VA6Ei23Ed9kYzwLl8snr6HmjAiEA0oBSLDM02flfSRv/2KBNoREcC2ExBAQjaDDRD96kHDE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/scanic@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283918},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"54016fcbb1bc6a0d525f72005d7c846ac943550d","scripts":{"dev":"vite","lint":"eslint src scripts","test":"vitest run","build":"node scripts/build-lib.mjs","preview":"vite preview","release":"node scripts/release.js","docs:dev":"vitepress dev docs","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","docs:build":"npm run build && node scripts/stage-docs-demo.mjs && vitepress build docs","test:watch":"vitest","dev:annotate":"vite --open /dev/annotate.html","docs:preview":"vitepress preview docs","test:coverage":"vitest run --coverage","baseline:check":"node scripts/baseline.js","build:gh-pages":"npm run build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","bench:detectors":"node scripts/bench-detectors.mjs","diagnose:quality":"node scripts/diagnose-quality.js","baseline:check:ml":"node scripts/baseline.js --detector=ml","baseline:update:ml":"node scripts/baseline.js --update --detector=ml"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","vite":"^8.0.16","jsdom":"^29.1.1","canvas":"^3.2.0","eslint":"^10.5.0","terser":"^5.44.1","vitest":"^4.0.16","globals":"^17.6.0","vitepress":"^1.6.4","@eslint/js":"^10.0.1","playwright":"^1.61.1","onnxruntime-web":"^1.23.2","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.5.0_1783429335514_0.4625405583301141","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"scanic","version":"1.5.1","keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","_id":"scanic@1.5.1","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"homepage":"https://marquaye.github.io/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"dist":{"shasum":"239999d56cc068c20aa81ef279d9c563b858e7a5","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.5.1.tgz","fileCount":8,"integrity":"sha512-VJ/0aB2HtGd+bdqp3LeZmlnAScV8/uM2yS42mMLDfvhrV6BkWtee5ZUX9hSTW6zIItxZhILxCrtDWqvfV935qw==","signatures":[{"sig":"MEUCIQC5JotCpBLzGKdCAN1bM60zfxhJowBsXpMjxPFW3M2QEgIgPcz7vywhIs3uz3hT3JhRIj76c77f4iZOGzLhjNjqLcU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/scanic@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":277763},"main":"dist/scanic.umd.cjs","type":"module","types":"src/scanic.d.ts","module":"dist/scanic.js","engines":{"node":">=20"},"exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"gitHead":"694c92822f2241e0cef303944a86dac644a22bcf","scripts":{"dev":"vite","lint":"eslint src scripts","test":"vitest run","build":"node scripts/build-lib.mjs","preview":"vite preview","release":"node scripts/release.js","docs:dev":"vitepress dev docs","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","docs:build":"npm run build && node scripts/stage-docs-demo.mjs && vitepress build docs","test:watch":"vitest","dev:annotate":"vite --open /dev/annotate.html","docs:preview":"vitepress preview docs","test:coverage":"vitest run --coverage","baseline:check":"node scripts/baseline.js","build:gh-pages":"npm run build && node scripts/post-build.js","prepublishOnly":"npm run build","baseline:update":"node scripts/baseline.js --update","bench:detectors":"node scripts/bench-detectors.mjs","diagnose:quality":"node scripts/diagnose-quality.js","baseline:check:ml":"node scripts/baseline.js --detector=ml","baseline:update:ml":"node scripts/baseline.js --update --detector=ml"},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"repository":{"url":"git+https://github.com/marquaye/scanic.git","type":"git"},"_npmVersion":"10.8.2","description":"Modern document scanner in pure JavaScript and Wasm","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","vite":"^8.0.16","jsdom":"^29.1.1","canvas":"^3.2.0","eslint":"^10.5.0","terser":"^5.44.1","vitest":"^4.0.16","globals":"^17.6.0","webpack":"^5.108.4","vitepress":"^1.6.4","@eslint/js":"^10.0.1","playwright":"^1.61.1","onnxruntime-web":"^1.27.0","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/scanic_1.5.1_1784065504649_0.13505597920914503","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"scanic","version":"1.6.0","description":"Modern document scanner in pure JavaScript and Wasm","type":"module","sideEffects":false,"engines":{"node":">=22"},"main":"dist/scanic.umd.cjs","module":"dist/scanic.js","types":"src/scanic.d.ts","exports":{".":{"types":"./src/scanic.d.ts","import":"./dist/scanic.js","require":"./dist/scanic.umd.cjs"}},"scripts":{"dev":"vite","dev:annotate":"vite --open /dev/annotate.html","build":"node scripts/build-lib.mjs","build:gh-pages":"npm run build && node scripts/post-build.js","docs:dev":"vitepress dev docs","docs:build":"npm run build && node scripts/stage-docs-demo.mjs && vitepress build docs","docs:preview":"vitepress preview docs","lint":"eslint src scripts","build:wasm":"docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs","test":"vitest run","test:coverage":"vitest run --coverage","diagnose:quality":"node scripts/diagnose-quality.js","bench:detectors":"node scripts/bench-detectors.mjs","baseline:update":"node scripts/baseline.js --update","baseline:check":"node scripts/baseline.js","baseline:update:ml":"node scripts/baseline.js --update --detector=ml","baseline:check:ml":"node scripts/baseline.js --detector=ml","test:watch":"vitest","preview":"vite preview","prepublishOnly":"npm run build","release":"node scripts/release.js"},"keywords":["document","scanner","image","processing","contour","detection"],"author":{"name":"marquaye"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/marquaye/scanic.git"},"homepage":"https://marquaye.github.io/scanic","bugs":{"url":"https://github.com/marquaye/scanic/issues"},"devDependencies":{"@eslint/js":"^10.0.1","@vitest/coverage-v8":"^4.1.9","canvas":"^3.2.0","eslint":"^10.5.0","globals":"^17.6.0","jsdom":"^30.0.1","onnxruntime-web":"^1.27.0","playwright":"^1.61.1","terser":"^5.44.1","vite":"^8.0.16","vitepress":"^1.6.4","vitest":"^4.0.16","vue":"^3.5.38","webpack":"^5.108.4"},"_id":"scanic@1.6.0","gitHead":"3633d5f9292948400c4a6809964e7f75c43661ec","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-p9qYL9cITvQ/BOrafsJvhm++Y8NA8GfRnwngUASqAyKUTRHqMuJzcrCuHjveHxQg29tNuEORUBDAAcigvFigPg==","shasum":"f683c361530166fcbd5b5fd1785129442935d5df","tarball":"https://registry.npmjs.org/scanic/-/scanic-1.6.0.tgz","fileCount":8,"unpackedSize":295767,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/scanic@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDSycd2+TZRpMfDEauD6VOhxyK0a+o9egjBoOdfu/DrXQIhANSIkNJcqSyRIjF3XrKroC8R/3xzhIjvO2Iu+vv1NtQO"}]},"_npmUser":{"name":"marquaye","email":"Stephan.akrong@gmail.com"},"directories":{},"maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scanic_1.6.0_1786532144495_0.6229734240712288"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-10T09:42:48.326Z","modified":"2026-08-12T10:55:44.925Z","0.1.4":"2025-07-10T09:42:48.595Z","0.1.5":"2025-07-10T12:44:34.121Z","0.1.6":"2025-07-10T13:21:33.271Z","0.1.7":"2025-07-26T16:17:45.369Z","0.1.8":"2025-08-01T19:59:47.450Z","1.0.2":"2026-01-08T12:08:46.938Z","1.0.4":"2026-01-08T12:15:17.492Z","1.0.5":"2026-01-08T12:45:31.497Z","1.0.6":"2026-01-08T22:04:53.985Z","1.0.7":"2026-05-19T13:22:51.258Z","1.0.8":"2026-05-19T13:26:25.333Z","1.1.0":"2026-06-15T11:38:51.367Z","1.1.1":"2026-06-19T08:41:31.710Z","1.2.0":"2026-06-19T19:53:29.134Z","1.3.0":"2026-06-30T07:09:18.832Z","1.4.0":"2026-06-30T12:00:08.942Z","1.4.1":"2026-06-30T12:16:30.698Z","1.5.0":"2026-07-07T13:02:15.703Z","1.5.1":"2026-07-14T21:45:04.974Z","1.6.0":"2026-08-12T10:55:44.642Z"},"bugs":{"url":"https://github.com/marquaye/scanic/issues"},"author":{"name":"marquaye"},"license":"MIT","homepage":"https://marquaye.github.io/scanic","keywords":["document","scanner","image","processing","contour","detection"],"repository":{"type":"git","url":"git+https://github.com/marquaye/scanic.git"},"description":"Modern document scanner in pure JavaScript and Wasm","maintainers":[{"name":"marquaye","email":"Stephan.akrong@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"#\">\n    <img src=\"public/scanic-logo-bg.png\" alt=\"scanic logo\" height=\"400\">\n  </a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://npmjs.com/package/scanic\"><img src=\"https://badgen.net/npm/dw/scanic\"></a>\n    <br />\n    <a href=\"https://github.com/marquaye/scanic/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/marquaye/scanic.svg\"></a>\n    <a href=\"https://npmjs.com/package/scanic\"><img src=\"https://badgen.net/npm/v/scanic\"></a>\n    <a href=\"https://bundlejs.com/?q=scanic\"><img src=\"https://img.shields.io/bundlejs/size/scanic?label=gzip%20size\"></a>\n    <a href=\"https://marquaye.github.io/scanic\"><img src=\"https://img.shields.io/badge/docs-online-6366f1\"></a>\n</p>\n\n# Scanic\n\n**Ultra-fast, production-ready document scanning for the modern Web.**\n\nScanic is a high-performance document scanner library that brings professional-grade document edge detection and perspective correction to the browser and Node.js. By combining **Rust-powered WebAssembly** for pixel crunching and a **fast bilinear inverse-map warp** for image extraction, Scanic delivers near-native performance (~10ms transforms) with a tiny footprint.\n\n[**Documentation**](https://marquaye.github.io/scanic) | [**Live Demo**](https://marquaye.github.io/scanic/demo/) | [**Framework Examples**](https://marquaye.github.io/scanic/guide/frameworks) | [**API Reference**](https://marquaye.github.io/scanic/api/reference)\n\n---\n\n## 🚀 Why Scanic?\n\nTraditional web scanning solutions often force a trade-off:\n- **OpenCV.js**: Powerful, but requires a massive **30MB+** download.\n- **Pure JS**: Lightweight, but struggles with real-time performance and complex transforms.\n\n**Scanic bridges this gap:**\n- **Hybrid Engine**: Rust/WASM handles the CPU-heavy edge detection.\n- **Turbo Warp**: A per-pixel bilinear inverse-map does perspective correction with no Canvas state-machine overhead or seam artifacts.\n- **Zero Latency**: Designed for real-time applications like webcam scanning.\n\n---\n\n## ✨ Features\n\n- 🎯 **Pinpoint Accuracy**: Robust document contour detection even in low-contrast environments.\n- ⚡ **Turbocharged Warp**: Perspective transforms in **< 10ms** (vs 500ms+ in standard loops).\n- 🦀 **WASM Core**: High-performance Gaussian Blur, Canny Edge Detection, and Dilation.\n- 🛠️ **Modern API**: Clean, Promise-based API with full **TypeScript** support.\n- 📦 **Featherweight**: Under **100KB** total size (gzipped).\n- 🤖 **Optional ML detector**: switch to a neural corner detector for hard photos with `detector: 'ml'`. It is lazy loaded, needs no extra install, and uses a custom minimal ONNX Runtime build of about 1.5 MB instead of the usual 13 MB. See the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection).\n- 🧪 **Production Grade**: Built-in regression tests with physical image baselines.\n\n## 🆕 What's New\n\nSee the [**full documentation**](https://marquaye.github.io/scanic), the\n[**changelog**](CHANGELOG.md), and the [**releases**](https://github.com/marquaye/scanic/releases)\nfor the latest. Recent highlights:\n\n- **Optional ML detector**: a neural corner detector (`detector: 'ml'`) for hard photos such as cluttered backgrounds, low contrast, or strong perspective. Lazy loaded and opt in. See the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection).\n- **Styleable corner editor**: a built-in, touch friendly UI to fine tune detected corners, now fully themeable via CSS variables with a polished default toolbar. See the [corner editor guide](https://marquaye.github.io/scanic/guide/corner-editor).\n- **New docs site** with guides for Web/Node.js/Electron/React/Vue and an interactive in-browser playground.\n\n---\n\n## 🛠️ Installation\n\n```bash\n# via npm\nnpm install scanic\n\n# via yarn\nyarn add scanic\n```\n\n### CDN\n```html\n<script src=\"https://unpkg.com/scanic/dist/scanic.js\"></script>\n```\n\n---\n\n## 🎮 Demo\n\nTry the interactive scanner in your browser:\n👉 [**Open Scanic Live Demo**](https://marquaye.github.io/scanic/demo/)\n\n---\n\n## 📖 Usage\n\n### Simple Usage\n```js\nimport { scanDocument, extractDocument } from 'scanic';\n\n// Simple usage - just detect document\nconst result = await scanDocument(imageElement);\nif (result.success) {\n  console.log('Document found at corners:', result.corners);\n}\n\n// Extract the document (with perspective correction)\nconst extracted = await scanDocument(imageElement, { mode: 'extract' });\nif (extracted.success) {\n  document.body.appendChild(extracted.output); // Display extracted document\n}\n```\n\n### ML detection (optional)\n\nOn harder photos you can switch to a neural detector that is more robust. It is\nopt in per call with `detector: 'ml'`, and it needs no extra install:\n\n```bash\nnpm install scanic\n```\n\n```js\nimport { scanDocument } from 'scanic';\n\nconst result = await scanDocument(imageElement, { detector: 'ml' });\nif (result.success) {\n  console.log(result.corners);\n  console.log(result.score); // P(document present), 0 to 1\n}\n```\n\nThe ONNX Runtime JavaScript API is bundled as a lazy chunk (about 50 KB, roughly\n15 KB gzipped) that loads only when you use `detector: 'ml'`. On that first call\nscanic fetches about 2 MB from a CDN (the companion\n[`scanic-ml`](https://www.npmjs.com/package/scanic-ml) package): a 1.9 MB model\nplus a custom minimal ONNX Runtime build of about 1.5 MB, which is roughly 88\npercent smaller than the stock 13 MB runtime while running at the same speed. See\nthe [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection)\nfor options, self hosting, and threading.\n\n\n### Manual corner adjustment UI\n\nUse the built-in corner editor to let users drag corners on mobile and desktop,\nthen pass the confirmed corners into extraction.\n\n```js\nimport { createCornerEditor, extractDocument } from 'scanic';\n\nconst editor = createCornerEditor({\n  container: document.getElementById('editorHost'),\n  image: imageElement,\n  corners: detectedCorners, // optional: defaults to an inset quad\n  magnifier: {\n    zoom: 2,\n    size: 110\n  },\n  nudges: {\n    enabled: true,\n    steps: [1, 5]\n  },\n  onConfirm: async (corners) => {\n    const extracted = await extractDocument(imageElement, corners, { output: 'canvas' });\n    document.getElementById('output').appendChild(extracted.output);\n    editor.destroy();\n  }\n});\n```\n\n### Optimized Usage (Recommended for Batch/Real-time)\nThe `Scanner` class maintains a persistent WebAssembly instance, avoiding the overhead of re-initializing WASM for every scan.\n\n```js\nimport { Scanner } from 'scanic';\n\nconst scanner = new Scanner();\n\n// Initialize once (optional, scan() will initialize if needed)\nawait scanner.initialize();\n\n// Scan multiple images efficiently\nasync function onFrame(img) {\n  const result = await scanner.scan(img, { mode: 'extract' });\n  if (result.success) {\n    // Process result...\n  }\n}\n```\n\n## Examples\n\n```js\nconst options = {\n  mode: 'extract',\n  maxProcessingDimension: 1000,  // Higher quality, slower processing\n  lowThreshold: 50,              // More sensitive edge detection\n  highThreshold: 150,\n  dilationKernelSize: 5,         // Larger dilation kernel\n  minArea: 2000,                 // Larger minimum document area\n  debug: true                    // Enable debug information\n};\n\nconst result = await scanDocument(imageElement, options);\n```\n\n### Different Modes and Output Formats\n\n```js\n// Just detect (no image processing)\nconst detection = await scanDocument(imageElement, { mode: 'detect' });\n\n// Extract as canvas\nconst extracted = await scanDocument(imageElement, { \n  mode: 'extract',\n  output: 'canvas' \n});\n\n// Extract as ImageData\nconst rawData = await scanDocument(imageElement, { \n  mode: 'extract',\n  output: 'imagedata' \n});\n\n// Extract as DataURI\nconst rawData = await scanDocument(imageElement, { \n  mode: 'extract',\n  output: 'dataurl' \n});\n\n```\n\n\n## 🛠️ Development\n\nClone the repository and set up the development environment:\n\n```bash\ngit clone https://github.com/marquaye/scanic.git\ncd scanic\nnpm install\n```\n\nStart the development server:\n\n```bash\nnpm run dev\n```\n\nBuild for production:\n\n```bash\nnpm run build\n```\n\nThe built files will be available in the `dist/` directory.\n\n### Building the WebAssembly Module\n\nThe Rust WASM module is pre-compiled and included in the repository. If you need to rebuild it:\n\n```bash\nnpm run build:wasm\n```\n\nThis uses Docker to build the WASM module without requiring local Rust installation.\n\n### Testing\n\nScanic uses Vitest for unit and regression testing. We test against real document images to ensure detection accuracy remains consistent.\n\n```bash\nnpm test\n```\n\nThe regression suite covers both the classical detector and the optional ML detector\n(`src/baseline.test.js` and `src/baseline.ml.test.js`), each checked against its own\ngolden baseline in `testImages/`:\n\n```bash\nnpm run baseline:check       # classical detector vs testImages/baseline-results.json\nnpm run baseline:check:ml    # ML detector vs testImages/baseline-results.ml.json\n\nnpm run baseline:update      # regenerate the classical baseline\nnpm run baseline:update:ml   # regenerate the ML baseline\n```\n\nThe ML baseline test skips automatically when `onnxruntime-web` or the `scanic-ml`\nmodel assets aren't available locally.\n\n\n## 📊 Comparison\n\n| Feature | Scanic | jscanify | OpenCV.js |\n| :--- | :--- | :--- | :--- |\n| **Download Size** | **~100KB** | ~31MB | ~30MB |\n| **Perspective Speed** | **~10ms** | ~200ms | ~5ms |\n| **WASM Optimized** | ✅ Yes | ❌ No | ✅ Yes |\n| **GPU Acceleration** | ✅ Yes | ❌ No | ❌ No |\n| **TypeScript** | ✅ Yes | ❌ No | ✅ Yes |\n\n\n## 🤝 Contributing\n\nContributions are welcome! Whether it's reporting a bug, suggesting a feature, or submitting a pull request, your help is appreciated.\n\n1. **Report Issues**: Use the GitHub Issue tracker.\n2. **Pull Requests**:\n   - Fork the repository.\n   - Create a feature branch.\n   - Commit your changes.\n   - Open a Pull Request.\n\n---\n\n## 📜 Credits\n\n- Inspired by [jscanify](https://github.com/puffinsoft/jscanify).\n- WASM Blur module powered by Rust.\n- The optional ML corner detector's architecture is [DocCornerNet](https://github.com/mapo80/DocCornerNet-CoordClass) (MIT licensed) by [mapo80](https://github.com/mapo80), based on [SimCC](https://arxiv.org/abs/2107.03332) (Li et al., ECCV 2022). See the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection) for how it's trained, slimmed, and deployed in scanic.\n\n---\n\n## 💖 Sponsors\n\n<p align=\"center\">\n  <strong>Special thanks to our amazing sponsors who make this project possible!</strong>\n</p>\n\n<div align=\"center\">\n\n### 🏆 Gold Sponsors\n\n<table>\n  <tr style=\"color: black;\">\n    <td align=\"center\" width=\"300\">\n      <a href=\"https://zeugnisprofi.com\" target=\"_blank\"> \n        <br/>\n        <strong>ZeugnisProfi</strong>\n      </a>\n      <br/>\n      <em>Professional certificate and document services</em>\n    </td>\n    <td align=\"center\" width=\"300\">\n      <a href=\"https://zeugnisprofi.de\" target=\"_blank\">\n        <br/>\n        <strong>ZeugnisProfi.de</strong>\n      </a>\n      <br/>\n      <em>German document processing specialists</em>\n    </td>\n    <td align=\"center\" width=\"250\">\n      <a href=\"https://www.verlingo.de\" target=\"_blank\">\n        <br/>\n        <strong>Verlingo</strong>\n      </a>\n      <br/>\n      <em>Language and translation services</em>\n    </td>\n    <td align=\"center\" width=\"250\">\n      <a href=\"https://mein-kreativbuch.de/\" target=\"_blank\">\n        <br/>\n        <strong>mein-kreativbuch.de</strong>\n      </a>\n      <br/>\n       <em>Unique and personalized children's books</em>\n    </td>\n    <td align=\"center\" width=\"250\">\n      <a href=\"https://ausschreibungszentrale.de/\" target=\"_blank\">\n        <br/>\n        <strong>ausschreibungszentrale.de</strong>\n      </a>\n      <br/>\n       <em>Public tender matching platform</em>\n    </td>\n  </tr>\n</table>\n\n</div>\n\n## 🗺️ Roadmap\n\nSee [**ROADMAP.md**](ROADMAP.md) for what's shipped and what's planned.\n\n## License\n\nMIT License © [marquaye](https://github.com/marquaye)\n\n","readmeFilename":"README.md"}