Giter Club home page Giter Club logo

photo-booth's Introduction

Build Status npm version

photo-booth

A multi-platform photo booth software using Electron and your camera

photo booth image from The Verge (Source: The Verge, accessed 08 March 2018)

Important Note

This repository is no longer under active maintainance.

How it works

Simply connect your camera via USB or even via wifi to the computer running this application, for example a Raspberry Pi. The app shows a countdown by clicking at the screen (or tapping at a touchscreen), triggers your camera to take a photo, downloads it from your camera, shrinks it to a smaller size and displays it on the screen. First in fullscreen, then added to a gallery of previous taken photos.

photo-booth also provides a web application by running a webserver. Every newly taken photo gets immediately pushed to the webapp. From there it's easy for your guests to download their photos. There's also the option to leave a contact address for sending the photos afterwards. Creating GIF animations and printing out selected photos are also possible through the web application. You only have to provide a Wi-Fi hotspot and a printer (optional for printing feature).

Because of the use of gphoto2 and cups it works with nearly any camera or printer like plug and play.

Installation

To clone and run this repository you'll need Git, Node.js, gphoto2 and CUPS installed.

Before getting started please check here if the hardware you want to use is supported. I tested photo-booth under Ubuntu Linux (64bit), MacOS and Raspbian (Raspberry Pi 3, ARM). Anyway, the documentation here will be focused on Linux based systems.

Also check here if your camera is supported (at least Image Capture should be available). Please also note, that only the JPEG-mode of your camera is currently supported (no RAW or RAW+JPEG).

Raspbian STRETCH (with desktop):

# Install needed dependencies
sudo apt update
sudo apt install git libxss-dev libgconf-2-4 libnss3

# Install latest version of libgphoto2, choose last stable release
wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh && sudo bash gphoto2-updater.sh

# If you are using a Raspberry Pi > 1: Activate hardware acceleration
sudo apt install libgl1-mesa-dri
sudo su -c 'grep -q -F "dtoverlay=vc4-kms-v3d" /boot/config.txt || echo "dtoverlay=vc4-kms-v3d" >> /boot/config.txt'

# Clone the repository
git clone https://github.com/philipptrenz/photo-booth.git && cd photo-booth

# Make the Node installation script executable
sudo chmod +x ./scripts/install_node_v9.sh

# Install node
sudo ./scripts/install_node_v9.sh

# Install (you can do this later if you want to add a printer to use the printing feature)
npm install

Run photo-booth

To run photo-booth the following command should do it. To run the webapp on port 80 and for the usage of GPIO pins at the Raspberry Pi root privileges are required.

WORKAROUND FOR RASPBERRY PI 3 if Photo-Booth stays black

export LD_PRELOAD=node_modules/sharp/vendor/lib/libz.so

Important: The command needs to be run from a terminal on the GUI, executing via SSH will most likely fail!

sudo npm start

Basically, it's not a good idea to run a web server as root, if you do not need GPIOs consider setting up a redirect from port 80 to 8080 on your system. That can be achieved by a iptables rule for example. Then you can start photo-booth with

npm start

HINT: The little linux tool unclutter can hide the cursor.

Start photo-booth on boot (for Raspberry Pi)

To start photo-booth on boot add the following line at the end of /home/pi/.config/lxsession/LXDE-pi/autostart:

@sudo node /home/pi/photo-booth/scripts/cli.js

Configure it

There are a few settings and options that you should take a look at.

The config.json

The project includes a config.json file. There you can set several parameters, e.g. to start in fullscreen or not or if you want to keep your taken photos on your camera.

It looks like this:

{
	"language": "en",
	"init": {
		"fullscreen": true,
		"width": "1440",
		"height": "900",
		"showDevTools": false,
		"useGPIO": false,
		"grayscaleMode": true,
		"preventScreensaver": false
	},
	"maxImageSize": 1500,
	"countdownLength": 5,
	"slideshow": {
		"enabled": true,
		"activatesAfterSeconds": 30,
		"secondsPerImages": 8
	},
	"gphoto2": {
		"capturetarget": 1,
		"keep": true,
		"simulate": false
	},
	"content_dir": null,
	"webapp": {
		"password": "test",
		"maxDownloadImageSize": 800,
		"gifDelay": 1000,
		"enableRemoteRelease": true,
		"contactAddressType": "email"
	},
	"printing": {
		"enabled": false,
		"simulate": false,
		"printer": "printer-name",
		"limitPerUser": 0,
		"overlay": {
			"image": "overlay.png",
			"x": "right",
			"y": "bottom"
		},
		"grayscale": true,
		"layouts": []
	},
	"live": {
		"framerate": 10
	},
	"branding": {
		"type": "text",
		"content": "<div style='font-size: 1.2em; padding-left: 25px;'><i class='fa fa-wifi' aria-hidden='true' style='font-size: 2.5em;'></i> <b style='font-size: 2em; padding-left: 15px;'>photo-booth</b><br /><p>Log into wifi, browse to <b style='padding: 0 5px;'>photo.app</b> and download your photos!</p></div>",
		"position": "bottomleft"
	},
	"flash": {
	  "enabled": true
	}
}

Best way to modify the config.json is by copying it to my.config.json, photo-booth will prefer the latter one:

cp config.json my.config.json

Some notes:

  • Images get shrinked after got downloaded from the camera, set the size with maxImageWidth
  • You have to figure out the captureTarget of your camera. Even if you choose to keep images at the camera, if gphoto2 chooses to store by default to the RAM of your camera, images get deleted when camera get turned off. Figure out the right captureTarget by running gphoto2 --get-config=capturetarget, then choose something should named sd card or so. This should be your first try if a photo gets taken, but it won't show up at the screen.
  • If you want to keep images on camera, set keep to true
  • The errorMessage is pure HTML, just fill in whatever you want
  • Slideshow and liveview do not work together.
  • You have to experiment with the framerate for live preview depending on the power of your machine. On a Notebook with an Intel i7-8550U upto 15% CPU utilization are needed for 20 frames per second. Also if your camera is running on battery, it drastically decreases the battery duration.
  • When flash is set to enabled a white page will be shown as a flash after completing the countdown
  • You can use gphoto2.simulate = true when you want to test your setup without an active camera connection
  • The webapp.contactAddressType defines what kind of address types are supported inside the webapp. Supported values are none (feature disabled), email (email validation) and text (no input validation).

How to use the integrated webapp

As mentioned above photo-booth has a built in web page where images can be downloaded, gif animations can be created and images can be printed.

For an easy way to use it, start a open wifi hotspot on the computer photo-booth runs on. If you use a Raspberry Pi, there're enough tutorials out there to figure it out (i.e. here). Then connect your device, e.g. a smartphone, with the wifi, open your browser and type in the ip address of the Pi. More elegant is it to configure a DNS redirect so the users can type in a web address like "photo.app", therefore I use dnsmasq which is also configured as DHCP server.

