Drop First Image
Drop Second Image


Passed Percentage Difference Pixel Difference


Apply New Params

TravisCI Status Slack Status

Rembrandt.JS - Client- and server-side image comparison library


Rembrandt.JS is a image comparison library that works both with the HTML5 Canvas2D API as well as the drop-in Node.JS replacement node-canvas.

We created Rembrandt.JS to have an easy-to-use image comparison library for our internal tests for PhotoEditorSDK. Go check it out. It's really awesome. :)



Please follow the installation instructions over at node-canvas in order to correctly install all required system libraries. Afterwards, just run:

npm install rembrandt


Download the latest build from our Releases page, then include it like this:

<script src="/path/to/rembrandt.min.js"></script>

The Rembrandt JavaScript variable is now globally available.

Using module bundlers like Webpack etc.

Install Rembrandt via npm install rembrandt, then require it inside your JavaScript like so:

var Rembrandt = require('rembrandt/build/browser')


Here is an example (ES6 / ES2015):

import Rembrandt from 'rembrandt'

      const rembrandt = new Rembrandt({
        // `imageA` and `imageB` can be either Strings (file path on node.js,
        // public url on Browsers) or Buffers
        imageA: '/path/to/imageA',
        imageB: fs.readFileSync('/path/to/imageB'),

        // Needs to be one of Rembrandt.THRESHOLD_PERCENT or Rembrandt.THRESHOLD_PIXELS
        thresholdType: Rembrandt.THRESHOLD_PERCENT,

        // The maximum threshold (0...1 for THRESHOLD_PERCENT, pixel count for THRESHOLD_PIXELS
        maxThreshold: 0.01,

        // Maximum color delta (0...255):
        maxDelta: 20,

        // Maximum surrounding pixel offset
        maxOffset: 0,

        renderComposition: true, // Should Rembrandt render a composition image?
        compositionMaskColor: Rembrandt.Color.RED // Color of unmatched pixels

      // Run the comparison
        .then(function (result) {
          console.log('Passed:', result.passed)
          console.log('Difference:', (result.threshold * 100).toFixed(2), '%')
          console.log('Composition image buffer:', result.compositionImage)

          // Note that `compositionImage` is an Image when Rembrandt.js is run in the browser environment
        .catch((e) => {



Authors and Contributors

Copyright (c) 2016 by PhotoEditorSDK.com