puffinsoft/jscanify
puffinsoft/jscanify has 1,788 GitHub stars and 81 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 02:08 UTC. Last push 2026-07-20.
The Javascript document scanning library.
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
Powered with opencv.js
Supports the web, NodeJS, React, and others.
Available on npm or via cdn
Features:
- paper detection & highlighting
- paper scanning with distortion correction
[!IMPORTANT]
🎉 jscanify v1.3.0+ has just been released! Same API, better results. See the release to see the difference! 🎉
- 🆕 glare suppression
- 🆕 multi-colored paper support

➡️ view documentation
Quickstart
Developers Note: you can now use the jscanify debugging tool to observe the result (highlighting, extraction) on test images.
Import
npm:
$ npm i jscanify
import jscanify from 'jscanify'
cdn:
<script src="https://docs.opencv.org/4.7.0/opencv.js" async></script>
<!-- warning: loading OpenCV can take some time. Load asynchronously -->
<script src="https://cdn.jsdelivr.net/gh/ColonelParrot/jscanify@master/src/jscanify.min.js"></script>
Note: jscanify on NodeJS is slightly different. See wiki: use on NodeJS.
Highlight Paper in Image
<img src="/path/to/your/image.png" id="image" />
const scanner = new jscanify();
image.onload = function () {
const highlightedCanvas = scanner.highlightPaper(image);
document.body.appendChild(highlightedCanvas);
};
Extract Paper
const scanner = new jscanify();
const paperWidth = 500;
const paperHeight = 1000;
image.onload = function () {
const resultCanvas = scanner.extractPaper(image, paperWidth, paperHeight);
document.body.appendChild(resultCanvas);
};
Highlighting Paper in User Camera
The following code continuously reads from the user's camera and highlights the paper:
<video id="video"></video> <canvas id="canvas"></canvas>
<!-- original video -->
<canvas id="result"></canvas>
<!-- highlighted video -->
const scanner = new jscanify();
const canvasCtx = canvas.getContext("2d");
const resultCtx = result.getContext("2d");
navigator.mediaDevices.getUserMedia({ video: true }).then((stream) => {
video.srcObject = stream;
video.onloadedmetadata = () => {
video.play();
setInterval(() => {
canvasCtx.drawImage(video, 0, 0);
const resultCanvas = scanner.highlightPaper(canvas);
resultCtx.drawImage(resultCanvas, 0, 0);
}, 10);
};
});
To export the paper to a PDF, see here
Notes
- for optimal paper detection, the paper should be placed on a flat surface with a solid background color
- we recommend wrapping your code using
jscanifyin a windowloadevent listener to ensure OpenCV is loaded
➡️ view documentation
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,769 starspublic-apis/public-apis
A collective list of free APIs
496,989 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
440,739 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,139 stars