2.1.2 • Public • Published


    Fast convertion/scaling of images using a pool of long lived graphicsmagick processes

    npm install graphicsmagick-stream

    Build Status

    It works by spawning and reusing a custom graphicsmagick processes (see src/) that accepts images over stdin and pipes out the converted result over stdout


    var gm = require('graphicsmagick-stream')
    var fs = require('fs')
    var convert = gm({
      pool: 5,             // how many graphicsmagick processes to use
      format: 'png',       // format to convert to
      scale: {
        width: 200,        // scale input to this width
        height: 200,       // scale input this height
        type: 'contain'    // scale type (either contain/cover/fixed)
      crop: {
        width: 200,        // crop input to this width
        height: 200,       // crop input this height
        x: 0,              // crop using this x offset
        y: 0               // crop using this y offset
      page: [1,5],         // only render page 1 to 5 (for pdfs)
                           // set to a single number if you only want to render one page
                           // or omit if you want all pages
      rotate: 'auto',      // auto rotate image based on exif data
                           // or use rotate:degrees
      density: 300,        // set the image density. useful when converting pdf to images
      split: false,        // when converting pdfs into images it is possible to split
                           // into multiple pages. If set to true the resulting file will
                           // be a tar containing all the images.
      tar: false           // stream a tar containing the image. This is forced to `true`
                           // if split is set to `true`
        // override any of the above options here

    You do not need to set all the options. If you only want to scale an image do

    var stream = convert({
      scale: {
        width: 400,
        height: 300

    You can also use it to get metadata info about an image using

    var info =, info) {
      console.log(info) // prints something like {width:500, height:400, format:'png'}

    For more examples and usage see the test folder

    Scale types

    • contain sets the scaled image to maximum have a width/height of the scale box. Always respects ratio.
    • cover sets the scaled image to at least have one of the width/height within the scale box. Always respects ratio.
    • fixed sets the scaled image to precisely the given width/height of the scale box. If both width/height is given it does not respect the ratio.

    PDF Conversion

    If you install ghostscript as well you will be able to convert pdfs to images by simply piping in a pdf and setting output format to jpeg (or another image format).

    If you are rendering a multipage pdf scale.height will set the height of each page. To force scale.height to donate the height of the entire image set scale.multipage = true.

    Use split = true to output each page as an image file. This will result in a tar file containing all the images, so you will need to untar them on the other end. Use a project like tar-stream to achieve this.


    You need to install libgraphicsmagicks in order to compile this.

    Using OS X and Homebrew

    brew install graphicsmagick --build-from-source
    brew install libarchive

    You will have to build the binary using the following command

    gcc src/*.c -o bin/convert -L/usr/local/opt/libarchive/lib -I/usr/local/opt/libarchive/include -larchive -O `GraphicsMagickWand-config --cflags --cppflags --ldflags --libs`

    Using Ubuntu

    sudo apt-get install build-essential libgraphicsmagick++1-dev libarchive-dev

    Then npm install should work.




    npm i graphicsmagick-stream

    DownloadsWeekly Downloads






    Last publish


    • e-conomic-devops
    • mattdaly
    • memphis88
    • vertygo
    • claudiuhojdavisma
    • sorribas
    • freeall
    • gausby
    • mafintosh