Composable image operations using node-canvas

Usage no npm install needed!

<script type="module">
  import cops from '';



Original photo by Quinn Dombrowski. Sorry.

Cops is an image manipulation tool belt for Node.js using a Cairo-backed Canvas implementation. The goal is to make common image operations such as resizing, compositing, cropping, and creating text overlays as simple and friendly as possible.

A note on performance: I've made every attempt to keep I/O buffered and asynchronous whenever possible, but because node-canvas currently provides no good way to create an Image from a Buffer, reading images blocks the thread. You will probably experience hiccups when loading large images.


Install cops with npm:

$ npm install cops


The cops module exposes both classes and asynchronous helpers for specific tasks. Check out the examples below, or refer to the API documentation for more info.

Resize an image

var cops = require("cops"),
    shrink = cops.resize("50%");"big.png", function(error, canvas) {
  shrink(canvas, function(error, canvas) {
    cops.write("small.png", canvas, function(error) {
      // we're done here

Cops operations are designed to work with async.waterfall, each producing a Canvas instance for the next operation:

var cops = require("cops"),
    async = require("async");

  cops.resize({width: 200, height: 200}),
], function(error, canvas) {
  // mic drop

Command Line Utility

The cops CLI gives you some nice, node-y tools:

# resize images
$ cops resize big.jpg 50% small.jpg
$ cat big.jpg | cops resize - 50% > small.jpg

# compose images
$ cops compose --gravity southeast photo.jpg watermark.png

Run cops --help for more information.