Use a push button to trigger photos

You can connect a physical push button to the GPIO Pins of your Pi to trigger photos!

Therefore activate the GPIOs by setting "useGPIO": true in config.json. Then connect the first port of the push button to the ground pin of your Pi, second to GPIO 3 (PIN 5) and to a resistor of about 10k-100kΩ, the other end of the resistor to 3.3V (e.g. PIN 1). That's all!

Make sure you run the application as root (sudo npm start), GPIOs need root privileges.

 _______RASPBERRY PI_______
                          |
          |----3.3V---●o  |
 ~50kΩ →  ▯           oo  |
          |----GPIO3--●o  |
      [-\             oo  |
         \------GND---●o  |
                      oo  |
                      oo  |
                      oo  |
                      oo  |
                      oo  |
                      oo  |
                      oo  |
                      oo  |
                          |
                          |

Install a printer

photo-booth also supports image printing with configurable layouts. For this feature to work you need a supported printer, install additional software and configure the layouts individually.

Install printer software

  1. Connect and power on the printer
  2. Run the following scripts:
    sudo apt-get update
    
    # Install additional libraries for collage creation
    sudo apt-get install libpixman-1-dev
    sudo apt-get install libcairo2-dev libjpeg-dev libgif-dev
    sudo apt-get install libpango1.0-dev
    
    # Install cups
    sudo apt-get install cups
    
    # Install cups-config (needed for node-printer)
    sudo apt-get install libcups2-dev
    
    # Change user (adjust pi, if you have changed this)
    sudo usermod -a -G lpadmin pi
    
    # Install optional node modules
    cd photo-booth
    npm install
    
    cd helpers/collage
    npm install
  3. Navigate to http://localhost:631 and add the new printer
    • Important: Remember the name, you need it for the configuration file later
  4. Check if the printer is enabled and is accepting jobs. This can be done using the UI or with the following commands:
    # Check state
    lpstat -p
    
    # Enable if the printer is disabled
    cupsenable printer-name

Configure the application

  • Configure the content in config.json (or my.config.json) under the section printing
  • Set enabled to true
  • Set simulate to true if you only want to test the image generation
  • Set printer to the printer name you configured during the installation process
  • Set limitPerUser if you want to limit the printouts per person. 0 means no limit and with the webapp password you always have unlimited printouts.
  • Use grayscale if you want to print only grayscale images (seperate config only for printing feature) - Warning: The grayscale feature does not work for larger DPI values.
  • Use overlay to add a image to each printout. Be sure that it matches all your layouts (eg. 2x2 layout with spacing won't match with an overlay in the same color as the background color) and also consider that not all placehoders must be occupied (eg. do not use the background color in the overlay image)
  • Configure the layouts under layouts. You can add multiple layouts (the user can select the desired layout from within the web application). A sample layout looks like this:
     {
     	"key": "selphy_2x2",
     	"options": {
     		"dpi": 300,
     		"width": 2,
     		"height": 2,
     		"imageWidth": 868,
     		"imageHeight": 577,
     		"backgroundColor": "#ffffff",
     		"spacing": {
     			"top": 8,
     			"left": 0,
     			"bottom": 8,
     			"right": 1,
     			"betweenImages": 11
     		}
     	}
     }
    • This sample layout is a 2x2 layout optimized for the following configuration:
      • Canon Selphy CP1300 printer with a paper size of 100 x 148 mm and a resolution of 300 x 300dpi (eg. 1181 x 1748 px)
      • Nikon D90 camera with a picture size of 4288x2848 which results in a width to height factor of 1.5056...
    • Description of the options:
      • key: Internal identifier for the layout. Must not contain invalid file name characters
      • dpi: The printer resolution
        • Note: Must not match the full printer DPI (images will be scaled to the whole printing area)
        • Defaults to 96, which should already be quiet good for most portable low quality printers
        • Warning: Higher DPI values require more resources, which can be too much for a small computer like a Raspberry PI. Also the grayscale function does not work at higher resolutions anymore.
      • width and height: Number of images per row / column
      • imageWidth and imageHeight: The width / height of each individual image in the layout. Try to set the values in a way that it will give the same aspect ration as the original image size from the camera.
      • backgroundColor: Layout background color which is used to fill the spacing, the unused space when the original images do not have the same aspect ratio or placeholders without an image.
      • spacing: Spacing outside the images (top, left, bottom and right) and between two individual images (betweenImages).

Unsupported devices

Please note that there are several devices which are not supported by photo-booth.

Unsupported architectures

As Electron, the main framework, besides ia32 (i686) and x64 (amd64) only supports the ARM v7 architecture (and ARM v8 as it is backwards compatible), several ARM devices are not supported. Further information can be found here. The following ARM devices among others can not be supported:

  • Raspberry Pi Zero
  • Raspberry Pi Zero W / WH
  • Raspberry Pi 1 A / A+
  • Raspberry Pi 1 B / B+

Unsupported cameras

  • The Raspberry Pi camera module is not supported
  • Webcams (such as those built into your laptop or Logitech USB) are not supported

Also some other DSLR and Compact Cameras are not supported. Please check for your specific model here.

Common issues

If you have any problems, start reading here. If you do not find anything, check under Issues, if someone else already had a similar problem. If you still have no solution, open a new issue.

How to quit photo-booth in fullscreen?

Hit the Escape key to exit the fullscreen mode, then you can close the app.

Why are all images in grayscale?

Go to config.json and change grayscaleMode to false.

My camera takes a photo, but it does not show up

This may be related to wrong capture target settings. Run gphoto2 --get-config capturetarget from the console, the output looks something like this:

Label: Capture Target
Type: RADIO
Current: Internal RAM
Choice: 0 Memory card
Choice: 1 Internal RAM

Identify the number of the memory card and change the captureTarget property in config.json.

error (-53 'could not claim the usb device')

It seems to be an old known problem with gvfs-gphoto2-volume-monitor module. For reference read here.

sudo rm /usr/share/dbus-1/services/org.gtk.vfs.GPhoto2VolumeMonitor.service
sudo rm /usr/share/gvfs/mounts/gphoto2.mount
sudo rm /usr/share/gvfs/remote-volume-monitors/gphoto2.monitor
sudo rm /usr/lib/gvfs/gvfs-gphoto2-volume-monitor

Contributors

Mentions

The project got featured at The Verge, incredible! Also take a look at the video they made at Facebook!

An article was also published in the blog of my degree course (in German).

partyblitzer published a post on his blog and a video on YouTube using this software for his DIY photo booth setup.

photo-booth's People

Contributors

andi34 avatar bhaveshgohel avatar blak3r avatar bokuweb avatar clemens-tolboom avatar fscherwi avatar galeksandrp avatar icoxfog417 avatar ionicabizau avatar izuzak avatar jgoestl avatar jlord avatar kevinsawicki avatar laiso avatar lal12 avatar louis993546 avatar marcel-hofer avatar phanect avatar philipptrenz avatar posva avatar sahildua2305 avatar tcyrus avatar thompsonemerson avatar vangod90 avatar webworkerjoshua avatar wikijm avatar zanesterling avatar zeke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

photo-booth's Issues

electron failing

I have tried to update npm and everything but something is not right with electron.

This is the log:

@philipptrenz/[email protected] start /home/pi/photo-booth
electron .

/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/dist/electron: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! @philipptrenz/[email protected] start: electron .
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the @philipptrenz/[email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-04-21T12_40_06_020Z-debug.log

Is there something to help with this install/run?

sh: 1: electron-rebuild: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! @philipptrenz/[email protected] postinstall: electron-rebuild
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the @philipptrenz/[email protected] postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2018-12-07T08_43_36_652Z-debug.log

Uncaught Error: /lib/arm-linux-gnueabihf/libz.so.1: version `ZLIB_1.2.9' not found

Hi @philipptrenz,

I encounter the quite same issue as #23, which corresponds to the presence of a black screen after manual execution of the command below:
npm start or sudo npm start

uname -a give me this result:

Linux RaspAP3 4.4.17-v7+ #904 SMP Tue Aug 16 17:02:00 BST 2016 armv7l GNU/Linux

Here are the actions I have carried out and their results:

pi@RaspAP3:~/photo-booth $ npm install

> @philipptrenz/[email protected] postinstall /home/pi/photo-booth
> electron-rebuild

✔ Rebuild Complete
up to date in 26.336s
pi@RaspAP3:~/photo-booth $ git pull
Already up-to-date.
pi@RaspAP3:~/photo-booth $ npm install

> @philipptrenz/[email protected] postinstall /home/pi/photo-booth
> electron-rebuild

✔ Rebuild Complete
up to date in 24.897s
pi@RaspAP3:~/photo-booth $ electron-rebuild
-bash: electron-rebuild : commande introuvable
pi@RaspAP3:~/photo-booth $ npm install --save-dev electron-rebuild
npm notice save electron-rebuild is being moved from dependencies to devDependencies
+ [email protected]
added 15 packages and updated 3 packages in 37.45s
pi@RaspAP3:~/photo-booth $ $(npm bin)/electron-rebuild
✔ Rebuild Complete
pi@RaspAP3:~/photo-booth $

Then the error I get thanks to the DevTools:

ELECTRON_ASAR.js:173 Uncaught Error: /lib/arm-linux-gnueabihf/libz.so.1: version `ZLIB_1.2.9' not found (required by /home/pi/photo-booth/node_modules/sharp/build/Release/../../vendor/lib/libpng16.so.16)
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:598:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/pi/photo-booth/node_modules/sharp/lib/constructor.js:10:15)
    at Object.<anonymous> (/home/pi/photo-booth/node_modules/sharp/lib/constructor.js:259:3)
module.(anonymous function) @ ELECTRON_ASAR.js:173
Module._extensions..node @ module.js:598
module.(anonymous function) @ ELECTRON_ASAR.js:173
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/constructor.js:10
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/constructor.js:259
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/index.js:3
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/index.js:15
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ utils.js? [sm]:25
(anonymous) @ /home/pi/photo-booth/app/utils.js:313
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ booth.js? [sm]:29
(anonymous) @ booth.js? [sm]:175
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ booth.html:inline_0.js:1

Thanks for the time you spend on this wonderful project 😃

Raspberry does not start anymore

Hi!

I downloaded and installed everything as explained. I'm using the newest version of raspberrian. I made update and upgrade. The first start worked great as I typed ./start.sh. After reboot of the raspberry I got stuck on a login screen. While booting the raspberry shows a "Welcome to Raspberry PI Desktop" sign which is new to me. Then I get an GUI interface to login. The raspberry seems to accept the password "raspberry" but instead of login in it seems that the routine is broken and the GUI get back to the login screen.

If I type a wrong password the raspberry shows me that the password is not valid. If I get to Crlt+Alt+F1 I'm already logged in but I cannot start a gui with startx

I am a bit confused what I should do because there is no error massage or similar.

startx gives the error massage: "timeout in locking authority file /home/pi/.Xautority"

Greetings
Hendrik

Installation fails

Attempting to run npm install && ./node_modules/.bin/electron-rebuild produces numerous warnings and errors on a raspberry pi. Please assist if you can.

Attached is the npm-debug file that was produced.
npm-debug.log

"sudo npm start" fails

Hi Philipp,

with the newest Pi Stretch and your manual I'm not able to get the app started. It says:

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @philipptrenz/[email protected] start: electron .
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @philipptrenz/[email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2018-07-09T21_27_48_695Z-debug.log

Can you help?

installing npm in program folder returns errors

Upon attempting to install npm in the project folder I am getting a bunch of errors. Any idea what is happening here?

pi@raspberrypi:~ $ sudo npm start
npm ERR! Error: ENOENT: no such file or directory, open '/home/pi/package.json'
npm ERR! at Error (native)
npm ERR! If you need help, you may report this entire log,
npm ERR! including the npm and node versions, at:
npm ERR! http://github.com/npm/npm/issues

npm ERR! System Linux 4.9.59-v7+
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "start"
npm ERR! cwd /home/pi
npm ERR! node -v v4.8.2
npm ERR! npm -v 1.4.21
npm ERR! path /home/pi/package.json
npm ERR! syscall open
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/pi/npm-debug.log
npm ERR! not ok code 0
pi@raspberrypi:~ $ cd photo-booth
pi@raspberrypi:~/photo-booth $ npm install
npm WARN engine [email protected]: wanted: {"node":">= 5.0"} (current: {"node":"4.8.2","npm":"1.4.21"})
npm WARN engine [email protected]: wanted: {"node":">= 5.0"} (current: {"node":"4.8.2","npm":"1.4.21"})
npm ERR! TypeError: Cannot read property 'latest' of undefined
npm ERR! at next (/usr/share/npm/lib/cache/add-named.js:219:35)
npm ERR! at /usr/share/npm/lib/cache/add-named.js:207:5
npm ERR! at RegClient.get_ (/usr/share/npm/node_modules/npm-registry-client/lib/get.js:130:14)
npm ERR! at RegClient. (/usr/share/npm/node_modules/npm-registry-client/lib/get.js:49:12)
npm ERR! at /usr/lib/nodejs/graceful-fs/graceful-fs.js:78:16
npm ERR! at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)
npm ERR! If you need help, you may report this entire log,
npm ERR! including the npm and node versions, at:
npm ERR! http://github.com/npm/npm/issues

npm ERR! System Linux 4.9.59-v7+
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /home/pi/photo-booth
npm ERR! node -v v4.8.2
npm ERR! npm -v 1.4.21
npm WARN deprecated [email protected]: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated [email protected]: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-runtime/helpers'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-runtime/helpers']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-runtime/helpers' }
npm ERR! 404 Not Found
npm ERR! 404
npm ERR! 404 'paulcbetts/mime-types' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'electron-compile'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Linux 4.9.59-v7+
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /home/pi/photo-booth
npm ERR! node -v v4.8.2
npm ERR! npm -v 1.4.21
npm ERR! code E404
npm ERR! tar.unpack untar error /home/pi/.npm/mkdirp/0.5.0/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/concat-stream/1.6.0/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/yauzl/2.4.1/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/home-path/1.0.5/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/minimist/1.2.0/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/debug/2.6.9/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/sumchecker/1.3.1/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/babylon/6.18.0/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/lodash/4.17.4/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/babel-plugin-syntax-flow/6.18.0/package.tgz
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/node_modules/electron-download/node_modules/nugget'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/node_modules/electron-download/node_modules/nugget']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/node_modules/electron-download/node_modules/nugget' }
npm ERR! tar.unpack untar error /home/pi/.npm/rc/1.2.2/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/debug/2.6.9/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/lodash/4.17.4/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/babel-types/6.26.0/package.tgz
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-helper-remap-async-to-generator/node_modules/babel-traverse/lib/path/lib'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-helper-remap-async-to-generator/node_modules/babel-traverse/lib/path/lib']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-helper-remap-async-to-generator/node_modules/babel-traverse/lib/path/lib' }
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/node_modules/electron-download/node_modules/nugget/test'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/node_modules/electron-download/node_modules/nugget/test']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/node_modules/electron-download/node_modules/nugget/test' }
npm ERR! tar.unpack untar error /home/pi/.npm/babylon/6.18.0/package.tgz
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-preset-es2016-node5/node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/babel-helper-regex/node_modules'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-preset-es2016-node5/node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/babel-helper-regex/node_modules']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-preset-es2016-node5/node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/babel-helper-regex/node_modules' }
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-preset-react/node_modules/babel-plugin-transform-react-jsx/node_modules/babel-helper-builder-react-jsx/node_modules/babel-types'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-preset-react/node_modules/babel-plugin-transform-react-jsx/node_modules/babel-helper-builder-react-jsx/node_modules/babel-types']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-preset-react/node_modules/babel-plugin-transform-react-jsx/node_modules/babel-helper-builder-react-jsx/node_modules/babel-types' }
npm ERR! tar.unpack untar error /home/pi/.npm/babel-runtime/6.26.0/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/babel-types/6.26.0/package.tgz
npm ERR! error rolling back Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-helper-remap-async-to-generator/node_modules/babel-traverse/lib/path'
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY: directory not empty, rmdir '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-helper-remap-async-to-generator/node_modules/babel-traverse/lib/path']
npm ERR! error rolling back errno: -39,
npm ERR! error rolling back code: 'ENOTEMPTY',
npm ERR! error rolling back syscall: 'rmdir',
npm ERR! error rolling back path: '/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/babel-plugin-transform-async-to-generator/node_modules/babel-helper-remap-async-to-generator/node_modules/babel-traverse/lib/path' }
npm ERR! tar.unpack untar error /home/pi/.npm/babel-runtime/6.26.0/package.tgz
npm ERR! tar.unpack untar error /home/pi/.npm/lodash/4.17.4/package.tgz
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/pi/photo-booth/npm-debug.log
npm ERR! not ok code 0

