Skip to content
Projects

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.

How these counts are measured

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 jscanify in a window load event listener to ensure OpenCV is loaded

➡️ view documentation

Explore related projects