{"_id":"@scanmate/align","_rev":"36-b465cb3f941d0957e0fea928f03d627b","name":"@scanmate/align","dist-tags":{"latest":"0.24.6"},"versions":{"0.0.2":{"name":"@scanmate/align","version":"0.0.2","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.0.2","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"f29221dbbe0f899bded96345d9bf49f26b52c18d","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.0.2.tgz","fileCount":24,"integrity":"sha512-lcrKjVMv+UkO27+a3fnkzStbN9VNQQHmNXfnwYKVIYnDjTPw/Cz9zRX62BLrtNREqhNwv+63QYyanzcd7isOGg==","signatures":[{"sig":"MEYCIQCd5OxA23gitsuploGXUOI9AlxxUr0gxsoSRt4BQ1mJrQIhALvMaiQi1IGed+btSKB0XXjC+71gKNMfdAxZR5n75N6T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90070},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"e10ce8856811d9a45d84338b8c76447a46f5674f","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.0.2_1789835522554_0.06877404056732139","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@scanmate/align","version":"0.0.3","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.0.3","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"b7b30cf1205d8675e31164fdb160a1cdc6bf395f","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.0.3.tgz","fileCount":24,"integrity":"sha512-v1thpO/3jCZOtkBIEKsIFhzrt/siBllBDKGv0qYh/1Ny6v4DvZDbnBr+2Ib6zfQ6zhtueIjptj6hDmylYAy63Q==","signatures":[{"sig":"MEUCICAH3y5outyt8bu1sUoRbU6q9KQfy2ql/pq7jelSkIOXAiEAqvZ3DyfaNNSGvud/USaQT+g9UlDHe4Y9P+2zaIUeGu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGLicUIs0D4kr31v3c+gxpIcD9Hi/pImG82qi0J65lQJAiAfGpy136/70/C5mDpX2l952xdG2ryHZ+TPYCqW6qZ0Tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83742},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"6f3240d0902ba9a84e6e2caaf931156b326a73e4","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.0.3_1789905825283_0.01716040503165095","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@scanmate/align","version":"0.1.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.1.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"3e47cf5eb9b25080852630a41aa85c5ae9cf97c2","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.1.0.tgz","fileCount":24,"integrity":"sha512-J98TS/f3FL9XOZHmMvT6EIlWFoErP2zU3mSwtd4NVINuHTNeVjd33X9Jp367AUA6FJwPQS6mjaBZBa3HkewU7g==","signatures":[{"sig":"MEUCIEd+Nk+yveI8Ilu6pjRn1MkgTe58ta/nOayKrG/+8k1YAiEAju/AgAMc5FmpToltSEcaAaIYjVhEOycu18evDln6tjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDgK4Wd2jfpdyxcgTcLWzU7cKNizWZlDizyYHCKfGmpCAIgKo8xToiX0rZISWRXF+XNXDBqRDkfNGoqzts+G/vlVrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83742},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"b6832521444d459fb1a44459bc338ae412075b07","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.1.0_1789906853863_0.4600184528092339","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@scanmate/align","version":"0.2.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.2.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"60436ff3ddd6bd7ec5dd9f3b0464576a865af23b","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.2.0.tgz","fileCount":24,"integrity":"sha512-25MTCVlheCLPRqPlpWdRbLtKkNRH9ACmgL9Tqz4+q7VjxOUeUOU0EJjjB1cOTr5/6wCFYKy837bX7kkYxsMzAw==","signatures":[{"sig":"MEYCIQDsv0vCXhGsV5TTyto6h4EPy/AaSfNVxWH1VrwbjlR0igIhAOW0m5NpIc2W2h91GXsVWMmI7ULpOyIsPK10FdpvQrvi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD2lXFG1YXyw3r8ydJOKi7HUFsGASeRdDAykDjg2aauFgIhAM0CVrieYgiHVJ2ImS+6L8IaJer2OcjOXJSF8IjxRAGi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"8ad4dd6f341f70e846fdc145a59358cacff12408","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.2.0_1789916300442_0.6156524490779236","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@scanmate/align","version":"0.2.1","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.2.1","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"1757b5d0eaf83dc9b96b473f1aa78f793914ae7a","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.2.1.tgz","fileCount":24,"integrity":"sha512-kKD9yq+gmIvXcc6JYaf2XRDRreLXGWLCXEXelPO8+0Za8lBh7TyRNPPwei8Ip/D/lWhfV3SSgufHSAfCO2VP9A==","signatures":[{"sig":"MEYCIQDwBrI9kFaAl125hJL49sDNz+5dtVtkddP2pW1a3/B6EgIhANuwgnvOyDs2Sm5/PCNwJuY7Nmcr69izvoMLCncr5h+P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAmFS0bayeWUSibW40+B33C4AdK87+sVKxbAl58EwkcOAiEA8C+VX0EFtD+bFoEF7aGPlUwTJgCWHBVSQp2HG5caL6A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"5302471f69a0160437bb3820293b7f7abd6cada8","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.2.1_1789923006928_0.6789456977234936","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@scanmate/align","version":"0.3.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.3.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"ffd136168c22308a44159bfff68d1d6633bbd739","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.3.0.tgz","fileCount":24,"integrity":"sha512-hTVblPVq6+qfNJUnrDrJJOsEswzU6RuYTfmt05jsTP8TjeRJgNGYebuUFZwPhp+/uExvwpUOfXLrBrVOJU05Og==","signatures":[{"sig":"MEUCIQDQzgQ+RE7z0z+ZtbCnOGGVn2mZA10/BuLSwH+tOEPtfAIgV2IXSNAyhn6WfUaUofK+zeGv5cPPsnksRthpOhwfZsg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGaa/Uhnwq0rPUPEs+nM1pynOJfU9mL8OqynVwkeX7+KAiAVPduNuXfQ4/HTuSGhbgaIHLH+U1trzQs9ZDTls3Lwgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"f173c0a7dda88524f26088378259e770763194e0","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.3.0_1789929775100_0.3757743027302016","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@scanmate/align","version":"0.3.1","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.3.1","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"49541c87eacd70e33bf85decea6b11481379b3c3","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.3.1.tgz","fileCount":24,"integrity":"sha512-tu7XCsKK7W7My5s93hbQ83jU6R9euI8NzJVXYS6ahBSKYK8dPsGFgfeIUoAQaeBby0HDu0+IdWsDZ97rx7ntsQ==","signatures":[{"sig":"MEUCIQCRIzfMJibTvO2JUHld8K22oFnHMuZI2UC5mxoBFdBP8AIgZUl0VP7VzSVnV7CeFrgj26iqWyyX98lKTLC7KQc+AAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBP3X+llI5D6ZIaf3NxmP72gCD6sG1i3qOM4/2pV/SPTAiBzcKpZJpE9z2VXvpRqhGPc/MCHlfXDvCxTY/U/5+g/Qg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"acaad0cf365bb9e15fc0f6109f8929a6710a72a3","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.3.1_1789930775949_0.16470216963013384","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@scanmate/align","version":"0.4.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.4.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"1ba4e0a4f39d6169452467cccbd8dbec2a21217e","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.4.0.tgz","fileCount":24,"integrity":"sha512-7Mxk5m3pznXJcqWh2ZQi/pJmlPfm+QDxYi0Zztu3vdbhl/rCCUileFVAJJhXZp4XLUadnyXEtIRPiaVEhAqR1Q==","signatures":[{"sig":"MEYCIQCfKNXQTKnYCQXoTU4ckVT1mkG/S1sVhDmuz69GCdcpDwIhAOv6lKlCcAKTKOsCThDo8KWIpwN2fes4jCFdBC4lC+Nz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA6B2obWeSmIjJXRvkjeoO2LfDGjC3DcuU44nzzJ/Z7eAiEAkjPTtTjf4BLCQwzGXnEYCxVK+TDFNdaqgwqibgSTYQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"369949358a047c7a3aea174fc32216b6fd8861dd","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.4.0_1789931844620_0.3984958102425633","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@scanmate/align","version":"0.5.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.5.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"a3ffa27d97978610c184f0a9a44a919c78cc2f20","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.5.0.tgz","fileCount":24,"integrity":"sha512-wrRcA2F2d9LjRpqTE2/4Un3De2pw2YuprA8KvVD5XqbxMvDuCN1qlBc4uzESiDgKg7DnxFvUNWgsqkMjIqMsgw==","signatures":[{"sig":"MEYCIQC2V08HzKn6RtgYPzGOofjRbuGdF1ga0ycI10uXDW8GSQIhAKzYdU9pNld0gn7bg6RVDIRBMQqoqstC9QiuHD3tMCj1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDlxNKaMkbJXoUtV8skSef8/q6O+oeCKSrA8OdCArvAoAiEAtnqc7oD8i/JNwJ3FeNjfratO9sx13ixWGc3QdLGqqQw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"4d1a38a30fd0bbe465848f5159f8c28c8153ae42","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.5.0_1789943886139_0.08749331508913105","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@scanmate/align","version":"0.6.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.6.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"60b91f76eb5d0dab3a5da290da2c0ef753e097ce","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.6.0.tgz","fileCount":24,"integrity":"sha512-oy5MhFN4xO1vg9cm5xOBnoa1plpL9zzBeWfwVPnw7kAucOBSCQaWOp5g9nQTFqrXeMZpDg0iwm4y7TNcjhcvSg==","signatures":[{"sig":"MEUCIAaRHJCyLpBi6IoLsYP9K0M57YsgCiqpL5Wsy210rY6MAiEAno1kclXrEKtsuTd5MITIws/BnGWhVQrZGBRXVLumRNs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC7m1dVh4SyC5bmE7uG4Z+4jlyMq85HDkRFf2iaKAuoDAiAaOgm8dhaouh8DPEdud3iyUOReIiYUyQHpMzZIFdARCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"46cb4269c2e5978236737bee0aa421e177b17463","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.6.0_1789945153489_0.8756516717608915","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@scanmate/align","version":"0.6.1","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.6.1","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"c495c16d53260d2db0b8e3d60bc7bf49b5c47b6f","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.6.1.tgz","fileCount":24,"integrity":"sha512-GOegHZzrQlQmFaq4V4cPtql2RT64wwW897Cp9C/Ta9k8l/rwSacyv/b/tguUhRLekB/+hqTMUEBBo57PyAnDFQ==","signatures":[{"sig":"MEUCIQDqDfsR9HcULnnUTiBSbIU9g3KAadZdLk0CuCocdkF6NQIgcPxvWVm6A+x2a0tpod85zgUS21Du7sdl3yR2hYXQtk4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEk8amiRIVaVFqmQger3uIgIZruBSPLbcpFt+XWkTvO2AiEAxRKNaaH2Ct3pzsE/3Axf4eVAdRyyj8GtJ1ObWEIUIZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"4f455c289cf382e6e21323b44010ab3cfa797117","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.6.1_1789972522140_0.06316471353664399","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@scanmate/align","version":"0.7.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.7.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"2a85d683ce4931150ad9be9d9d291d70dc748236","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.7.0.tgz","fileCount":24,"integrity":"sha512-aNFZifnIDGiJw2/gnasOa0O+irrspvdSRVfwE3HYfmJB2uvFWK1uZkWBiNVD2TBSARaIHgnCBhZXyz9lhN8LXA==","signatures":[{"sig":"MEQCIESYYFitcixF01sJdC3VJ9z1V5RyGdMeSVWyvU2Xqk+NAiBnTskJUELcWyZtnQ31Iv1Bm2d6E1g3qtCYhRbP6e8x4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCfcWx+X3vQExaF1elxWbliq0EmqASA17Bpr+duQjr6hQIhAJeAHzOweQg/eTc8eLYfYsFMElXauYEGBS8R4ucTfDT7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"1e71da1d5cb9c233f0b11b724a320697822dd56b","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.7.0_1789974549747_0.17815456735384538","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@scanmate/align","version":"0.7.1","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.7.1","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"fe0056b3b492b670fbd4f7d51f83329ca43bfa38","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.7.1.tgz","fileCount":24,"integrity":"sha512-+gNXDyNZlKgFpEJuIKsMJIzcudlUaawGblcoEnXkUmvVcPt8/l9M6sW54A72BwZOtIe+GbnXUnCp13noGiLcJg==","signatures":[{"sig":"MEQCIFfoCbv2zz6DNOdm2psrzsZiGim9DEZDkL7tgujXRkM3AiARYeIcHzaoGTiwHwZBdxqFgf2RGk5aMB94dpKNah0G3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCBciQfHGIJZfX5UciZJ32WXgiWQCjdeScTzc0NPG9XQAIgGlSY7068mQHNhWB+t4IDGWT48YGVhwD+uGnoQ2BVn5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"21cfbee02535534895e9158ba76156811db2a0ec","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.7.1_1789977253161_0.21400105186690976","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@scanmate/align","version":"0.8.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.8.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"ecd3a203e3df3fe559e5edcdaec342864359abb0","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.8.0.tgz","fileCount":24,"integrity":"sha512-PBD3gA+c9m2H/pUOa7cC+y1/j8YNiN7PQAdKmVUWyTzLgVJQSU9R7Oa7wHNdP9yIi5sh00dj3lu225jpOlhH3Q==","signatures":[{"sig":"MEUCICFdHpVxNkPqFDVuGSUta9WmI6iWvMNYIQdEqwbCzOYNAiEAr3IHt0O6DWgVgWosqUZZ7D2YokTNZUPJINjnX8IYa1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD2d9AWZR4FVxiBYElN5y48YXWuPoe7yvx/gTvavX0T/AIhAMY6tkF69C+FeaID7YaLbwueyOkj8ZghAZvIJGz5Nro0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"b68931810164a0a57e3a72ac6597dbda5083121a","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.8.0_1790004811359_0.2372311200302306","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@scanmate/align","version":"0.9.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.9.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"2d0e84fb5a2c5b64c25b638921c61e27064869ca","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.9.0.tgz","fileCount":24,"integrity":"sha512-BFuT39xtB3aQYRKKsoh+7t0Qf2ZgbHlxksrK1qVpX9N0YAoxaAHdKs3ZAvrk7A2kpGOjJRCSwJnvJ8l6hOL/RA==","signatures":[{"sig":"MEUCIQD7bD18c5RNvfCnX/zyw6KA01EXrbvYaNGMj9FpqSOdlgIgQF2y7vQFmRV/+t85qzMdDz7d9CU9wlOpvINESd70Ht0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDwhTlGr3hClAY5RatqO5lfiAIoJS0ImXm1swvchMBFrQIhAOzwR+vYhAAIb83OZk0KGtgYUjHWlP1QlIgKVVorV4Qo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83856},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"63b7c41232c8c3c8556f0d26f851a953283bed25","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.9.0_1790010845943_0.03224588027706088","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@scanmate/align","version":"0.10.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.10.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"eeb9b77a85a9f4139419fe5cdc5dd28740ec9634","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.10.0.tgz","fileCount":24,"integrity":"sha512-iJZpMG1kCxeu9PCHNpOtulCYqwIHaVw9r6W4DMXPy/KweQYoErm4Hcn01LnSAqsXfSugOH4gZ1h561bKyueGgw==","signatures":[{"sig":"MEUCICrHco6bHu7QStfz/dG3R+HSx2eeQSOn/+nTOOQgwKiXAiEA8Adtj+9BCbC7TGR4cWF9/nViit765zhzKm/sam4CpE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCHwHdg3zprXdH3w3nxcqya+RPw17+5d7YVi6csXg/118CIQC8w6+lj1KYS/jO76pLpyIQhQcHkQYUWBsrcatoGBqSvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83858},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"cc04368f904ec1c20d4f8115c434d1f49d89872a","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.10.0_1790029200926_0.10260543012511536","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@scanmate/align","version":"0.11.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.11.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"2a31f92729b852bf93ff534531aaa67ab1e0ae77","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.11.0.tgz","fileCount":24,"integrity":"sha512-ZjusZgRd8YUFNR7ho0BpM9prKXz2J7Crqcqd53zCXGZikfscxM6tjAOcI4KrygS0HMX1iqFk80fkDMARFfFQyg==","signatures":[{"sig":"MEUCIQCOOFoihXXF1wpI2Z2efv+BzXkxtmbwYjW4vaHIT63fCwIgQBD3Z5Z5zLCryJRZiXTr0yMaAExjN6Jf3hevFwRJ56U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDmNhlD0AOoQ21WP96cm6dETwXH5pumsx2BBXFWCW2XiAIgCx5CavFYnzQTof/+WZzQJ7sgep+lb9StVKPhlboMTkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83858},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"e43332b148f53bc49f16aa25938aa675348e41e4","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.11.0_1790030202768_0.5777434280968503","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@scanmate/align","version":"0.12.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.12.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"1194799d318d0ab716cbd2aa7eb92e13c5a924a9","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.12.0.tgz","fileCount":24,"integrity":"sha512-9tuQHMGNC8rsEOlRzjgbePLO+Wh6nhiyw1SXP+8R4CrWKUvIkGkRoPtnUQDcs8/7dfsG1CZRWtyAuUq2d54CBQ==","signatures":[{"sig":"MEQCIGv4d5Rk7lPMXJu7wO6A+FOPqT7fWkFL8XIofqQyiiS+AiB4QsDuwjlOVckhUdLObe9Z1QFdKXHbCjWYDbUPFnywLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCFKvDDWWbHdcPoQT7gXnV1HYVEx/w4bz+1EnBKAPKbdwIhAOjhMPRFNDAto+8YMEGi7Ed/pLjH3ImR3kgRDiTE3yfr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83858},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"d3df6daac00aa727a1c53cf1cc0de6d19a08ffa4","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.12.0_1790031776781_0.3583067396081596","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@scanmate/align","version":"0.13.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.13.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"41eae873def7921399cf1ae5e12d5068b2502169","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.13.0.tgz","fileCount":24,"integrity":"sha512-q9Xxsz/BhJFQ56ZMXzc6UiiB28fCQhUPmfzh3CUrIKYM5HLzdNsReZIyu1q/aW6Z7LxydYkC2pX/jyFahkW6AA==","signatures":[{"sig":"MEUCIQD2xasFQRcYS5g9ytA2e1n8xmI7Kh6FDY1J2wQa3En7qwIgBd3syM4sFqjbRBOEP/RfYnLbKlHudLAUi7AeFvBl3Eg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDwVx/y3FGpI9sSH0gXdh3kaMsZEILbhK6eqLZ+KQwQrwIgXdTZ+ZZlsHwn28ktJaizWGyC736/bdc38XW+z9JLrcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83858},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"660b4bf01fb7aa9b14684c51a3636eabfc581bee","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.13.0_1790032734094_0.33647605823943394","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@scanmate/align","version":"0.14.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.14.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"33035d24056b41fa9395ac186b3ea368c7a8e209","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.14.0.tgz","fileCount":24,"integrity":"sha512-SwAuB5XaT/zNCNsr+ehc2aRNgkYNcN/OIJjFT9ANLI5xub51K968/CzUJ9j9sP860mHsutdWhhmt0zj+FQYlpA==","signatures":[{"sig":"MEUCICM9FyMrrvV02Eh9r5P643Q5uhWdIuTrcbksRsDuq93kAiEA+9uyeb0THGUqyJ1So/ULR8TsTBPI9wXucOfcJMDiqOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEYp8pvdYXjS2I55DJcRxkNzlYvnYud0YrfHq0y+9SDbAiEA4jQDrF5cSfd+d7/b99JW+pRWvgllYUDuLYsMmidRicI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83858},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"3fec1859d00f6e23a5c6811a69abf7d59cbc805f","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.14.0_1790033360130_0.3929940120451414","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@scanmate/align","version":"0.15.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.15.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"bcbde26d5bb68528e69dc83388eadc6e9ff3cd25","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.15.0.tgz","fileCount":24,"integrity":"sha512-IMNvkDvlIVyoYszaotIgseulLHUDABhOpJXG0T14R03d1ZMIeoQDgRo1BwMSg3fEzzTxumxe1QDe2rAG6Y1VJg==","signatures":[{"sig":"MEYCIQDTbfup40BEYJe7KM1/uPB6JZAYsiNYOTPfy3vVJi7TkgIhAMgeXsnw7mpy93OxXjXW8y3ZksZy4Q10JpYpNHiwIbrb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAUYlTMdQV8cPTZcO5lxeMsLAiLnrd65SX0YTkZZqvNTAiEAok/Z7C+zMBjxLRzcHIjCKZDDhfUKV3ogTvLP+JaIaKs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83858},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"bf6e7988fa313ffbff0b54d6f7ebf387a4988011","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.15.0_1790034211285_0.015640617419722336","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@scanmate/align","version":"0.16.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.16.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"3ebc3b17c706117851c4f06200b1caa24781a799","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.16.0.tgz","fileCount":24,"integrity":"sha512-qSZRiuBEfu18PkEJeL8sSktv122+4SsPsWsJnXDeC0GxTSNEmE0Y1X9hGwk/FA/2hDN7hTrMPQ0of5fd8eF5Zg==","signatures":[{"sig":"MEUCIQCN+FmcCbBKEljTGsj3JjkL8umqEW6djI1D6Gn/k8tNMwIge/+HfNV2aJQe9Km5qU4yCOYb7xbsinRa6XPPRBJMSkE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDUEFI1fBi6YJy0h7J245k5dDMZXH8tA27l/LFOhDDkoAiAaiLk2WuUZc8GdSE1OYX8/YULE7aHQPl1aKmuj6Z3dyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83878},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"6224367a62837394cae68aaa830afb62bed9020c","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.16.0_1790091534129_0.9229230919555114","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@scanmate/align","version":"0.17.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.17.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"7a1abe848c313bd2fef1afa90974a47a27d12082","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.17.0.tgz","fileCount":24,"integrity":"sha512-EaM6Xgrn+R/OU2hwgQ/2uoK6X3B6LNb1GVk+YMWWmg+uwj5zXYnwe18IK8PiRZK9JYgMIRTjCn7NMJrfZKRo9g==","signatures":[{"sig":"MEUCIQD9pVRcpnjh4nQOUduC5zol0vSXDw8Uo2/CY8SyS9Y6IAIgCWvAHL2z4GFo1GJE6DCEJDv1w7YAgBkqWxbRzB5LWU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDbFAOn6ZNCvWPOIDMpbm7Dmt+DobWhBl7kARqupvkZAAiAV49BWtQmXWALEIehWV+08wXVjnia+JkgE8nF/wX0sdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83878},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"81658e9affcbb2cd6530deb74bd3b94e8bd65ca2","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.17.0_1790093631610_0.7030763242936122","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@scanmate/align","version":"0.18.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.18.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"24cb811521564933f53b43322749a96b8df76823","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.18.0.tgz","fileCount":24,"integrity":"sha512-yEeYLcguGTVUC5UrEAv25B6ZWMIDBWeyWit23VqGjDnmlfvxZXe871PMNg2H+hmKf0fo4wO2rMOE8Z53cWNNsw==","signatures":[{"sig":"MEUCIAfSJzUnKtGtuDpe7CNgGv5n5iB1Dz4ooKOHOJPm05LoAiEAlhFLkvnSgyrJ309VZBRfE72Y+jrbfesku0Sk1zvdDXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCa/xK7hbgCwu7dLmvJwHZ+B2xjHtF5rB6zZrXF4Ru42AIhAIHrF73BN5JIk1vMw8XUFN6PJKAIpVyINTOTmnxWgQHZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"e2332bc60643b9c11555841b73fd0f8809031f01","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.19.1","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.18.0_1790095177713_0.2953111727192397","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@scanmate/align","version":"0.19.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.19.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"5cf866e77dde18292dad758e49a57cb5c6f77b1e","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.19.0.tgz","fileCount":24,"integrity":"sha512-XoC8JRcqQFUFbBl9t3v3MDrQZ7rESdoX0iPpOePXa3COBcVJkvG70Rnw5SMeIMQJkCMRxQ7V9rDw5fCDQhFAqA==","signatures":[{"sig":"MEUCIQDDb9tbICtyipQjBB/3mEpSLPfi6Xe3s82poYFfnkUfJwIgEQvHSQJUf/dDWFDNWLPAFGu/8t75OBCk5LZtgfCeXBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID+SULJufEM48vT/0Co+cOTr2nlE4QMUWQwZ0oxxkaPpAiEAj4/JJfeNcW+OTQ+FcqtUCNvbvcJVr6rnbnjS8or+GVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"6a2cacff9e5bd99b5415a926f51f690f06bbadd7","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.19.0_1790114660493_0.5516691773011502","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@scanmate/align","version":"0.20.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.20.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"c67b87960c796bc48714de4139b610a5a888fa89","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.20.0.tgz","fileCount":24,"integrity":"sha512-D3m/8BoTxOd7JO+SOm36egUtubWH0p8Ogv3ZQXZngIjkIXJQnQ9/b4YQ63NNyeRhuyDlrvMCJAhsWsaRDZcD9Q==","signatures":[{"sig":"MEQCIGIqvI5C2DDtgU/Cj+CB7mwgxRd3ErnWdAVjWGsQeN99AiAKoBna2MIsFlXNkAAJDYkmyHgDW6WiAm56s1+zxOAtqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA1bfrrbPbMr/Ciu9rowHNeSlOciOdHAdiek1iu7ghVmAiEAjXbnKZGiXf1/c426QozF+A3zMDiCherhGgCgpJMPJNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"bbc426c7b9982fc3328ee83ef012c720237b3ef1","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.20.0_1790115627245_0.6369651189194492","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@scanmate/align","version":"0.21.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.21.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"4cc8f43fc98d7e1c0be479fc5f611af8a56b4bb1","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.21.0.tgz","fileCount":24,"integrity":"sha512-6IFXyDGV5XCKLjIXHSZtZVAvkZ2axjl6+Fa2K8AIH65dGRHJp+uRPU62iXBtAwr+Fi/3BEJQXhiew6endhzO/Q==","signatures":[{"sig":"MEUCIQDD8JbuqNyY1JGwUUSJOYiNuaf7QpyZn2Y2hYBlXs3JVwIgAeehQBQ+EAmvpSnZb83Y3dBrV444ddKfrwsBMYahk8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDu9p6oMlOMCoPWiaAhbRGr88i4dEpGirit4ebF7yUSXwIgdS1BhAmcpIELjsH9mI0QCWtu7+Wzn6tAmqlJ+egkL/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"19d45824529dce5af3e27a20d22e94a3116b365d","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.21.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.21.0_1790121532426_0.5422992807760463","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@scanmate/align","version":"0.22.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.22.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"4faa595dd63c2d0946a1113ea313c2d1b4ed2dec","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.22.0.tgz","fileCount":24,"integrity":"sha512-3Xpj3xe2JxPisdESy6osjWbx3VrgYGSgqOBGn7+hzN0/uac58epXPmv/yo+6l8sfTNVulFomfYCWvXcL7ZgEsQ==","signatures":[{"sig":"MEYCIQCnfjZKHrqChfhYZq9szjwPFygnVlTPAjm0n47sZ4PSgAIhAOpdcuWZn/7fJXrjbtapYoeMUqS6+fjwJPQGMggRCLkq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDceXM4ck/nhn9OLcndYfG71Cb8n4TD5nb+k94BSpXrjAiEA8mvaC+S5JTIhiHp+ulKahLSTwL181ass3PL+z/uE0Xk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"5037ebad4d34bd6c26044eb88506d207049c9afa","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@scanmate/ink":"^0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.22.0_1790123281013_0.084312639908934","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@scanmate/align","version":"0.23.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.23.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"7b0a4250055f1f72ccb76efad2e0308594636605","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.23.0.tgz","fileCount":24,"integrity":"sha512-pTaWzf4BPn+nR0yIjnk8duAZHNHzNiGDMncfbPlAPWyT/lXJTdP5i+0zzunxgBGsR8tlWwn+foyUOFlyDFJqHA==","signatures":[{"sig":"MEYCIQD/Xo2Byr2WoPsbeG0c7JvNOsAN1pmwVhRmPvyReWSTPQIhAMsGRP5XqAeAMBgRLdct0k5tdDNQA56Qg22txhth8kfT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDM274S5ZjEjiI/S+4kjIrl0sUV3Jlo2eElX2sa+kBrMAIgLoJ0f8Wuq/MivkxmDkqArAcIZ5soNyLVfJg3sduKbvU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"558b5d662571709c1fe1b2bc890e28291e8cc4d6","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.23.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.23.0_1790159085997_0.11429860946690895","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@scanmate/align","version":"0.24.0","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.24.0","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"ebd3c6ee9dfc66b98f6ae389bd11d9ec3a711b3d","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.0.tgz","fileCount":24,"integrity":"sha512-14iuf4nlCWwhG/da//9HZZKJS5XLcmijZOWsBVDxBNSMr2E9nzHbnl6VyYy6imjGkEVnZ7XpYaAtXEVD1DDx0A==","signatures":[{"sig":"MEYCIQC3EhL5pVK2A337dcHAxrdgAsaxw2z/pLCletgNvWEa4AIhAMPL1laenzHpd1wNSE7ARc30sToOXXK4Yfb8cwgQ/aBc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQClRN9nmaAH0ki8d4sUBAqpW0B1onQXc+N4mh/YMGZymwIhAKVl34o+aS2irBYipFw3izMxBaRa+UsO2M2xrvE/nm25","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"b7da30949033f3744721289d5368bc2396783e43","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.24.0_1790255942831_0.3124280674278195","host":"s3://npm-registry-packages-npm-production"}},"0.24.1":{"name":"@scanmate/align","version":"0.24.1","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.24.1","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"8f190471f8a968313c920d5870b491c5192f699e","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.1.tgz","fileCount":24,"integrity":"sha512-Te3HFL5wv90CTRcUz5mpVhWvB6DmmQEG2qcEzOLEWFUo2PxgaoH5iSgld9fstRUZcMI7cdX5TmXWb8Y3SUgoHQ==","signatures":[{"sig":"MEYCIQCDqWfRp2jzLg270DbqfrNyQ21KKmQeEonjsAuZX38I6AIhAJ/59h6Fz7igJ0pqCB2BHz3jQIFYGqPj+fJ5GDhekKk7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE+rnK1OIkHEtqzPQ3Tm6tcXRqh8DbkjhpGRciQgOo0aAiATcCPzDiBtOa4DkVatebRfQ25H3oTZFoBN5G6Bpj5Ivw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"1235411c0973fce1e3d5f3370b54554e0b24451a","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.24.1_1790377456545_0.2539253633061527","host":"s3://npm-registry-packages-npm-production"}},"0.24.2":{"name":"@scanmate/align","version":"0.24.2","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.24.2","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"1fee6536bce2c4dba26b54130fb9d31d06611e99","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.2.tgz","fileCount":24,"integrity":"sha512-3bM7Y5uboxUtsM0IfQ8HlcSEtsFi9EB6YDrEsMij4NjHuOr9psHwa8F+iMAySAO5pGlaf4FcAymKbv0xNjbzrw==","signatures":[{"sig":"MEQCIFuKZDJMS2674he0anBuh80voWk1GQmOsREyiRXC+x1cAiAazrK/h1NpF1c6U7g8PQTqynJ6W4FbzvFq75Xe3vvngg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEctvVXgZYZoU/bpa33Iy1GGAGrMGMRS+z+oEg5VtNEoAiEAtvu+iCmhvp5jXZ/URRyQZSMTQT7vlzJYBXpOYTZUb6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"9e8096ca888a558fc478133400371b660a1b5bb2","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.24.2_1790381661356_0.49986611519555835","host":"s3://npm-registry-packages-npm-production"}},"0.24.3":{"name":"@scanmate/align","version":"0.24.3","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.24.3","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"564f6bcd35376cf945d718363e7692b452fae072","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.3.tgz","fileCount":24,"integrity":"sha512-gioZdgQOuujQfAsRM6RfZ7gdJeqI2zIQFXQwBYjCsdHoPoY8+h6VN0UZ7T53nOeck/3rkTYYJwy7EY2SQlqwHA==","signatures":[{"sig":"MEUCIQCw6g0aRBbRsfbv5w8WXm+py42ga/TGU3IBP8HbzlmMpQIgQChbu80bGyRLR9adOutYsLMUmpKGN0zYNrkvHRZJEuk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICFAP4FHEHvbjHeEV/qMwt019G7Zd+aCnd1lBKELSiuMAiA/EnH/2KPQSAJuUgoFnf43Umvc5kJcO9LNCE0ptsRxDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"c35471f79fc2a0046cb2df616ff7c330654f02fd","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.24.3_1790383735206_0.02400715497329453","host":"s3://npm-registry-packages-npm-production"}},"0.24.4":{"name":"@scanmate/align","version":"0.24.4","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.24.4","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"a0a561f9131289b392f4785089b67148e0e72c12","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.4.tgz","fileCount":24,"integrity":"sha512-Oclc3jrgVi+YrnDsFOFHwj7o4PqnKyHo+rSepxaDSezuhmMzztAqLbEByqmEcaEd47CsqF1giUDV7K4s/ljfuQ==","signatures":[{"sig":"MEUCIHqQShFi7R+sdhnlUCWPwR/CPjnBvSELjzE8r5EzzdE4AiEA7P4XjHqpD8f39+ECf6irtc0bKO09sbrvCqeepmdYtQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE6IjKPJRTp9ZJou7uuSWtD/GopXxEW6U5Gqq29H0UCgAiEApvktCC9aIkNQ7DAMa4Umi6Pz7k290jrpj2nMQUYolyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"39c9e1e861190a1d5a08dc12223ef6ebac85a500","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.24.4_1790404394727_0.5895447622304131","host":"s3://npm-registry-packages-npm-production"}},"0.24.5":{"name":"@scanmate/align","version":"0.24.5","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"author":{"name":"Eduardo Russo"},"license":"MIT","_id":"@scanmate/align@0.24.5","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"9c0eceaec4989a8dda4027cd63707b7f832c718a","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.5.tgz","fileCount":24,"integrity":"sha512-5xsP0/BjlwrjRuhTPOoU+zmIcEX9EbgJPYw2jQz9RJY8VAolAkn/WKssmrtoOPXKMZvGAe6rswOBUvSMEVklew==","signatures":[{"sig":"MEUCIQDm5pTuz66/fZ67FJtV/qrr9kDSTTGH9ydPGlT3dkG1TwIgczZ9xXB3pXSq+cE3LNaVKgsybkbpfU+qnqm1uU3NJGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEc+Kr8aNGl7PLFBnwkC+FEoKw7HnGOFcqyT+LVzUhhaAiEAlBhAKy6qQHy6rWc9xT/QrKhOMF3RlPckyQLgZy8Gy0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83886},"main":"./dist/index.esm.js","type":"module","types":"./dist/src/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"6f8a2aa7dd3f5b057eb5fe37f6dd171ae9aae456","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/align_0.24.5_1790405057058_0.44823565456634906","host":"s3://npm-registry-packages-npm-production"}},"0.24.6":{"_id":"@scanmate/align@0.24.6","bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"dist":{"shasum":"2dd60f8efa72e8061fcecc4cba21818cb50d2706","tarball":"https://registry.npmjs.org/@scanmate/align/-/align-0.24.6.tgz","fileCount":24,"integrity":"sha512-aIqeeTNWQehCFQzIKmcvPBr/FaEujT6dK1N3scKflsFwtLok6UzpnlvUu9u6YWpXTHVrGCxeDM1SnaO34Fj97w==","signatures":[{"sig":"MEQCIEir9u+UPmvq0K17c38R2mFzrKW7Su2MawARJZrgbqieAiAamNmsEOxSChWq63/H/rcyXbkBoSR6euqpqFaP3zHRUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCHNxml8orG6pjZjPBzDKlgwJMi69x/gOI31Xi2A0TyxAIgHdaBa1WPsW3+s9e2Do/gIexdaO7HTUTThC8rPX6+V40="}],"unpackedSize":83886},"main":"./dist/index.esm.js","name":"@scanmate/align","type":"module","types":"./dist/src/index.d.ts","author":{"name":"Eduardo Russo"},"module":"./dist/index.esm.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"gitHead":"a92c7313fa052cd4a732b57d5c5f2a8617f434f7","license":"MIT","version":"0.24.6","_npmUser":{"name":"russoedu","email":"russoedu@gmail.com"},"homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"_npmVersion":"11.20.0","description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","directories":{},"maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"@scanmate/ink":"^0.24.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/align_0.24.6_1790410483655_0.2942963384473849"}}},"time":{"created":"2026-09-19T16:32:02.396Z","modified":"2026-09-26T08:14:43.978Z","0.0.2":"2026-09-19T16:32:02.684Z","0.0.3":"2026-09-20T12:03:45.366Z","0.1.0":"2026-09-20T12:20:53.966Z","0.2.0":"2026-09-20T14:58:20.527Z","0.2.1":"2026-09-20T16:50:07.016Z","0.3.0":"2026-09-20T18:42:55.191Z","0.3.1":"2026-09-20T18:59:36.034Z","0.4.0":"2026-09-20T19:17:24.684Z","0.5.0":"2026-09-20T22:38:06.246Z","0.6.0":"2026-09-20T22:59:13.565Z","0.6.1":"2026-09-21T06:35:22.218Z","0.7.0":"2026-09-21T07:09:09.822Z","0.7.1":"2026-09-21T07:54:13.230Z","0.8.0":"2026-09-21T15:33:31.449Z","0.9.0":"2026-09-21T17:14:06.034Z","0.10.0":"2026-09-21T22:20:01.027Z","0.11.0":"2026-09-21T22:36:42.865Z","0.12.0":"2026-09-21T23:02:56.874Z","0.13.0":"2026-09-21T23:18:54.166Z","0.14.0":"2026-09-21T23:29:20.252Z","0.15.0":"2026-09-21T23:43:31.369Z","0.16.0":"2026-09-22T15:38:54.247Z","0.17.0":"2026-09-22T16:13:51.700Z","0.18.0":"2026-09-22T16:39:37.810Z","0.19.0":"2026-09-22T22:04:20.584Z","0.20.0":"2026-09-22T22:20:27.336Z","0.21.0":"2026-09-22T23:58:52.513Z","0.22.0":"2026-09-23T00:28:01.105Z","0.23.0":"2026-09-23T10:24:46.075Z","0.24.0":"2026-09-24T13:19:02.913Z","0.24.1":"2026-09-25T23:04:16.635Z","0.24.2":"2026-09-26T00:14:21.564Z","0.24.3":"2026-09-26T00:48:55.288Z","0.24.4":"2026-09-26T06:33:14.822Z","0.24.5":"2026-09-26T06:44:17.136Z","0.24.6":"2026-09-26T08:14:43.791Z"},"bugs":{"url":"https://github.com/russoedu/scanmate/issues"},"author":{"name":"Eduardo Russo"},"license":"MIT","homepage":"https://github.com/russoedu/scanmate/tree/main/packages/align#readme","keywords":["scan","alignment","image-registration","deskew","homography","orb","ransac","document"],"repository":{"url":"git+https://github.com/russoedu/scanmate.git","type":"git","directory":"packages/align"},"description":"Put a scanned or photographed page back onto the original it came from: deskew, rescale and register, trying transform models until one is good enough.","maintainers":[{"name":"russoedu","email":"russoedu@gmail.com"}],"readme":"![scanmate align](./assets/scanmate-align.svg)\n\n# `@scanmate/align`\n\nPuts a scanned or photographed page back onto the original it came from: deskewed, rescaled and registered, so a rectangle in PDF points means the same place on both.\n\n![the scan as it came back, and the same scan put back on the original's page](./assets/aligned.jpg)\n\n*Left: the returned scan, turned 1.4° and 3% small. Right: the same pixels on the original's canvas. Made from the [IRS Form W-9](https://www.irs.gov/pub/irs-pdf/fw9.pdf) (a work of the United States government, in the public domain): filled in as a generator would, printed, signed by hand and scanned crooked.*\n\n## Install\n\n```bash\nnpm install @scanmate/align @scanmate/extract\n```\n\n```ts\nimport { alignPages, alignScan } from '@scanmate/align'\nimport { extractPair } from '@scanmate/extract'\n\n// A pair of documents, page by page:\nconst { pages } = await extractPair({ original: 'fw9-issued.pdf', scanned: 'fw9-returned.pdf' })\nconst aligned = await alignPages(pages)\n\naligned[0].scanned.raster         // left above: the scan as it came back\naligned[0].aligned.raster         // right: the same pixels on the original's canvas\naligned[0].aligned.confidence     // 0-1: how well the ink agrees after warping\naligned[0].aligned.transform      // model, scale, rotation, shear, translation\naligned[0].aligned.matrix         // original coordinates -> scan coordinates\naligned[0].aligned.inverse        // and back\n\n// Or two images on their own:\nconst result = await alignScan('fw9-page-1.png', 'fw9-returned.jpg')\n```\n\n## How it works, briefly\n\n1. **Ink separation** on both pages, so shadows, grey lids and uneven light do not take part in anything.\n2. **A coarse guess** of scale, rotation and shift, tried three ways — frame to frame, content to content, and after deskewing each page — nudged by FFT phase correlation and judged on ink correlation. Descriptors only match between images of comparable size, and nothing in a scan says what resolution it is.\n3. **ORB features**: FAST-9 corners, steered BRIEF descriptors, brute-force Hamming matching with a ratio test and a displacement filter.\n4. **RANSAC** per transform family, re-fitted on its inliers. A page of text is full of identical-looking corners, so wrong matches are the normal case, not an accident.\n5. **One warp for the winner**, at full resolution.\n\nEverything above the per-model step is done once, so trying three models costs about 1.2× trying one.\n\n## Choosing the model\n\n`model: 'all'` (the default) sweeps `similarity` → `affine` → `homography`, cheapest first, and stops as soon as one reaches `confidenceTarget`. A freer model must beat the best simpler one by `modelPreferenceMargin` to replace it: eight degrees of freedom will happily overfit a flatbed scan's noise, winning on correlation by a hair while being geometrically wrong.\n\nIf no model finds a consensus — a nearly blank form has few corners — the coarse estimate is returned, scored the same way, with `method: 'coarse'`. There is always a transform and always a number saying how much to trust it.\n\n## Reading the confidence\n\n`confidence` is the ink correlation after warping, clamped to `[0, 1]`. Measured on real returned documents:\n\n| | ink correlation |\n|---|---|\n| aligned to the wrong page | 0.01 – 0.30 |\n| correctly aligned, **signed** page | 0.80 – 0.84 |\n| correctly aligned, ordinary page | 0.92 – 0.97 |\n\nA signed page scores lower because it was signed: the signature is ink the original has not, and correlation counts it as disagreement. A threshold has to leave room for that.\n\n## Options\n\n| option | default | |\n|---|---|---|\n| `model` | `'all'` | `'similarity' \\| 'affine' \\| 'homography' \\| 'all'`. |\n| `confidenceTarget` | `0.9` | Stop the sweep here. |\n| `models` | all three | Restrict or reorder the sweep. |\n| `modelPreferenceMargin` | `0.02` | How much better a freer model must be. |\n| `workingSize` | `1400` | Longest side for features and matching. |\n| `coarseSize` | `512` | Longest side for the coarse search. |\n| `maxFeatures` | `1200` | Corners kept per image. |\n| `ransacThreshold` | `3` px | Inlier distance. |\n| `minInliers` | `12` | Below this there is no consensus. |\n| `maxSkewDeg` | `12` | Largest per-page skew considered. |\n| `maxScaleRatio` | `6` | Largest size ratio entertained. |\n| `maxDisplacementRatio` | `0.12` | A match may not move further than this. |\n| `interpolation` | `'bilinear'` | `'nearest'` for masks. |\n| `output` | `'png'` | `'none'` keeps the raster only. |\n| `seed` | fixed | The same input gives the same matrix. |\n\n`alignPages` adds `onProgress`, and carries each page's metadata through untouched.\n\n## Diagnostics\n\n`AlignResult.diagnostics` reports the coarse score and strategy, each page's measured skew, feature and match counts, inliers and inlier ratio, reprojection error, final correlation and overlap, the selected model, every attempt, and the time taken. A low score is then a thing you can read rather than a mystery.\n\n## Building blocks\n\n`estimateCoarse`, `detectAndDescribe`, `matchFeatures`, `phaseCorrelate`, `ransac`, `fitSimilarity`, `fitAffine`, `fitHomography`, `findInliers` and `polishTranslation` are exported for callers who want a stage on its own.\n\n## How it decides\n\n[`documentation/algorithms.md`](./documentation/algorithms.md) has the algorithms in full: what each step measures, the decision flows, every constant with the measurement behind it, and what the package deliberately does not do.\n","readmeFilename":"README.md"}