Feature Request- Looping Picture Taking

In some photo booths, you start the booth by clicking a button, then it automatically takes 3-4 pictures in a sequence without having to push the button again.
I'm a total noob here, but would there be a way to set up the booth.js script so that it would loop the picture taking 3-4 times? This could be configured in the config.json file and turned on or off, and should work with all cameras which are supported.
The basic idea would be to click the button, rund the countdown, take the picture, repeat countdown, take picture 3-4 times.
Any thoughts?

Files Not Found

Hi Philipp,

Thank you for creating this photo-booth project.

I ran the following command "sudo apt-get install git npm gphoto2 libxss-dev libgconf-2-4 libnss3" and received the following error messages:

Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libssl-dev armhf 1.0.1t-1+deb8u6
404 Not Found [IP: 2a00:1098:0:80:1000:75:0:3 80]
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libssl-doc all 1.0.1t-1+deb8u6
404 Not Found [IP: 2a00:1098:0:80:1000:75:0:3 80]
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libx11-dev armhf 2:1.6.2-3
404 Not Found [IP: 2a00:1098:0:80:1000:75:0:3 80]
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libx11-doc all 2:1.6.2-3
404 Not Found [IP: 2a00:1098:0:80:1000:75:0:3 80]
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libc-ares-dev armhf 1.10.0-2+deb8u1
404 Not Found [IP: 2a00:1098:0:80:1000:75:0:3 80]

