lwille / node-gphoto2

A Node.js wrapper for libgphoto2
MIT License
298 stars 91 forks source link

node-gphoto2

Build Status NPM version

Become a Patron

A Node.js wrapper for libgphoto2. Useful for remote controlling of DSLRs and other digital cameras supported by gphoto2.

The included test application currently allows you to

The test suite can be run using npm test. There's also a small test application (npx coffee examples/server.coffee) which runs on http://localhost:1337 and allows to change camera settings and to take pictures.

Prerequisites

Test/dev prerequisites

Test-server prerequisites

Installation

After installing the dependencies, just install using:

npm install gphoto2

If it fails, please thoroughly check the output - link errors usually indicate missing dependencies. Also, the script tries to detect wether libgphoto2 is correctly installed - if this check fails although you properly installed it, please report :)

Usage

This example only shows how to achieve certain tasks, it's not meant to be executed without any asynchronous control flow logic.

var fs = require('fs');
var gphoto2 = require('gphoto2');
var GPhoto = new gphoto2.GPhoto2();

// Negative value or undefined will disable logging, levels 0-4 enable it.
GPhoto.setLogLevel(1);
GPhoto.on('log', function (level, domain, message) {
  console.log(domain, message);
});

// List cameras / assign list item to variable to use below options
GPhoto.list(function (list) {
  if (list.length === 0) return;
  var camera = list[0];
  console.log('Found', camera.model);

  // get configuration tree
  camera.getConfig(function (er, settings) {
    console.log(settings);
  });

  // Set configuration values
  camera.setConfigValue('capturetarget', 1, function (er) {
    //...
  });

  // Take picture with camera object obtained from list()
  camera.takePicture({download: true}, function (er, data) {
    fs.writeFileSync(__dirname + '/picture.jpg', data);
  });

  // Take picture and keep image on camera
  camera.takePicture({
    download: true,
    keep: true
  }, function (er, data) {
    fs.writeFileSync(__dirname + '/picture.jpg', data);
  });

  // Take picture without downloading immediately
  camera.takePicture({download: false}, function (er, path) {
    console.log(path);
  });

  // Take picture and download it to filesystem
  camera.takePicture({
    targetPath: '/tmp/foo.XXXXXX'
  }, function (er, tmpname) {
    fs.renameSync(tmpname, __dirname + '/picture.jpg');
  });

  // Download a picture from camera
  camera.downloadPicture({
    cameraPath: '/store_00020001/DCIM/100CANON/IMG_1231.JPG',
    targetPath: '/tmp/foo.XXXXXX'
  }, function (er, tmpname) {
    fs.renameSync(tmpname, __dirname + '/picture.jpg');
  });

  // Get preview picture (from AF Sensor, fails silently if unsupported)
  camera.takePicture({
    preview: true,
    targetPath: '/tmp/foo.XXXXXX'
  }, function (er, tmpname) {
    fs.renameSync(tmpname, __dirname + '/picture.jpg');
  });
});

Versioning

This project uses Semantic versioning.

Contributors