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.
brew install libgphoto2
, apt-get install libgphoto2-dev
or download and build from http://www.gphoto.org/proj/libgphoto2/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 :)
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');
});
});
This project uses Semantic versioning.