I am running Raspbian Jessie and do not know what to do next. Any suggestions would be greatly appreciated.
Thanks,

Tom

Problem with the focus

When using photo-booth, when we want to take a picture sometimes the camera can't find it's focus immediately and gphoto2 gives an error causing the programme to crash.

Image quality

Hi Philipp,

First of all, I warmly thank you for the job you did on photo booth.

I would like to know if there is any solution to manage image quality. Most of them after resizing (1500) are less than 100 ko ? I am looking for a better quality equivalent to 1 Mo file. Thank you if you can help me. Fabien

Uncaught error: version `ZLIB_1.2.9' not found

Install all seemed to go smooth, then on launch I get a black screen with the 'elements console sources' etc tabs and the uncaught error below;

Uncaught Error: /lib/arm-linux-gnueabihf/libz.so.1: version `ZLIB_1.2.9' not found (required by /home/pi/photo-booth/node_modules/sharp/build/Release/../../vendor/lib/libpng16.so.16)
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:598:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/pi/photo-booth/node_modules/sharp/lib/constructor.js:10:15)
    at Object.<anonymous> (/home/pi/photo-booth/node_modules/sharp/lib/constructor.js:256:3)
module.(anonymous function) @ ELECTRON_ASAR.js:173
Module._extensions..node @ module.js:598
module.(anonymous function) @ ELECTRON_ASAR.js:173
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/constructor.js:10
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/constructor.js:256
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/index.js:3
(anonymous) @ /home/pi/photo-booth/node_modules/sharp/lib/index.js:15
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ utils.js? [sm]:25
(anonymous) @ /home/pi/photo-booth/app/utils.js:313
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ booth.js? [sm]:29
(anonymous) @ booth.js? [sm]:170
Module._compile @ module.js:571
require.extensions.(anonymous function) @ require-hook.js:65
Module.load @ module.js:488
tryModuleLoad @ module.js:447
Module._load @ module.js:439
Module.require @ module.js:498
require @ internal/module.js:20
(anonymous) @ booth.html:inline_0.js:1

I have ZLIB 1.2.11 installed (or at least I thought I do), and I don't want to delve to much further in and risk doing some damage. Searching did not give me any answers.

