node package manager
Easy collaboration. Discover, share, and reuse code in your team. Create a free org »


Build Status Gittip Dependencies

wip: This is work in progress. Converting to use generators and graphicsmagick-stream library. The uploading is handled by pkgcloud. The master branch and 1.0.0-alpha1 tag works only with s3.


A node module to resize, crop and upload images (with different variants and presets) to the cloud.


  1. node >= 0.11.12 with --harmony flag
  2. You need to install libgraphicsmagicks.

Using osx

$ brew install graphicsmagick --build-from-source

Using ubuntu

$ sudo apt-get install libgraphicsmagick1-dev


$ npm install imager


Use a config file. For example imager-config.js


exports.variants = {
  item: {             // variant 
    thumb: {          // preset 
      options: {      // preset options 
        pool: 5,
        scale: { width: 200, height: 150, type: 'contain' },
        crop: { width: 200, height: 150, x: 0, y: 0 },
        format: 'png',
        rotate: 'auto',
    large: {
      original: true  // upload original image without image processing 
  gallery: {
    // ... 

In the above config, item and gallery are variants. thumb and large are presets. Each preset has an options object which is a graphicsmagick-stream config object.

preset options

  • options - An object that is passed to graphicsmagick. See what options are available here

  • rename - A function that accepts an object file as an argument. It has the following properties: name, size, type and path. It is called before uploading each file.


    variants.item.thumb.rename = function (file) {
      return 'users/1/thumb/' +;
    var imager = new Imager(variants.item, ...);
  • original - A true value. If this option is set, the original image will be uploaded without any image processing.


exports.storages = {
  local: {
    provider: 'local',
    path: '/tmp',
    mode: 0777
  rackspace: {
    provider: 'rackspace',
    username: process.env.IMAGER_RACKSPACE_USERNAME,
    apiKey: process.env.IMAGER_RACKSPACE_KEY,
    authUrl: '',
    region: 'IAD', // 
    container: process.env.IMAGER_RACKSPACE_CONTAINER
  amazon: {
    provider: 'amazon',
    key: process.env.IMAGER_S3_KEY,
    keyId: process.env.IMAGER_S3_KEYID,
    container: process.env.IMAGER_S3_BUCKET


var Imager = require('imager');
var config = require('./imager-config.js');
var imager = new Imager(config.variants.item,;
// You can also pass only the storage without a variant which will simply 
// upload the original image 
// new Imager( 


.upload(files, callback)

files is an array of files or a single file. A file can be a file object, absolute file path pointing a local file or base64 encoded image data. callback accepts err and an object containing the array of uploaded images.

var config = require('./imager-config.js');
var imager = new Imager(config.variants.item,;
imager.upload(files, function (err, avatar) {
  // avatar => 
  // { 
  //   thumb: [ '', ], 
  //   large: [ '', ] 
  // } 

.remove(files, callback)

files is an array of files or a single file. A file should be the file name of the image on the storage. callback accepts err as an argument.

var config = require('./imager-config.js');
var imager = new Imager(;
var files = ['file-1.png']; // or just 'file-1.png' 
imager.remove(files, function (err) {



$ npm test


  • Support base64 image uploads
  • Implement .remove()
  • Implement .regenerate()
  • Test the api's for rackspace