Any ideas?

Thanks in advance

Unable to access webapp

Thank you for the incredible project. Works a treat except for some reason I can’t load the photos on my phone. I have set up the hotspot as per the guide mentioned in the readme, but either get error 403 or this page can not be displayed when trying to access it via the ip and port. I’ve tried changing the port to 80, 8081 and the default 8080. But to avail.

Problems during the installation

Hi,
I really appreciate the work you've done, @philipptrenz 👍

But it's more than a week now that I'm struggling with the installation of the software. I've been trying all kinds of Raspbian versions and now I'm trying again with Jessie Lite but I'm failing again.
Would you please help me out?

What should I install/what sequence should I follow? I found @JddAndrewLauren's in #2 was more or less working... but then I started facing problems there, too.

I'm a big noob when it comes to coding so I haven't understood much from the other issues.
Thanks in advance from Italy 🇮🇹

Update [12:37]
I forgot to say that I need it working for next saturday 😅 or at least I hope so..

Android chrome can't connect to built in web-page

Hello again. I've got the photo booth software working on my Raspberry Pi 3. I have configured to use it as a wifi access point per the suggested official method listed here: https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md
I do not have it connected to internet via the ethernet point, and I have not set up bridging.

I can connect to it from multiple devices, and I can go to the device's IP address and see the web page from an iPhone and my PC, but when I try to access it from my Pixel2 via Chrome, I get a "connection timed out" error.

Have you seen this before? I don't understand why it's not working only on my android.
Thanks, as always, for providing this software and your time! I've had fun setting this all up and seeing the resulting photos.

Error when saving photo

After getting through the issue 22 that was solved today, I sometimes and able to transfer photos, but mostly I get "Whoops ... Something went wrong when saving the photo, please try again". Using a Nikon D5200.

Issue on npm install command

Upon executing npm install command, it all seems to run fine until it tries to install epoll module

pi@raspberrypi:~/photo-booth $ sudo npm install npm WARN notice [SECURITY] electron has the following vulnerabilities: 1 critical, 1 high. Go here for more details: https://nodesecurity.io/advisories?search=electron&version=1.7.9 - Run npm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] uglify-js has the following vulnerability: 2 low. Go here for more details: https://nodesecurity.io/advisories?search=uglify-js&version=2.2.5 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] stringstream has the following vulnerability: 1 moderate. Go here for more details: https://nodesecurity.io/advisories?search=stringstream&version=0.0.5 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] debug has the following vulnerability: 1 low. Go here for more details: https://nodesecurity.io/advisories?search=debug&version=2.3.3 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] debug has the following vulnerability: 1 low. Go here for more details: https://nodesecurity.io/advisories?search=debug&version=2.2.0 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] debug has the following vulnerability: 1 low. Go here for more details: https://nodesecurity.io/advisories?search=debug&version=2.3.3 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] debug has the following vulnerability: 1 low. Go here for more details: https://nodesecurity.io/advisories?search=debug&version=2.3.3 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] parsejson has the following vulnerability: 1 high. Go here for more details: https://nodesecurity.io/advisories?search=parsejson&version=0.0.3 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] macaddress has the following vulnerability: 1 critical. Go here for more details: https://nodesecurity.io/advisories?search=macaddress&version=0.2.8 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] hoek has the following vulnerability: 1 moderate. Go here for more details: https://nodesecurity.io/advisories?search=hoek&version=2.16.3 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm auditto get more info. npm WARN notice [SECURITY] constantinople has the following vulnerability: 1 critical. Go here for more details: https://nodesecurity.io/advisories?search=constantinople&version=3.0.2 - Runnpm i npm@latest -gto upgrade your npm version, and thennpm audit` to get more info.

[email protected] preinstall /home/pi/photo-booth2/node_modules/gphoto2
((which pkg-config && pkg-config libgphoto2) || (which dpkg && (dpkg -s libgphoto2-dev || dpkg -s libgphoto2-6-dev)) || (which brew && ( brew list libgphoto2 || brew install libgphoto2 ) ) || (echo 'ERROR: libgphoto2 seems not to be installed.' 1>&2; exit 1))

/usr/bin/pkg-config

[email protected] install /home/pi/photo-booth2/node_modules/epoll
node-gyp rebuild

gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/9.11.2"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/home/pi/photo-booth2/node_modules/epoll/.node-gyp"
gyp WARN EACCES user "root" does not have permission to access the dev dir "/home/pi/photo-booth2/node_modules/epoll/.node-gyp/9.11.2"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/home/pi/photo-booth2/node_modules/epoll/.node-gyp"
gyp WARN EACCES user "root" does not have permission to access the dev dir "/home/pi/photo-booth2/node_modules/epoll/.node-gyp/9.11.2"
`
It enters an infinite loops saying root has no permissions on the dir.

Anyone with the same issue?
Looks like this has to do with some dependency of electron.
Thanks!

"sudo npm start" Opens to black screen.

When I run the PhotoBooth program with "sudo npm start" a black window opens and nothing happens. When I click the screen with my mouse or press my button connected to pin 3 nothing happens and the camera appears to also be doing nothing. I enabled gpio in the config file so it should be working. Any suggestions? Thanks!

-bash: ./node_modules/.bin/electron-rebuild: No such file or director

Hi Philipp,

first of all many thanks for ur work, awesome!
I run into a this following issue when running npm install && ./node_modules/.bin/electron-rebuild on cd/photo-booth

-bash: ./node_modules/.bin/electron-rebuild: No such file or directory

After that I cannot run the app as this error appears:

sh: 1: electron: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! [email protected] start: electron .
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2017-11-26T09_12_40_235Z-debug.log

Any suggestions on what I shall look at?
Many thanks

Andrea

Unexpected token import

I installed nodejs on my raspberry pi 3 (nodejs version 8.9.1).
When I start the program I only see a black booth.html window.
In the developer console I see an SyntaxError: Unexpected token import at line 18 of booth.html.

I assume this has something to do with a package version mismatch? Do you know what I did wrong?

Installation fails on MacOS during electron-rebuild

Hi community,

on my macOS Mojave MacBook, npm i fails during the native electron-rebuild.

I installed vips before via Homebrew but it's still not working. I did a fair amount of searching on Google but couldn't find anything. Xcode is installed, too.

Any pointers are highly appreciated!

Thanks, Max

Error message:

> electron-rebuild --verbose

✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
  CXX(target) Release/obj.target/sharp/src/metadata.o
../src/metadata.cc:86:28: error: use of undeclared identifier 'VIPS_META_IPCT_NAME'
      if (image.get_typeof(VIPS_META_IPCT_NAME) == VIPS_TYPE_BLOB) {
                           ^
../src/metadata.cc:88:43: error: use of undeclared identifier 'VIPS_META_IPCT_NAME'
        void const *iptc = image.get_blob(VIPS_META_IPCT_NAME, &iptcLength);
                                          ^
2 errors generated.
make: *** [Release/obj.target/sharp/src/metadata.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (photo-booth/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:159:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:12)
gyp ERR! System Darwin 18.2.0
gyp ERR! command ".nvm/versions/node/v9.3.0/bin/node" "photo-booth/node_modules/.bin/node-gyp" "rebuild" "--target=1.7.9" "--arch=x64" "--dist-url=https://atom.io/download/electron" "--build-from-source"
gyp ERR! cwd photo-booth/node_modules/sharp
gyp ERR! node -v v9.3.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok 

Failed with exit code: 1

Error:   TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
  CXX(target) Release/obj.target/sharp/src/metadata.o
../src/metadata.cc:86:28: error: use of undeclared identifier 'VIPS_META_IPCT_NAME'
      if (image.get_typeof(VIPS_META_IPCT_NAME) == VIPS_TYPE_BLOB) {
                           ^
../src/metadata.cc:88:43: error: use of undeclared identifier 'VIPS_META_IPCT_NAME'
        void const *iptc = image.get_blob(VIPS_META_IPCT_NAME, &iptcLength);
                                          ^
2 errors generated.
make: *** [Release/obj.target/sharp/src/metadata.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (photo-booth/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:159:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:12)
gyp ERR! System Darwin 18.2.0
gyp ERR! command ".nvm/versions/node/v9.3.0/bin/node" "photo-booth/node_modules/.bin/node-gyp" "rebuild" "--target=1.7.9" "--arch=x64" "--dist-url=https://atom.io/download/electron" "--build-from-source"
gyp ERR! cwd photo-booth/node_modules/sharp
gyp ERR! node -v v9.3.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok 

Failed with exit code: 1
    at SafeSubscriber._error (photo-booth/node_modules/spawn-rx/lib/src/index.js:277:84)
    at SafeSubscriber.__tryOrUnsub (photo-booth/node_modules/rxjs/Subscriber.js:242:16)
    at SafeSubscriber.error (photo-booth/node_modules/rxjs/Subscriber.js:201:26)
    at Subscriber._error (photo-booth/node_modules/rxjs/Subscriber.js:132:26)
    at Subscriber.error (photo-booth/node_modules/rxjs/Subscriber.js:106:18)
    at MapSubscriber.Subscriber._error (photo-booth/node_modules/rxjs/Subscriber.js:132:26)
    at MapSubscriber.Subscriber.error (photo-booth/node_modules/rxjs/Subscriber.js:106:18)
    at SafeSubscriber._next (photo-booth/node_modules/spawn-rx/lib/src/index.js:251:65)
    at SafeSubscriber.__tryOrSetError (photo-booth/node_modules/rxjs/Subscriber.js:251:16)
    at SafeSubscriber.next (photo-booth/node_modules/rxjs/Subscriber.js:191:27)

Runtime information:

$ vips -v && node -v && npm -v
vips-8.7.1-Mon Nov  5 12:06:40 UTC 2018
v9.3.0
5.5.1

Push button (GPIO) does not work

Hey there, I have connected a push button (using a 47k resistor) as mentioned in the repository. Also i started NPM with root privileges and turned on the gpio option in my.config.json. Are there any suggestions to fix that?

Kind regards
H
screenshot

Attempting on Pi Zero W, won't start

> @philipptrenz/[email protected] start /home/pi/photo-booth
> electron .

Hi,
I tried the photo booth on a Pi Zero W with no success. When I type sudo npm start or simply npm start, the CPU usage jumps to 100% for a sec before the two above lines are outputted and the program quits. Same happens when started from GUI terminal as in SSH terminal.

thanks so much!

Warning at installation

Hello I try to install this in my raspberry pi 3,
I retried many times to understand that I must before do:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

but I have many WARN errors:

npm WARN deprecated [email protected]: Thanks for using Babel: we recomment using babel-present-env now: please read babeljs.io/env to update!
npm WARN deprecated [email protected]: Jade has been renamed to pug, please install the lastest version of pug instead of jade
npm WARN deprecated [email protected]: Deprecated, use jstransformer
npm WARN prefer global [email protected] should be install with -g

It's normal?

Thanks

../node_modules/nan/nan_maybe_43_inl.h:112:15: error: ‘class v8::Object’ has no member named ‘ForceSet’

pi@raspberrypi:~/photo-booth $ npm install

[email protected] install /home/pi/photo-booth/node_modules/epoll
node-gyp rebuild

make: Entering directory '/home/pi/photo-booth/node_modules/epoll/build'
CXX(target) Release/obj.target/epoll/src/epoll.o
In file included from ../node_modules/nan/nan.h:192:0,
from ../src/epoll.cc:15:
../node_modules/nan/nan_maybe_43_inl.h: In function ‘Nan::Maybe Nan::ForceSet(v8::Localv8::Object, v8::Localv8::Value, v8::Localv8::Value, v8::PropertyAttribute)’:
../node_modules/nan/nan_maybe_43_inl.h:112:15: error: ‘class v8::Object’ has no member named ‘ForceSet’
return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);
^~~~~~~~
In file included from ../src/epoll.cc:15:0:
../node_modules/nan/nan.h: In function ‘v8::Localv8::Value Nan::MakeCallback(v8::Localv8::Object, v8::Localv8::Function, int, v8::Localv8::Value)’:
../node_modules/nan/nan.h:835:60: warning: ‘v8::Localv8::Value node::MakeCallback(v8::Isolate
, v8::Localv8::Object, v8::Localv8::Function, int, v8::Localv8::Value)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
v8::Isolate::GetCurrent(), target, func, argc, argv);
^
In file included from ../src/epoll.cc:12:0:
/home/pi/.node-gyp/10.1.0/include/node/node.h:172:50: note: declared here
NODE_EXTERN v8::Localv8::Value MakeCallback(
^
/home/pi/.node-gyp/10.1.0/include/node/node.h:88:42: note: in definition of macro ‘NODE_DEPRECATED’
attribute((deprecated(message))) declarator
^~~~~~~~~~
In file included from ../src/epoll.cc:15:0:
../node_modules/nan/nan.h: In function ‘v8::Localv8::Value Nan::MakeCallback(v8::Localv8::Object, v8::Localv8::String, int, v8::Localv8::Value
)’:
../node_modules/nan/nan.h:850:62: warning: ‘v8::Localv8::Value node::MakeCallback(v8::Isolate*, v8::Localv8::Object, v8::Localv8::String, int, v8::Localv8::Value)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
v8::Isolate::GetCurrent(), target, symbol, argc, argv);
^
In file included from ../src/epoll.cc:12:0:
/home/pi/.node-gyp/10.1.0/include/node/node.h:165:50: note: declared here
NODE_EXTERN v8::Localv8::Value MakeCallback(
^
/home/pi/.node-gyp/10.1.0/include/node/node.h:88:42: note: in definition of macro ‘NODE_DEPRECATED’
attribute((deprecated(message))) declarator
^~~~~~~~~~
In file included from ../src/epoll.cc:15:0:
../node_modules/nan/nan.h: In function ‘v8::Localv8::Value Nan::MakeCallback(v8::Localv8::Object, const char
, int, v8::Localv8::Value)’:
../node_modules/nan/nan.h:865:62: warning: ‘v8::Localv8::Value node::MakeCallback(v8::Isolate
, v8::Localv8::Object, const char*, int, v8::Localv8::Value)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
v8::Isolate::GetCurrent(), target, method, argc, argv);
^
In file included from ../src/epoll.cc:12:0:
/home/pi/.node-gyp/10.1.0/include/node/node.h:158:50: note: declared here
NODE_EXTERN v8::Localv8::Value MakeCallback(
^
/home/pi/.node-gyp/10.1.0/include/node/node.h:88:42: note: in definition of macro ‘NODE_DEPRECATED’
attribute((deprecated(message))) declarator
^~~~~~~~~~
In file included from ../src/epoll.cc:15:0:
../node_modules/nan/nan.h: In member function ‘v8::Localv8::Value Nan::Callback::Call_(v8::Isolate
, v8::Localv8::Object, int, v8::Localv8::Value) const’:
../node_modules/nan/nan.h:1479:5: warning: ‘v8::Localv8::Value node::MakeCallback(v8::Isolate
, v8::Localv8::Object, v8::Localv8::Function, int, v8::Localv8::Value*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
));
^
In file included from ../src/epoll.cc:12:0:
/home/pi/.node-gyp/10.1.0/include/node/node.h:172:50: note: declared here
NODE_EXTERN v8::Localv8::Value MakeCallback(
^
/home/pi/.node-gyp/10.1.0/include/node/node.h:88:42: note: in definition of macro ‘NODE_DEPRECATED’
attribute((deprecated(message))) declarator
^~~~~~~~~~
epoll.target.mk:95: recipe for target 'Release/obj.target/epoll/src/epoll.o' failed
make: *** [Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/home/pi/photo-booth/node_modules/epoll/build'
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack at ChildProcess.emit (events.js:182:13)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:235:12)
gyp ERR! System Linux 4.9.80-v7+
gyp ERR! command "/opt/nodejs/bin/node" "/opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/photo-booth/node_modules/epoll
gyp ERR! node -v v10.1.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2018-05-21T20_11_39_794Z-debug.log

Problems with installation on Raspbian Jessie and Stretch

HW used: Raspberry Pi 3 Model B

SW Used: 2017-04-10-raspbian-jessie-lite
SW Used: 2017-08-16-raspbian-stretch

Sequence:

  1. Write image to SD card
  2. Enable UART and SSH
  3. sudo apt-get update
  4. Follow the quide on the readme.md of the project

Expected behavior:
5. Installation finishes without problems

Actual behavior:
5. Installation of electron with npm fails on both versions of Raspbian at this step:

Install dependencies and run the app

npm install && ./node_modules/.bin/electron-rebuild

Attaching the logs for both.
log_jessie.txt
log_strech.txt

P.S. Any ideas/suggetions on how to get this working are welcome. I also have RPi1 and RPi2. Timely answers will be greately appreciated, as I have limited time to get this working for my wedding this weekend (or I'm going to get yieled at by my bride :) ). Thanks in advance.

Photo booth won't take pictures after the first shot, and other odd behavior

Hi Philip. First off, thank you for creating this project. It is exactly what I was looking for!

I am running this on a Raspberry Pi 3, following @JddAndrewLauren instructions. I am using a Nikon D40 with Nikon DX 18-55mm lens.

When I run the software, turn on the camera, and click, it will take 1 pictures ONLY if the lens autofocus is set to manual. Otherwise it errors out ("Oh shit...")

If I try to take a second picture it errors out. If I turn the camera off and on again, and click, then it will take one picture. Strangely, after the count down, the camera will snap a photo, and the program it will briefly display "Oh shit..." before showing the photo.

Additionally, I tried removing the SD card I had in the camera, and it stopped taking pictures all together regardless of rebooting, or power cycling the camera.

Finally, I was able to get the collage in color, but I cannot get the full screen photo preview in color. Only, black and white. Where is the setting to modify that preview?

Thank you!

No support for webcams

I'd suggest making the README.md more explicit that photo-booth does not currently support web cams / Make a feature request to add web-cam support.

As an optimistic user, when i read things like Simply connect your camera via USB or even via wifi to the computer running this application, and Because of the use of gphoto2 it works with nearly any camera like plug and play. A list of supported devices can be found here. I incorrectly assumed this included usb webcam's. I believe the user here: #31 also made a similar mistake.

BTW - Great Project... In no way is this intended to be "snarky", "condescending" or "negative".

Details

Photo-Booth depends on gphoto2 for camera connection.
gphoto2 states:

3.1.2. | Is my webcam supported by libgphoto2 ? How can I use it ?

libgphoto2 is not meant in any way to use webcams. It only works with still image cameras, and is designed to fetch images out of the internal storage of these cameras. It also eventually can be used to remote control the camera to take pictures, it the camera has support for it and if the driver can do it. But not at all libgphoto2 has been designed to be tool to operate webcams nor do we support these devices. There are other solutions for that. Try searching Google.

Source: http://www.gphoto.org/doc/manual/FAQ.html#FAQ-webcam

Adding voice control

Hey Philipp, just gauging some interest here: would you be interested in merging a PR to add voice control for the photo booth? I'm thinking instead of tapping a screen you say "cheese" and then the countdown starts.

Logitech webcam c270 support

Installation and everything went very smooth and accurate. After running the photobooth it shows no camera has been detected. I am using Logitech Webcam c270. Is there any sollution to go further ?

Images are displayed in Black & White

Got the app working on both Raspberry Pi 3 and macOS Sierra.

Images displayed on screen appear in black and white but are stored in full color. Any idea what might be going on? Duplicated on both platforms.

Thanks

Error on sudo nom start

Hi,
i got the following message output while starting npm and don't know what to do:

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @philipptrenz/[email protected] start: electron .
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @philipptrenz/[email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-10-29T16_19_08_655Z-debug.log

Thanks

Struggeling with the install

Hey, I tried to install the software on an newly setup raspberry pi with jesse, but I always end up in errors. While trying to start it with "sudo npm start" I get the following error:

> [email protected] start /home/pi/photo-booth
> electron .

fs.js:436
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory '/home/pi/photo-booth/node_modules/electron/path.txt'
    at Object.fs.openSync (fs.js:436:18)
    at Object.fs.readFileSync (fs.js:290:15)
    at Object.<anonymous> (/home/pi/photo-booth/node_modules/electron/index.js:4:42)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/pi/photo-booth/node_modules/electron/cli.js:3:16)

npm ERR! [email protected] start: `electron .`
npm ERR! Exit status 8
npm ERR! 
npm ERR! Failed at the [email protected] start script.
npm ERR! This is most likely a problem with the photo-booth package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     electron .
npm ERR! You can get their info via:
npm ERR!     npm owner ls photo-booth
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 4.9.35+
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "start"
npm ERR! cwd /home/pi/photo-booth
npm ERR! node -v v0.10.29
npm ERR! npm -v 1.4.21
npm ERR! code ELIFECYCLE
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian
 
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/pi/photo-booth/npm-debug.log
npm ERR! not ok code 0

The npm-debug.log contains the following text:

> 0 info it worked if it ends with ok
> 1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'start' ]
> 2 info using [email protected]
> 3 info using [email protected]
> 4 error Error: ENOENT, open '/home/pi/photo-booth/node_modules/.bin/package.json'
> 5 error If you need help, you may report this *entire* log,
> 5 error including the npm and node versions, at:
> 5 error     <http://github.com/npm/npm/issues>
> 6 error System Linux 4.9.35+
> 7 error command "/usr/bin/nodejs" "/usr/bin/npm" "start"
> 8 error cwd /home/pi/photo-booth/node_modules/.bin
> 9 error node -v v0.10.29
> 10 error npm -v 1.4.21
> 11 error path /home/pi/photo-booth/node_modules/.bin/package.json
> 12 error code ENOENT
> 13 error errno 34
> 14 verbose exit [ 34, true ]
> 

Do you have any idea how I might fix the problem? Thanks in advance!

installing electron-rebuild returns with: command not found

Hi there!

Many thanks for putting this together!

I am running into an issue when trying to execute the "npm install && ./node_modules/.bin/electron-rebuild" command. I keep getting the response- bash: npm: command not found. Everything else has install without any issues. Internet connection is solid. Any help would be much appreciated!

Thank you,
Matt

Camera

How can I change the code to use the raspberry pi camera module

main photo too big

Hello @philipptrenz sorry I've had to create an issue to contact you.

When I take a photo with out the console, the main image is cropped down at the bottom as if the image is too wide for the screen.

Is there any part of the code that will resize the main image so it will fit? Even if I add a margin.

Thanks in advance

Starting photo-booth returns "Error: cannot find module '../core-js/symbol/iterator'

I ran into problems with npm and node.js being out of date but have since resolved that. Upon starting photo-booth I get the following:

pi@raspberrypi:~ $ cd photo-booth
pi@raspberrypi:~/photo-booth $ sudo npm start

[email protected] start /home/pi/photo-booth
electron .

App threw an error during load
Error: Cannot find module '../core-js/symbol/iterator' (While processing preset: "/home/pi/photo-booth/node_modules/babel-preset-react/index.js")
at Module._resolveFilename (module.js:455:15)
at Function.Module._resolveFilename (/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/dist/resources/electron.asar/common/reset-search-paths.js:35:12)
at Function.Module._load (module.js:403:25)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
at Object. (/home/pi/photo-booth/node_modules/babel-preset-react/node_modules/babel-plugin-transform-react-jsx/node_modules/babel-runtime/helpers/typeof.js:5:17)
at Module._compile (module.js:556:32)
at Object.require.extensions.(anonymous function) [as .js] (/home/pi/photo-booth/node_modules/electron-compile/lib/require-hook.js:77:14)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module '../core-js/symbol/iterator' (While processing preset: "/home/pi/photo-booth/node_modules/babel-preset-react/index.js")
at Module._resolveFilename (module.js:455:15)
at Function.Module._resolveFilename (/home/pi/photo-booth/node_modules/electron-prebuilt-compile/node_modules/electron/dist/resources/electron.asar/common/reset-search-paths.js:35:12)
at Function.Module._load (module.js:403:25)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
at Object. (/home/pi/photo-booth/node_modules/babel-preset-react/node_modules/babel-plugin-transform-react-jsx/node_modules/babel-runtime/helpers/typeof.js:5:17)
at Module._compile (module.js:556:32)
at Object.require.extensions.(anonymous function) [as .js] (/home/pi/photo-booth/node_modules/electron-compile/lib/require-hook.js:77:14)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)

Gphoto requirements

Question on the Gphoto requirements- does the camera used for this project simply need to be on the list you provided from Gphoto, or does it need to have capture and liveview capabilities as well?

Feature request- liveview of the camera

Not sure if I missed it in the Config files- but it would be awesome to have the background of the app be a live view from the camera. Anyone have an elegant way to have that happen?- Just realized this is a duplicate.

browser is blank and no photos are captured

When I do
$ sudo npm start
window settings: {"fullscreen":false,"width":1440,"height":900,"backgroundColor":"#000000"}
[1743:1010/085859:ERROR:CONSOLE(6442)] "Input positions array is not sorted or contains duplicate values.", source: chrome-devtools://devtools/bundled/inspector.js (6442)

Observation: The browser is blank and when I click it, starts the countdown then stops with an oh shit error message.

Setup
RPi3 running Raspian 4.9.53
gphoto2 - 2.5.14 (Updated gphoto2 with https://github.com/gonzalo/gphoto2-updater to the latest)

Per the recommendation from @olivej and @JddAndrewLauren on upgrading node, I ran the following command
sudo apt-get install git && git clone https://github.com/audstanley/NodeJs-Raspberry-Pi-Arm7 && cd NodeJs-Raspberry-Pi-Arm7 && chmod +x Install-Node.sh && sudo ./Install-Node.sh;

Now I see that Node is upgraded to the latest stable version
node - 8.6.0
npm- 5.3.0
electron - ??? I don't know how to get the version of electron running.

Camera - Canon 6D
and I am able to successfully run
$ gphoto2 --summary
Camera summary:
Manufacturer: Canon Inc.
Model: Canon EOS 6D
Version: 3-1.1.6
Serial Number: 616e734bebfc45959f4e6cd947c1a91d
Vendor Extension ID: 0xb (1.0)

Capture Formats: JPEG
[...]

What am I doing wrong? Any help is greatly appreciated
Thanks
Rock-meister

new version does not start

hi there, the install-process works perfect, but the booth does not start after a reboot. and the folder "/home/pi/photo-booth/content/photos" is missing. My raspberry pi 3 model b is updated und upgraded. do you have a solution?

these are the lines on my screen

~/photo-booth $ sudo npm start

@philipptrenz/[email protected] start /home/pi/photo-booth
electron .

libGL error: MESA-LOADER: failed to retrieve device information
MESA-LOADER: failed to retrieve device information
MESA-LOADER: failed to retrieve device information
using default config.json
window settings: {"fullscreen":true,"width":1440,"height":900,"backgroundColor":"#000000"}
prevent screensaver: true

Canon EOS 1100D

I have attached now Canon EOS 1100D it takes photo directly from command line but not being detected when I run photo-booth program kindly guide me what to do

liveview

is it possible to enable liveview?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.