diff --git a/reference/api/index.html b/reference/api/index.html index cad136c..27094e3 100755 --- a/reference/api/index.html +++ b/reference/api/index.html @@ -395,7 +395,7 @@

HTTP API

Following HTTP api is provided by the photobooth app.

-

+

diff --git a/reference/api/swagger-7b7eb739.html b/reference/api/swagger-f9d4e3ac.html similarity index 94% rename from reference/api/swagger-7b7eb739.html rename to reference/api/swagger-f9d4e3ac.html index d4c66f2..9cb07a7 100755 --- a/reference/api/swagger-7b7eb739.html +++ b/reference/api/swagger-f9d4e3ac.html @@ -67,7 +67,7 @@ } const resize_ob = new ResizeObserver(function(entries) { - parent.update_swagger_ui_iframe_height("7b7eb739"); + parent.update_swagger_ui_iframe_height("f9d4e3ac"); }); // start observing for resizing diff --git a/search/search_index.json b/search/search_index.json index 2d63c79..a3de0d0 100755 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"

Written in Python \ud83d\udc0d, coming along with a modern Vue frontend.

Github source - PyPI package - 3d printable case - Issues - Discussions

This site contains the project documentation for the photobooth app project. Setup your own photobooth for your wedding, birthday and other occations.

"},{"location":"contribute/","title":"\ud83d\ude80 Contribute","text":""},{"location":"contribute/#help-improve","title":"Help Improve","text":""},{"location":"contribute/#post-issues","title":"Post Issues","text":"

If you find an issue, please post it in the photobooth app issue tracker.

"},{"location":"contribute/#improve-documentation","title":"Improve Documentation","text":"

If you find an issue in the documentation, modify the documentation or open a discussion.

"},{"location":"contribute/#send-patches-via-pull-request","title":"Send Patches via Pull Request","text":"

Feel free to fork the app, improve the software and send a pull request. For questions use the github discussions or issue tracker.

"},{"location":"contribute/#help-develop","title":"Help Develop","text":""},{"location":"contribute/#install-development-version","title":"Install development version","text":"

Stable releases are published at PyPI registry usually. To test the latest development version install directly from git:

pip install git+https://github.com/mgrl/photobooth-app.git@dev\n
"},{"location":"contribute/#development","title":"Development","text":"

Develop on Windows or Linux using VScode. Dependency management is realized using poetry.

Additional requirements for frontend development - nodejs 16 (nodejs 18 fails proxying the devServer) - yarn - quasar cli https://quasar.dev/start/quasar-cli

"},{"location":"contribute/#automated-testing","title":"Automated Testing","text":"

Tests are run via Github Actions. The tests run in the Cloud on hosted Github runners as well as on a self-hosted runner for hardware testing. Coverage is reported to codecov.

"},{"location":"contribute/#selfhosted-github-runner","title":"Selfhosted Github Runner","text":"

Supports additional tests for hardware:

"},{"location":"download/","title":"Download","text":"

This app comes as a PyPi package. To download and run this app you need two items:

On Linux python is usually already available. On windows download python from the website above or from the Microsoft Store.

The installation process is described here in detail.

"},{"location":"features/","title":"Features","text":"

This table is comparing the photobooth-app with other open source photobooth software. Commercial software like DSLRbooth is not taken into account.

Feature photobooth-app PhotoboothProject PiBooth first version release 2023 2016 2017 Stars Community \u23fa\ufe0f new software, visit discussions \u2705 \u274c issue tracker only Reference system incl Box design \u2705 \u274c \u274c Camera and Image Features DSLR cameras \u2705 \u2705 \u2705 Webcameras \u2705 \u2705 \u2705 Raspberry Pi Camera Modules \u2705 \u23fa\ufe0f \u2705 < v2.1 only Camera backends integrated gphoto2, picamera2, v4l2py, opencv2 all via cli commands gphoto2, picamera, opencv2 Camera live preview \u2705 \u23fa\ufe0f \u274c Take Picture \u2705 \u2705 \u2705 Collagen \u2705 \u2705 \u2705 Video \u274c \u274c \u274c Chromakeying \u2705 \u2705 \u274c Instagram-Like Filter \u2705 \u274c \u274c Gallery Gallery local display \u2705 \u2705 \u274c Gallery external access via IP \u2705 \u2705 \u274c Sync images to USB drive \u274c \u2705 \u274c Share images online via QR code \u2705 \u23fa\ufe0f \u2705 Printing \u2705 \u2705 \u2705 Personalization Customizable Theme \u274c \u2705 \u274c Translateable \u274c \u2705 \u2705 Peripheral Integration Configurable GPIO trigger (RPI) \u2705 \u2705 \u2705 Configurable keyboard trigger \u2705 \u2705 \u274c ws281x to signal capture \u2705 \u274c \u274c REST-API \u2705 \u274c \u274c Admin Admin Backend \u2705 \u2705 \u274c Plugin Architecture \u274c \u274c \u2705 Dev Installable package \u2705 \u23fa\ufe0f install script \u2705 Automated testing including hardware \u2705 \u274c \u274c Misc Platforms Windows, Linux, Raspberry Pi Windows, Linux, Raspberry Pi Raspberry Pi, Linux (buster) Stack runtime python, vue-webapp apache+php, html-webapp python+pygame, desktop app"},{"location":"photobox3dprint/","title":"3D Printed Photobooth","text":"

In general the photobox can be custom made out of materials you prefer. To develop and as starting point a reference design to 3d print is provided.

If you want to add your box to this page, send a message in the discussions, category show and tell \ud83d\udce3.

"},{"location":"photobox3dprint/#3d-printed-reference","title":"3D printed reference","text":"

The photobooth is made out of a 3d printed case. Find the CAD files in the github repo: https://github.com/mgrl/photobooth-3d

"},{"location":"photobox3dprint/#features","title":"Features","text":""},{"location":"photobox3dprint/#renderings-and-photos","title":"Renderings and Photos","text":"Total including stand tripod Total view including stand tripod Parts named Rear view Rear view 2 Rear view 3 Rear photo"},{"location":"projects/","title":"Projects and Examples","text":"

This is a collection of user made photobooth projects. Inspire and start making yours! \ud83d\udeeb

If you want to add your booth to this page, send a message in the discussions, category show and tell \ud83d\udce3.

"},{"location":"projects/#example-projects","title":"Example projects","text":""},{"location":"projects/#3d-printed-photobooth-reference","title":"3D Printed Photobooth Reference","text":"

Compact 3d printed photobooth. Raspberry Pi 4B and Picamera2 system. Camera is the camera module 3. Lighting with permanent light sources.

Additional information: 3d printed box, buzzer, image share one via QR code

"},{"location":"projects/#yours-here-that-would-be-awesome","title":"Yours here? That would be awesome! \ud83d\udd76\ufe0f","text":"

If you want to add your booth to this page, send a message in the discussions, category show and tell \ud83d\udce3.

"},{"location":"screenshots/","title":"Screenshots","text":"Frontpage List images in the gallery View image in the gallery Users can change the filter Choose camera backend in admin panel Personalize the user interface in admin panel View latest logs and status information in the admin panel"},{"location":"extras/","title":"Extras","text":"

This sections describes additional hardware and operating system customization to enhance the photobooth.

"},{"location":"extras/buzzer/","title":"Buzzer","text":"

Use a buzzer to trigger photos in the photobooth

"},{"location":"extras/buzzer/#big-red-hot-button","title":"Big Red Hot Button","text":"

This button is based on ESP powered by battery. It emulates a keyboard and thus can be used with the photobooth-app or other photobooth projects that use keyboard input to trigger captures.

The power consumption measured is about 60mA - the battery has 1100mAh capacity. This gives a runtime if fully charged of 18h. Loading works only if battery is connected, means the button must be switched on to load.

"},{"location":"extras/buzzer/#hardware-and-assembly","title":"Hardware and Assembly","text":"

see separate git repository https://github.com/mgrl/photobooth-buzzer

"},{"location":"extras/buzzer/#esp-microcontroller-software","title":"ESP Microcontroller Software","text":"

see separate git repository https://github.com/mgrl/photobooth-buzzer

"},{"location":"extras/buzzer/#setup-in-photobooth-app","title":"Setup in photobooth app","text":"

Go to admin dashboard -> configure -> tab: hardwareinputoutput.

"},{"location":"extras/display/","title":"Display","text":""},{"location":"extras/display/#disable-display-standby","title":"Disable display standby","text":"

If the display turns off after some time, disable the power save mode. Run sudo raspi-config and disable \"Screen Blanking\".

"},{"location":"extras/display/#hide-mouse-curser","title":"Hide mouse curser","text":"

For touchscreen displays you might consider to remove the mouse cursor. Install unclutter for this. After reboot it is enabled automatically.

sudo apt install unclutter\n
"},{"location":"extras/onscreenkeyboard/","title":"Onscreen Display for Raspberry Pi","text":"

Sometimes you need to enter a E-Mail address, a password or configure the app in the admin center. There are several ways to do this, but sometimes it is more convenient to have a onscreen keyboard.

There are several virtual keyboards available:

Install one of them:

# preferred:\nsudo apt-get install onboard\n\n# alternatives:\nsudo apt-get install florence\nsudo apt-get install matchbox-keyboard\n

Find some screenshots at industrialshields blog.

See this youtube video, how to configure onboard virtual keyboard.

"},{"location":"extras/shareservice-landing/","title":"Want to download images?","text":"

Probably you wanted to download an image from photobooth via QR code? It seems this is not correctly configured \ud83d\ude12

\u27a1\ufe0f \u27a1\ufe0f \u27a1\ufe0f Setup the shareservice as described!

"},{"location":"extras/sync/","title":"Sync Online","text":"

(for file downloads via QR Code)

sudo apt-get install rclone inotify-tools\n
rclone config\n

Setup the remote named \"boothupload\"!

chmod u+x ~/photobooth-app/boothupload.sh\ncp ~/photobooth-app/boothupload.service ~/.config/systemd/user/\nsystemctl --user enable boothupload.service\nsystemctl --user start boothupload\nsystemctl --user status boothupload\n
"},{"location":"extras/wifi/","title":"Wifi and Hotspot","text":"

At home prefer local wifi with endless data. If this is not available connect to a mobile hotspot for online sync.

In file /etc/wpa_supplicant/wpa_supplicant.conf set a priority for local and hotspot wifi:

network={\n    ssid=\"homewifi\"\n    psk=\"passwordOfhomewifi\"\n    priority=10\n}\nnetwork={\n   ssid=\"mobileexpensivewifi\"\n   psk=\"passwordOfmobileexpensivewifi\"\n   priority=5\n}\n
"},{"location":"extras/wled/","title":"LED signaling using WS281x","text":"

Add animated lights to your photobooth powered by WLED. WLED is a fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812) LEDs.

WLED integration for LED signaling, see yourself:

"},{"location":"extras/wled/#hardware","title":"Hardware","text":""},{"location":"extras/wled/#bom","title":"BOM","text":""},{"location":"extras/wled/#wiring","title":"Wiring","text":""},{"location":"extras/wled/#setup-wled","title":"Setup WLED","text":"

For more detailed instructions on the WLED device itself see the WLED website see

"},{"location":"extras/wled/#links-to-wled-project","title":"Links to WLED project","text":"

Head over to https://kno.wled.ge/basics/getting-started/ for more detailed installation instructions and hardware setup.

"},{"location":"extras/wled/#required-presets-for-photobooth-to-work","title":"Required presets for photobooth to work","text":"

In the WLED webfrontend define three presets:

Please define presets on your own in WLED webfrontend. Once added, in the photobooth enable the WLED integration and provide the serial port to WLED esp device. Check logs on startup whether the module is detected correctly.

"},{"location":"reference/","title":"Reference","text":"

See references on sub chapters.

"},{"location":"reference/api/","title":"HTTP API","text":"

Following HTTP api is provided by the photobooth app.

"},{"location":"reference/photoboothprojectintegration/","title":"Integrate Photobooth-Project and this Photobooth-App","text":"

Info

This photobooth app is not yet feature complete. If you miss a feature consider to pair it with the photobooth project.

Once this app and photobooth project is installed, integrate them using the settings below in photobooth project.

Following commands have to be set in photobooth project to use this app as streamingserver. Works best if photobooth-app and photobooth-project installed on same device. If installed on different device, replace http://localhost by the actual hostname.

take_picture_cmd: curl -o \"%s\" http://localhost:8000/aquisition/still | echo Done\ntake_picture_msg: Done\npre_photo_cmd: curl http://localhost:8000/aquisition/mode/capture\npost_photo_cmd: curl http://localhost:8000/aquisition/mode/preview\npreview_url: url(\"http://localhost:8000/aquisition/stream.mjpg\")\nbackground_defaults: url(\"http://localhost:8000/aquisition/stream.mjpg\")\n
"},{"location":"setup/","title":"Setup the photobooth","text":"

This chapter describes the setup of the python photobooth app on linux or windows platform. Start by

"},{"location":"setup/camera_setup/","title":"Camera Setup","text":"

The photobooth app supports cameras utilizing multiple backends:

Two backends can be used simultaneously in hybrid mode. The first backend is used as main backend to capture high quality still images. The second backend is used as live backend to stream video preview only.

Note

After changing config, the app needs to be restarted manually.

If you need help setup a specific camera, start a new discussion on github.

"},{"location":"setup/camera_setup/#raspberry-csi-camera-modules","title":"Raspberry CSI Camera Modules","text":"

Camera modules are supported using picamera2 based on the new libcamera stack. Autofocus camera modules are supported.

The app is tested with following devices:

"},{"location":"setup/camera_setup/#camera-module-3","title":"Camera Module 3","text":"

The latest Camera Module 3 is probably the best camera module to use in the photobooth. It supports fast autofocus and comes with native driver in the Raspberry Pi OS.

Ensure the camera is working properly using the libcamera stack:

libcamera-hello\n

If it does properly open the camera, the photobooth app can use it also. If some errors come up, try to fix the camera setup before start using it actually. Find installation instructions directly at the raspberry pi foundation.

Now finish setup:

"},{"location":"setup/camera_setup/#camera-modules-12hq","title":"Camera Modules 1/2/HQ","text":"

All other camera modules from the Raspberry Pi ecosystem work the same way as the latest camera module 3. They usually come with lower image quality and do not have autofocus. Due to this other camera modules are not recommended for use as main camera. You might consider to use them only for livestream preview.

Setup is the same as for camera module 3 but with different resolution and no focuser module enabled.

"},{"location":"setup/camera_setup/#arducam-imx519","title":"Arducam imx519","text":"

Sony's imx519 sensor used in Arducam's imx519 camera module is supported by the Raspberry Pi OS natively since about March 2023.

This means the module can be used with or without installing Arducams custom driver packages:

Now finish setup:

"},{"location":"setup/camera_setup/#other-third-party-camera-modules","title":"Other third party camera modules","text":"

In principle every camera supported by libcamera / picamera2 would work. Since the cameras do not come with native support of the Raspberry Pi OS using them could be troublesome and it's untested. Start a discussion if there is a camera not working properly.

"},{"location":"setup/camera_setup/#dslr-via-gphoto2-linux","title":"DSLR via gphoto2 (Linux)","text":"

The app is tested with a Canon 1100D. In general all gphoto2 supported cameras can be used. If the camera supports liveview a stream is created and being used as preview in the app. If the camera does not support liveview, you might want to consider setup the app in hybrid mode. Main camera would be the DSLR to take high quality images, the livestream is captured from a secondary backend. As secondary backend most suitable is a webcamera or raspberry pi camera module.

Now finish setup:

DSLR cameras of different manufacturer may behave differently. There are some settings that might need to be adjusted if autofocus is slow or preview cannot be generated. Tinker with available settings until it works properly. If you run into trouble, create a new issue in the tracker.

"},{"location":"setup/camera_setup/#dslr-via-digicamcontrol-windows","title":"DSLR via digicamcontrol (Windows)","text":"

Implementation not yet finished, feel free to contribute \ud83d\ude0a

"},{"location":"setup/camera_setup/#webcam","title":"Webcam","text":"

USB-webcams are integrated via two backends:

On Linux prefer v4l2 backend because it is more efficient in directly streaming MJPG data instead image frames like the opencv2 implementation.

To use the webcam choose opencv2 or v4l2 as backend.

Both backends use a camera device index to open the camera. To find which indexes are available on your system issue the following commands.

check v4l2 indexes:
python -c \"from photobooth.services.backends.webcamv4l import *; print(available_camera_indexes())\"\n
check opencv2 indexes:
python -c \"from photobooth.services.backends.webcamcv2 import *; print(available_camera_indexes())\"\n

The command returns an array of indexes for which a webcam was detected.

Now finish setup:

"},{"location":"setup/camera_setup/#hybrid-dslr-and-second-backend-to-stream","title":"Hybrid: DSLR and second backend to stream","text":"

The app supports simultaneous use of two backends at the same time. This is useful to grab high quality pictures from a DSLR camera via gphoto2 and livestream from a webcamera or picamera module. Hybrid mode allows for live preview even if the DSLR camera is not capable to stream preview video.

In hybrid mode, the main backend is used for still images, the live backend for video streaming. To enable hybrid mode: - configure main backend as normal - also configure live backend.

If a live backend is set, it is requested for video preview instead of the main backend.

"},{"location":"setup/gpio/","title":"Raspberry Pi GPIO","text":"

The photobooth supports Raspberry Pi GPIO to trigger certain events. Currently supported triggers are:

Internally gpiozero python implementation is used.

"},{"location":"setup/gpio/#raspberry-pi-gpio-wiring","title":"Raspberry Pi GPIO wiring","text":"

To use the hardware triggers wire a normally open button from GND to the designated GPIO. For example connect the button to GND and GPIO 17.

source

"},{"location":"setup/gpio/#configure","title":"Configure","text":"

In the admin panel tab hardwareinput enable the GPIO feature in general. Change the default GPIO numbers according to your wiring.

"},{"location":"setup/installation/","title":"Installation \ud83d\udd27","text":""},{"location":"setup/installation/#supported-platforms-and-cameras","title":"Supported Platforms and Cameras","text":"Hardware-Platform Software-Platform Supported Cameras Raspberry Pi 3 / 4 Raspberry Pi OS 64bit Bullseye Camera Modules, gphoto2 DSLR and webcams via opencv or v4l2 Generic PC Debian/Ubuntu gphoto2 DSLR and webcams via opencv or v4l2 Generic PC Windows webcams via opencv"},{"location":"setup/installation/#reference-systems","title":"Reference Systems","text":"

These are systems used productive or in automated testing and guaranteed to work without issues. Gphoto2 and the webcam backends support many different camera models but manufacturers might implement communication protocols slightly different. If you run into issues, create an issue or open a discussion.

Hardware-Platform Software-Platform Cameras Raspberry Pi 4 Raspberry Pi OS 64bit Bullseye Camera Module v3 Raspberry Pi 4 Raspberry Pi OS 64bit Bullseye Canon 1100D"},{"location":"setup/installation/#prerequisites","title":"Prerequisites","text":"

The photobooth app can be used standalone but is not feature complete yet. Anyway, it integrates well with the fully blown photobooth project, see description below how to achieve integration.

"},{"location":"setup/installation/#install-on-linux-debianubunturaspberrypi-os","title":"Install on Linux (Debian/Ubuntu/RaspberryPi OS)","text":"

The app is available as PyPI package. On a fresh Raspberry Pi OS 64bit, run following commands:

"},{"location":"setup/installation/#update-system","title":"Update System","text":"
sudo apt-get update\nsudo apt-get upgrade\n
"},{"location":"setup/installation/#install-system-dependencies","title":"Install system dependencies","text":"

Following dependencies to be installed for Raspberry Pi OS 64bit Bullseye. Adjust for debian/ubuntu. Picamera2 is only available on Raspberry Pi.

# basic stuff\nsudo apt-get -y install libturbojpeg0 python3-pip libgl1 libgphoto2-dev\n# to display some nice icons and emoticons\nsudo apt-get -y install fonts-noto-color-emoji\n# to sync images online\nsudo apt-get -y install rclone inotify-tools\n# to use camera modules on rpi\nsudo apt-get -y install python3-picamera2\n
"},{"location":"setup/installation/#tweak-system-settings","title":"Tweak system settings","text":"

To use hardware input from keyboard or presenter, the current user needs to be added to tty and input group. Replace {USERNAME} by actual username, for example pi.

usermod --append --groups tty,input {USERNAME}\n
"},{"location":"setup/installation/#install-photobooth-app-from-pypi","title":"Install photobooth app from PyPi","text":"
pip install photobooth-app\n
"},{"location":"setup/installation/#create-data-folder","title":"Create data folder","text":"

The photobooth-app automatically uses the current folder as data folder. All images, logs and config files will be stored in this folder.

mkdir ~/photobooth-data\ncd ~/photobooth-data\n
"},{"location":"setup/installation/#start-the-app","title":"Start the app","text":"
photobooth\n

Browse to http://localhost:8000 and see if the app is working properly. Per default the app uses a generated image and displays a timer only. No camera is started at this point. You need to continue setting up the cameras.

Info

Have issues accessing the website or see error messages during installation and app startup? Check the troubleshooting guide.

"},{"location":"setup/installation/#install-photobooth-service-on-startup","title":"Install photobooth service on startup","text":""},{"location":"setup/installation/#automatic-service-setup","title":"Automatic service setup","text":"

Once the photobooth-app was started the service can be installed automatically on Linux systems. Choose in the Admin Center -> Dashboard -> Server Control -> Install Service. After confirmation the service is installed as described below for manual setup. If the setup fails, please install manually.

"},{"location":"setup/installation/#manual-service-setup","title":"Manual service setup","text":"

Now that you ensured, the photobooth app is working properly, it's time to setup the app as a service. If you installed the app according to above instructions, the template .service file works for you.

Create the following file at the given location:

~/.local/share/systemd/user/photobooth-app.service
[Unit]\nDescription=photobooth-app\nAfter=default.target\n\n[Service]\nType=simple\nRestart=always\n#you might want to adjust following line\nWorkingDirectory=%h/photobooth-data/\nExecStart=python -O -m photobooth\n\n[Install]\nWantedBy=default.target\n

Now enable the service and start it:

systemctl --user daemon-reload\nsystemctl --user enable photobooth-app.service\nsystemctl --user start photobooth-app.service\n

Info

The service does not start? Check the troubleshooting guide. Following commands might be helpful:

systemctl --user status photobooth-app.service\n
journalctl --user --unit photobooth-app.service\n

"},{"location":"setup/installation/#desktop-shortcut-to-webfrontend","title":"Desktop shortcut to webfrontend","text":"

Create the following file at the given location:

~/Desktop/photobooth-app.desktop
[Desktop Entry]\nVersion=1.3\nTerminal=false\nType=Application\nName=Photobooth-App\nExec=chromium-browser --kiosk http://localhost:8000/ --noerrdialogs --disable-infobars --no-first-run --check-for-update-interval=31536000 --touch-events=enabled --password-store=basic\nStartupNotify=false\n
"},{"location":"setup/installation/#autostart-webfrontend-on-system-startup","title":"Autostart webfrontend on system startup","text":"

Create the same file as for desktop shortcut above and place it in /etc/xdg/autostart/photobooth-app.desktop. After reboot chromium will start automatically.

"},{"location":"setup/installation/#install-on-windows","title":"Install on Windows","text":"

While using the app on windows works, there is no documentation yet. Also use is limited by now, because the digicamcontrol software is not yet implemented. Only webcams can be used on windows right now.

"},{"location":"setup/installation/#install-development-version","title":"Install development version","text":"

Stable releases are published at PyPI registry usually. To test the latest development version install directly from git:

pip install git+https://github.com/mgrl/photobooth-app.git@dev\n
"},{"location":"setup/mediaprocessing/","title":"Postprocess Images and Collages","text":"

The mediaitems (images, videos, gifs) are postprocessed in a configurable pipeline consisting of several stages. The pipeline starts with the original mediaitem. Next is the stage to remove a greenscreen, add texts and a new background. The final processed item is stored to the gallery.

"},{"location":"setup/mediaprocessing/#examples","title":"Examples","text":""},{"location":"setup/mediaprocessing/#single-images","title":"Single Images","text":"

TODO: add example image

"},{"location":"setup/mediaprocessing/#collages","title":"Collages","text":"

Collages are merged from several images. These can be captured images from camera and being mixed with predefined images. Each capture can be modified, eg. remove the greenscreen and add a new background before merging in the collage. Following is an example how the collage is processed:

"},{"location":"setup/mediaprocessing/#pipelines","title":"Pipelines","text":"

Depending on the job type

there are different postprocess pipelines available. They can be configured in the admin dashboard. The pipeline consists of several stages, each can be enabled and configured separately.

"},{"location":"setup/mediaprocessing/#basics","title":"Basics","text":""},{"location":"setup/mediaprocessing/#picture-pipeline","title":"Picture-Pipeline","text":"

The single image pipeline runs following stages in given sequence:

  1. remove chromakey (greenscreen removal), replace by transparency
  2. apply pilgram2 filter (instagram like filters)
  3. fill background with a solid color
  4. add background image (useful only if no solid color was added)
  5. text overlay
"},{"location":"setup/mediaprocessing/#collage-pipeline","title":"Collage-Pipeline","text":"

The collage pipeline runs following stages in given sequence:

  1. run single images stages (chromakey, pilgram2, background only)
  2. merge captured images and predefined images on one canvas
  3. fill background with a solid color
  4. add background image (useful only if no solid color was added)
  5. place image on top. Captured images shine through transparent area. Use PNGs with transparency!
  6. text overlay

"},{"location":"setup/mediaprocessing/#gifvideo-pipeline","title":"GIF/Video-Pipeline","text":"

Feature not yet implemented. You're invited to contribute \ud83d\udc4b

"},{"location":"setup/mediaprocessing/#print-pipeline","title":"Print-Pipeline","text":"

Feature not yet implemented. You're invited to contribute \ud83d\udc4b

"},{"location":"setup/mediaprocessing/#stages","title":"Stages","text":""},{"location":"setup/mediaprocessing/#chromakeying","title":"Chromakeying","text":"

Remove a color from the captured image. Removed parts will be transparent. TODO: add more description about how to choose the green value.

"},{"location":"setup/mediaprocessing/#instagram-like-color-filter","title":"Instagram-Like Color-Filter","text":"

Apply a default color filter. Choose from pilgram2's available filters. There is also the option for the user to change the filter in the gallery. See UI configuration in admin dashboard.

"},{"location":"setup/mediaprocessing/#background-fill-solid-color","title":"Background Fill Solid Color","text":"

When using the chromakeying / background removal stages, the removed background is left empty and transparent. With this stage, the transparent area is filled with a solid color.

"},{"location":"setup/mediaprocessing/#background-image","title":"Background Image","text":"

When using the chromakeying / background removal stages, the removed background is left empty and transparent. With this stage, the transparent area is filled with an image.

"},{"location":"setup/mediaprocessing/#texts","title":"Texts","text":"

Texts that are overlaid the finished image. Use it to easily individualize the images without having to create a new background images where a picture would get inserted to. Custom fonts are supported.

"},{"location":"setup/printing/","title":"Printing","text":"

Setup printing allows to get a hardcopy of the images and collages. Prints can be triggered by

"},{"location":"setup/printing/#working-principle","title":"Working Principle","text":"

The user can choose an image in the gallery to print. In the background, the photobooth-app invokes a custom command, that needs to be set. This way, printing works on all platforms where a print command is available. There is no feedback to photobooth app about the status of the print job or the printer itself. If the paper is empty the photobooth app is not aware of that.

"},{"location":"setup/printing/#general-setup","title":"General Setup","text":"

The configuration is made in the Admin Center -> Config -> Tab: HardwareInputOutput.

Info

Test printing with a virtual PDF printer: https://wiki.ubuntuusers.de/CUPS-PDF/

"},{"location":"setup/printing/#setup-on-linux","title":"Setup on Linux","text":"

On Linux printing is realized with CUPS software. The cups webinterface is available on http://localhost:631/printers/ usually. The link only works from the Linux system itself, it's not available in the local network. Installing a printer is very individual to the specific printer and the setup. Try to install on your own. In the end, make sure the following command prints a photo. Instead of {filename} point to some image on the computer for testing.

Following is an example to print. Set the command in the app. {filename} is replaced by the .jpg image to print when the job is run.

lp -d PRINTER_NAME_HERE -o landscape -o fit-to-page {filename}\n

If you use other commands, that work better in your installation, let me know in GitHub Discussions.

Info

You might want to update to more recent driver packages. See following guide: https://www.peachyphotos.com/blog/stories/building-modern-gutenprint/ Also you might need a ppd file. Here is one for Canon Selphy CP1300 that works.

"},{"location":"setup/printing/#setup-on-windows","title":"Setup on Windows","text":"

As first start use mspaint to test printing. Use following print command on windows.

mspaint /p {filename}\n

If you use other commands, that work better in your installation, let me know in GitHub Discussions.

"},{"location":"setup/printing/#troubleshooting","title":"Troubleshooting","text":""},{"location":"setup/shareservice/","title":"Share images via QR Code","text":"

The share service allows users to easily download images on the user's phone. The user simply scans the QR code to download.

Scan the QR code to download image to smartphones."},{"location":"setup/shareservice/#working-principle","title":"Working Principle","text":"

It's developed with ease of use in mind and shall work on most systems even with firewalled internet connection on photobooth side like cellular services. Once setup, the prinicple is as following:

"},{"location":"setup/shareservice/#benefits","title":"Benefits","text":""},{"location":"setup/shareservice/#setup","title":"Setup","text":""},{"location":"setup/shareservice/#troubleshooting","title":"Troubleshooting","text":""},{"location":"setup/update/","title":"Update","text":""},{"location":"setup/update/#update-photobooth-app-from-pypi","title":"Update photobooth app from PyPi","text":"

Check the changelog for breaking changes and new features. To upgrade to the latest release use pip:

pip install --upgrade photobooth-app\n

Afterwards restart the photobooth. If the app doesn't show up again, check the troubleshooting page.

"},{"location":"setup/update/#update-to-development-versions","title":"Update to development versions","text":"

Stable releases are published at PyPI registry usually. To test the latest development version update directly from git:

# upgrade to main-branch\npip install --upgrade --force-reinstall --no-deps git+https://github.com/mgrl/photobooth-app.git@main\n\n# or upgrade to dev-branch\npip install --upgrade --force-reinstall --no-deps git+https://github.com/mgrl/photobooth-app.git@dev\n

Info

If dependencies changed remove --no-deps from above commands to also update pip packages the app relies on.

"},{"location":"support/","title":"Support","text":"

Find support on these channels:

"},{"location":"support/faq/","title":"FAQ","text":"

TODO! No FAQ yet.

Check discussions for further help!

"},{"location":"support/troubleshooting/","title":"Troubleshooting","text":""},{"location":"support/troubleshooting/#photobooth-app-website-not-available","title":"Photobooth app website not available","text":"

In default configuration the app listens to 0.0.0.0:8000, so it can be reached from every computer in the same network on port 8000.

If the website is not available, the reason could be

Check that the website is available on the device itself via http://localhost:8000. If that works, the issue is about the network.

If not, the app might have crashed.

The following commands help tracking down issues and gather information:

# logfiles from service (last 200 lines)\njournalctl --user --unit=photobooth-app -n 200 --no-pager\n# logfiles created by photobooth\ncat ~/photobooth-data/log/qbooth.log\n# check CmaFree especially for Arducams if low:\ncat /proc/meminfo\n

If service crashed \ud83d\udc80, kill the python process:

# check whether there is a process still running but not responsive:\nps ax | grep python3\n# kill it\nsudo pkill -9 python3\n

Manually start the photobooth-app and watch the terminal

photobooth #or\npython -m photobooth\n
INFO: The app uses current directory as data directory!\n
"},{"location":"support/troubleshooting/#photobooth-command-not-found","title":"Photobooth command not found","text":"

If there is a warning as following during pip installation and photobooth can't start check the PATH variable

WARNING: The script photobooth is installed in '/home/pi/.local/bin' which is not on PATH.\nConsider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n

See following is fine, might just need a restart after installation because the path .local/bin did not exist before.

~/.profile
# set PATH so it includes user's private bin if it exists\nif [ -d \"$HOME/.local/bin\" ] ; then\nPATH=\"$HOME/.local/bin:$PATH\"\nfi\n
"},{"location":"support/troubleshooting/#gphoto2-camera-found-but-no-access","title":"Gphoto2 camera found but no access","text":"

On a fresh Linux installation, there might be services running to detect cameras and allow for easy file transfer. For the photobooth this needs to be disabled because the application needs access to the camera.

If you find errors in the log as below, read further.

[    INFO] found camera - 0:  usb:001,009  Canon EOS 1100D (gphoto2.py:303)\n[    INFO] (gp_libusb1_open [libusb1.c:437]) 'libusb_claim_interface (port->pl->dh, port->settings.usb.interface)' failed: Resource busy (-6) (port_log.py:89)\n[    INFO] (gp_port_set_error [gphoto2-port.c:1190]) Could not claim interface 0 (Success). Make sure no other program (gvfs-gphoto2-volume-monitor) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. (port_log.py:89)\n[CRITICAL] camera failed to initialize. no power? no connection? (gphoto2.py:100)\n[   ERROR] [-53] Could not claim the USB device (gphoto2.py:101)\n[    INFO] (gp_libusb1_open [libusb1.c:437]) 'libusb_claim_interface (port->pl->dh, port->settings.usb.interface)' failed: Resource busy (-6) (port_log.py:89)\n[    INFO] (gp_port_set_error [gphoto2-port.c:1190]) Could not claim interface 0 (Success). Make sure no other program (gvfs-gphoto2-volume-monitor) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. (port_log.py:89)\n

Check for running processes:

$ ps ax | grep gphoto2\n1074 ?        Ssl    0:00 /usr/libexec/gvfs-gphoto2-volume-monitor\n2785 ?        Sl     0:00 /usr/libexec/gvfsd-gphoto2 --spawner :1.7 /org/gtk/gvfs/exec_spaw/2\n

To disable the monitoring services, execute following commands:

systemctl --user stop gvfs-gphoto2-volume-monitor\nsystemctl --user disable gvfs-gphoto2-volume-monitor # after a reboot, the gvfs-gphoto2-volume-monitor will be enabled automatically again :(\n# permanently disable:\nsudo chmod -x /usr/lib/gvfs/gvfs-gphoto2-volume-monitor\n\nreboot\n

After a restart there should be no process any more:

$ ps ax | grep gphoto2\n# nothing to see here...\n

Additional references:

"},{"location":"support/troubleshooting/#error-failed-building-wheel-for-component","title":"Error Failed building wheel for component","text":"
ERROR: Failed building wheel for cmake\n      Failed to build cmake\n      ERROR: Could not build wheels for cmake, which is required to install pyproject.toml-based projects\n

During pip installation cmake error can come up if not all prerequisites are complied with.

"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"

Written in Python \ud83d\udc0d, coming along with a modern Vue frontend.

Github source - PyPI package - 3d printable case - Issues - Discussions

This site contains the project documentation for the photobooth app project. Setup your own photobooth for your wedding, birthday and other occations.

"},{"location":"contribute/","title":"\ud83d\ude80 Contribute","text":""},{"location":"contribute/#help-improve","title":"Help Improve","text":""},{"location":"contribute/#post-issues","title":"Post Issues","text":"

If you find an issue, please post it in the photobooth app issue tracker.

"},{"location":"contribute/#improve-documentation","title":"Improve Documentation","text":"

If you find an issue in the documentation, modify the documentation or open a discussion.

"},{"location":"contribute/#send-patches-via-pull-request","title":"Send Patches via Pull Request","text":"

Feel free to fork the app, improve the software and send a pull request. For questions use the github discussions or issue tracker.

"},{"location":"contribute/#help-develop","title":"Help Develop","text":""},{"location":"contribute/#install-development-version","title":"Install development version","text":"

Stable releases are published at PyPI registry usually. To test the latest development version install directly from git:

pip install git+https://github.com/mgrl/photobooth-app.git@dev\n
"},{"location":"contribute/#development","title":"Development","text":"

Develop on Windows or Linux using VScode. Dependency management is realized using poetry.

Additional requirements for frontend development - nodejs 16 (nodejs 18 fails proxying the devServer) - yarn - quasar cli https://quasar.dev/start/quasar-cli

"},{"location":"contribute/#automated-testing","title":"Automated Testing","text":"

Tests are run via Github Actions. The tests run in the Cloud on hosted Github runners as well as on a self-hosted runner for hardware testing. Coverage is reported to codecov.

"},{"location":"contribute/#selfhosted-github-runner","title":"Selfhosted Github Runner","text":"

Supports additional tests for hardware:

"},{"location":"download/","title":"Download","text":"

This app comes as a PyPi package. To download and run this app you need two items:

On Linux python is usually already available. On windows download python from the website above or from the Microsoft Store.

The installation process is described here in detail.

"},{"location":"features/","title":"Features","text":"

This table is comparing the photobooth-app with other open source photobooth software. Commercial software like DSLRbooth is not taken into account.

Feature photobooth-app PhotoboothProject PiBooth first version release 2023 2016 2017 Stars Community \u23fa\ufe0f new software, visit discussions \u2705 \u274c issue tracker only Reference system incl Box design \u2705 \u274c \u274c Camera and Image Features DSLR cameras \u2705 \u2705 \u2705 Webcameras \u2705 \u2705 \u2705 Raspberry Pi Camera Modules \u2705 \u23fa\ufe0f \u2705 < v2.1 only Camera backends integrated gphoto2, picamera2, v4l2py, opencv2 all via cli commands gphoto2, picamera, opencv2 Camera live preview \u2705 \u23fa\ufe0f \u274c Take Picture \u2705 \u2705 \u2705 Collagen \u2705 \u2705 \u2705 Video \u274c \u274c \u274c Chromakeying \u2705 \u2705 \u274c Instagram-Like Filter \u2705 \u274c \u274c Gallery Gallery local display \u2705 \u2705 \u274c Gallery external access via IP \u2705 \u2705 \u274c Sync images to USB drive \u274c \u2705 \u274c Share images online via QR code \u2705 \u23fa\ufe0f \u2705 Printing \u2705 \u2705 \u2705 Personalization Customizable Theme \u274c \u2705 \u274c Translateable \u274c \u2705 \u2705 Peripheral Integration Configurable GPIO trigger (RPI) \u2705 \u2705 \u2705 Configurable keyboard trigger \u2705 \u2705 \u274c ws281x to signal capture \u2705 \u274c \u274c REST-API \u2705 \u274c \u274c Admin Admin Backend \u2705 \u2705 \u274c Plugin Architecture \u274c \u274c \u2705 Dev Installable package \u2705 \u23fa\ufe0f install script \u2705 Automated testing including hardware \u2705 \u274c \u274c Misc Platforms Windows, Linux, Raspberry Pi Windows, Linux, Raspberry Pi Raspberry Pi, Linux (buster) Stack runtime python, vue-webapp apache+php, html-webapp python+pygame, desktop app"},{"location":"photobox3dprint/","title":"3D Printed Photobooth","text":"

In general the photobox can be custom made out of materials you prefer. To develop and as starting point a reference design to 3d print is provided.

If you want to add your box to this page, send a message in the discussions, category show and tell \ud83d\udce3.

"},{"location":"photobox3dprint/#3d-printed-reference","title":"3D printed reference","text":"

The photobooth is made out of a 3d printed case. Find the CAD files in the github repo: https://github.com/mgrl/photobooth-3d

"},{"location":"photobox3dprint/#features","title":"Features","text":""},{"location":"photobox3dprint/#renderings-and-photos","title":"Renderings and Photos","text":"Total including stand tripod Total view including stand tripod Parts named Rear view Rear view 2 Rear view 3 Rear photo"},{"location":"projects/","title":"Projects and Examples","text":"

This is a collection of user made photobooth projects. Inspire and start making yours! \ud83d\udeeb

If you want to add your booth to this page, send a message in the discussions, category show and tell \ud83d\udce3.

"},{"location":"projects/#example-projects","title":"Example projects","text":""},{"location":"projects/#3d-printed-photobooth-reference","title":"3D Printed Photobooth Reference","text":"

Compact 3d printed photobooth. Raspberry Pi 4B and Picamera2 system. Camera is the camera module 3. Lighting with permanent light sources.

Additional information: 3d printed box, buzzer, image share one via QR code

"},{"location":"projects/#yours-here-that-would-be-awesome","title":"Yours here? That would be awesome! \ud83d\udd76\ufe0f","text":"

If you want to add your booth to this page, send a message in the discussions, category show and tell \ud83d\udce3.

"},{"location":"screenshots/","title":"Screenshots","text":"Frontpage List images in the gallery View image in the gallery Users can change the filter Choose camera backend in admin panel Personalize the user interface in admin panel View latest logs and status information in the admin panel"},{"location":"extras/","title":"Extras","text":"

This sections describes additional hardware and operating system customization to enhance the photobooth.

"},{"location":"extras/buzzer/","title":"Buzzer","text":"

Use a buzzer to trigger photos in the photobooth

"},{"location":"extras/buzzer/#big-red-hot-button","title":"Big Red Hot Button","text":"

This button is based on ESP powered by battery. It emulates a keyboard and thus can be used with the photobooth-app or other photobooth projects that use keyboard input to trigger captures.

The power consumption measured is about 60mA - the battery has 1100mAh capacity. This gives a runtime if fully charged of 18h. Loading works only if battery is connected, means the button must be switched on to load.

"},{"location":"extras/buzzer/#hardware-and-assembly","title":"Hardware and Assembly","text":"

see separate git repository https://github.com/mgrl/photobooth-buzzer

"},{"location":"extras/buzzer/#esp-microcontroller-software","title":"ESP Microcontroller Software","text":"

see separate git repository https://github.com/mgrl/photobooth-buzzer

"},{"location":"extras/buzzer/#setup-in-photobooth-app","title":"Setup in photobooth app","text":"

Go to admin dashboard -> configure -> tab: hardwareinputoutput.

"},{"location":"extras/display/","title":"Display","text":""},{"location":"extras/display/#disable-display-standby","title":"Disable display standby","text":"

If the display turns off after some time, disable the power save mode. Run sudo raspi-config and disable \"Screen Blanking\".

"},{"location":"extras/display/#hide-mouse-curser","title":"Hide mouse curser","text":"

For touchscreen displays you might consider to remove the mouse cursor. Install unclutter for this. After reboot it is enabled automatically.

sudo apt install unclutter\n
"},{"location":"extras/onscreenkeyboard/","title":"Onscreen Display for Raspberry Pi","text":"

Sometimes you need to enter a E-Mail address, a password or configure the app in the admin center. There are several ways to do this, but sometimes it is more convenient to have a onscreen keyboard.

There are several virtual keyboards available:

Install one of them:

# preferred:\nsudo apt-get install onboard\n\n# alternatives:\nsudo apt-get install florence\nsudo apt-get install matchbox-keyboard\n

Find some screenshots at industrialshields blog.

See this youtube video, how to configure onboard virtual keyboard.

"},{"location":"extras/shareservice-landing/","title":"Want to download images?","text":"

Probably you wanted to download an image from photobooth via QR code? It seems this is not correctly configured \ud83d\ude12

\u27a1\ufe0f \u27a1\ufe0f \u27a1\ufe0f Setup the shareservice as described!

"},{"location":"extras/sync/","title":"Sync Online","text":"

(for file downloads via QR Code)

sudo apt-get install rclone inotify-tools\n
rclone config\n

Setup the remote named \"boothupload\"!

chmod u+x ~/photobooth-app/boothupload.sh\ncp ~/photobooth-app/boothupload.service ~/.config/systemd/user/\nsystemctl --user enable boothupload.service\nsystemctl --user start boothupload\nsystemctl --user status boothupload\n
"},{"location":"extras/wifi/","title":"Wifi and Hotspot","text":"

At home prefer local wifi with endless data. If this is not available connect to a mobile hotspot for online sync.

In file /etc/wpa_supplicant/wpa_supplicant.conf set a priority for local and hotspot wifi:

network={\n    ssid=\"homewifi\"\n    psk=\"passwordOfhomewifi\"\n    priority=10\n}\nnetwork={\n   ssid=\"mobileexpensivewifi\"\n   psk=\"passwordOfmobileexpensivewifi\"\n   priority=5\n}\n
"},{"location":"extras/wled/","title":"LED signaling using WS281x","text":"

Add animated lights to your photobooth powered by WLED. WLED is a fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812) LEDs.

WLED integration for LED signaling, see yourself:

"},{"location":"extras/wled/#hardware","title":"Hardware","text":""},{"location":"extras/wled/#bom","title":"BOM","text":""},{"location":"extras/wled/#wiring","title":"Wiring","text":""},{"location":"extras/wled/#setup-wled","title":"Setup WLED","text":"

For more detailed instructions on the WLED device itself see the WLED website see

"},{"location":"extras/wled/#links-to-wled-project","title":"Links to WLED project","text":"

Head over to https://kno.wled.ge/basics/getting-started/ for more detailed installation instructions and hardware setup.

"},{"location":"extras/wled/#required-presets-for-photobooth-to-work","title":"Required presets for photobooth to work","text":"

In the WLED webfrontend define three presets:

Please define presets on your own in WLED webfrontend. Once added, in the photobooth enable the WLED integration and provide the serial port to WLED esp device. Check logs on startup whether the module is detected correctly.

"},{"location":"reference/","title":"Reference","text":"

See references on sub chapters.

"},{"location":"reference/api/","title":"HTTP API","text":"

Following HTTP api is provided by the photobooth app.

"},{"location":"reference/photoboothprojectintegration/","title":"Integrate Photobooth-Project and this Photobooth-App","text":"

Info

This photobooth app is not yet feature complete. If you miss a feature consider to pair it with the photobooth project.

Once this app and photobooth project is installed, integrate them using the settings below in photobooth project.

Following commands have to be set in photobooth project to use this app as streamingserver. Works best if photobooth-app and photobooth-project installed on same device. If installed on different device, replace http://localhost by the actual hostname.

take_picture_cmd: curl -o \"%s\" http://localhost:8000/aquisition/still | echo Done\ntake_picture_msg: Done\npre_photo_cmd: curl http://localhost:8000/aquisition/mode/capture\npost_photo_cmd: curl http://localhost:8000/aquisition/mode/preview\npreview_url: url(\"http://localhost:8000/aquisition/stream.mjpg\")\nbackground_defaults: url(\"http://localhost:8000/aquisition/stream.mjpg\")\n
"},{"location":"setup/","title":"Setup the photobooth","text":"

This chapter describes the setup of the python photobooth app on linux or windows platform. Start by

"},{"location":"setup/camera_setup/","title":"Camera Setup","text":"

The photobooth app supports cameras utilizing multiple backends:

Two backends can be used simultaneously in hybrid mode. The first backend is used as main backend to capture high quality still images. The second backend is used as live backend to stream video preview only.

Note

After changing config, the app needs to be restarted manually.

If you need help setup a specific camera, start a new discussion on github.

"},{"location":"setup/camera_setup/#raspberry-csi-camera-modules","title":"Raspberry CSI Camera Modules","text":"

Camera modules are supported using picamera2 based on the new libcamera stack. Autofocus camera modules are supported.

The app is tested with following devices:

"},{"location":"setup/camera_setup/#camera-module-3","title":"Camera Module 3","text":"

The latest Camera Module 3 is probably the best camera module to use in the photobooth. It supports fast autofocus and comes with native driver in the Raspberry Pi OS.

Ensure the camera is working properly using the libcamera stack:

libcamera-hello\n

If it does properly open the camera, the photobooth app can use it also. If some errors come up, try to fix the camera setup before start using it actually. Find installation instructions directly at the raspberry pi foundation.

Now finish setup:

"},{"location":"setup/camera_setup/#camera-modules-12hq","title":"Camera Modules 1/2/HQ","text":"

All other camera modules from the Raspberry Pi ecosystem work the same way as the latest camera module 3. They usually come with lower image quality and do not have autofocus. Due to this other camera modules are not recommended for use as main camera. You might consider to use them only for livestream preview.

Setup is the same as for camera module 3 but with different resolution and no focuser module enabled.

"},{"location":"setup/camera_setup/#arducam-imx519","title":"Arducam imx519","text":"

Sony's imx519 sensor used in Arducam's imx519 camera module is supported by the Raspberry Pi OS natively since about March 2023.

This means the module can be used with or without installing Arducams custom driver packages:

Now finish setup:

"},{"location":"setup/camera_setup/#other-third-party-camera-modules","title":"Other third party camera modules","text":"

In principle every camera supported by libcamera / picamera2 would work. Since the cameras do not come with native support of the Raspberry Pi OS using them could be troublesome and it's untested. Start a discussion if there is a camera not working properly.

"},{"location":"setup/camera_setup/#dslr-via-gphoto2-linux","title":"DSLR via gphoto2 (Linux)","text":"

The app is tested with a Canon 1100D. In general all gphoto2 supported cameras can be used. If the camera supports liveview a stream is created and being used as preview in the app. If the camera does not support liveview, you might want to consider setup the app in hybrid mode. Main camera would be the DSLR to take high quality images, the livestream is captured from a secondary backend. As secondary backend most suitable is a webcamera or raspberry pi camera module.

Now finish setup:

DSLR cameras of different manufacturer may behave differently. There are some settings that might need to be adjusted if autofocus is slow or preview cannot be generated. Tinker with available settings until it works properly. If you run into trouble, create a new issue in the tracker.

"},{"location":"setup/camera_setup/#dslr-via-digicamcontrol-windows","title":"DSLR via digicamcontrol (Windows)","text":"

Implementation not yet finished, feel free to contribute \ud83d\ude0a

"},{"location":"setup/camera_setup/#webcam","title":"Webcam","text":"

USB-webcams are integrated via two backends:

On Linux prefer v4l2 backend because it is more efficient in directly streaming MJPG data instead image frames like the opencv2 implementation.

To use the webcam choose opencv2 or v4l2 as backend.

Both backends use a camera device index to open the camera. To find which indexes are available on your system issue the following commands.

check v4l2 indexes:
python -c \"from photobooth.services.backends.webcamv4l import *; print(available_camera_indexes())\"\n
check opencv2 indexes:
python -c \"from photobooth.services.backends.webcamcv2 import *; print(available_camera_indexes())\"\n

The command returns an array of indexes for which a webcam was detected.

Now finish setup:

"},{"location":"setup/camera_setup/#hybrid-dslr-and-second-backend-to-stream","title":"Hybrid: DSLR and second backend to stream","text":"

The app supports simultaneous use of two backends at the same time. This is useful to grab high quality pictures from a DSLR camera via gphoto2 and livestream from a webcamera or picamera module. Hybrid mode allows for live preview even if the DSLR camera is not capable to stream preview video.

In hybrid mode, the main backend is used for still images, the live backend for video streaming. To enable hybrid mode: - configure main backend as normal - also configure live backend.

If a live backend is set, it is requested for video preview instead of the main backend.

"},{"location":"setup/gpio/","title":"Raspberry Pi GPIO","text":"

The photobooth supports Raspberry Pi GPIO to trigger certain events. Currently supported triggers are:

Internally gpiozero python implementation is used.

"},{"location":"setup/gpio/#raspberry-pi-gpio-wiring","title":"Raspberry Pi GPIO wiring","text":"

To use the hardware triggers wire a normally open button from GND to the designated GPIO. For example connect the button to GND and GPIO 17.

source

"},{"location":"setup/gpio/#configure","title":"Configure","text":"

In the admin panel tab hardwareinput enable the GPIO feature in general. Change the default GPIO numbers according to your wiring.

"},{"location":"setup/installation/","title":"Installation \ud83d\udd27","text":""},{"location":"setup/installation/#supported-platforms-and-cameras","title":"Supported Platforms and Cameras","text":"Hardware-Platform Software-Platform Supported Cameras Raspberry Pi 3 / 4 Raspberry Pi OS 64bit Bullseye Camera Modules, gphoto2 DSLR and webcams via opencv or v4l2 Generic PC Debian/Ubuntu gphoto2 DSLR and webcams via opencv or v4l2 Generic PC Windows webcams via opencv"},{"location":"setup/installation/#reference-systems","title":"Reference Systems","text":"

These are systems used productive or in automated testing and guaranteed to work without issues. Gphoto2 and the webcam backends support many different camera models but manufacturers might implement communication protocols slightly different. If you run into issues, create an issue or open a discussion.

Hardware-Platform Software-Platform Cameras Raspberry Pi 4 Raspberry Pi OS 64bit Bullseye Camera Module v3 Raspberry Pi 4 Raspberry Pi OS 64bit Bullseye Canon 1100D"},{"location":"setup/installation/#prerequisites","title":"Prerequisites","text":"

The photobooth app can be used standalone but is not feature complete yet. Anyway, it integrates well with the fully blown photobooth project, see description below how to achieve integration.

"},{"location":"setup/installation/#install-on-linux-debianubunturaspberrypi-os","title":"Install on Linux (Debian/Ubuntu/RaspberryPi OS)","text":"

The app is available as PyPI package. On a fresh Raspberry Pi OS 64bit, run following commands:

"},{"location":"setup/installation/#update-system","title":"Update System","text":"
sudo apt-get update\nsudo apt-get upgrade\n
"},{"location":"setup/installation/#install-system-dependencies","title":"Install system dependencies","text":"

Following dependencies to be installed for Raspberry Pi OS 64bit Bullseye. Adjust for debian/ubuntu. Picamera2 is only available on Raspberry Pi.

# basic stuff\nsudo apt-get -y install libturbojpeg0 python3-pip libgl1 libgphoto2-dev\n# to display some nice icons and emoticons\nsudo apt-get -y install fonts-noto-color-emoji\n# to sync images online\nsudo apt-get -y install rclone inotify-tools\n# to use camera modules on rpi\nsudo apt-get -y install python3-picamera2\n
"},{"location":"setup/installation/#tweak-system-settings","title":"Tweak system settings","text":"

To use hardware input from keyboard or presenter, the current user needs to be added to tty and input group. Replace {USERNAME} by actual username, for example pi.

usermod --append --groups tty,input {USERNAME}\n
"},{"location":"setup/installation/#install-photobooth-app-from-pypi","title":"Install photobooth app from PyPi","text":"
pip install photobooth-app\n
"},{"location":"setup/installation/#create-data-folder","title":"Create data folder","text":"

The photobooth-app automatically uses the current folder as data folder. All images, logs and config files will be stored in this folder.

mkdir ~/photobooth-data\ncd ~/photobooth-data\n
"},{"location":"setup/installation/#start-the-app","title":"Start the app","text":"
photobooth\n

Browse to http://localhost:8000 and see if the app is working properly. Per default the app uses a generated image and displays a timer only. No camera is started at this point. You need to continue setting up the cameras.

Info

Have issues accessing the website or see error messages during installation and app startup? Check the troubleshooting guide.

"},{"location":"setup/installation/#install-photobooth-service-on-startup","title":"Install photobooth service on startup","text":""},{"location":"setup/installation/#automatic-service-setup","title":"Automatic service setup","text":"

Once the photobooth-app was started the service can be installed automatically on Linux systems. Choose in the Admin Center -> Dashboard -> Server Control -> Install Service. After confirmation the service is installed as described below for manual setup. If the setup fails, please install manually.

"},{"location":"setup/installation/#manual-service-setup","title":"Manual service setup","text":"

Now that you ensured, the photobooth app is working properly, it's time to setup the app as a service. If you installed the app according to above instructions, the template .service file works for you.

Create the following file at the given location:

~/.local/share/systemd/user/photobooth-app.service
[Unit]\nDescription=photobooth-app\nAfter=default.target\n\n[Service]\nType=simple\nRestart=always\n#you might want to adjust following line\nWorkingDirectory=%h/photobooth-data/\nExecStart=python -O -m photobooth\n\n[Install]\nWantedBy=default.target\n

Now enable the service and start it:

systemctl --user daemon-reload\nsystemctl --user enable photobooth-app.service\nsystemctl --user start photobooth-app.service\n

Info

The service does not start? Check the troubleshooting guide. Following commands might be helpful:

systemctl --user status photobooth-app.service\n
journalctl --user --unit photobooth-app.service\n

"},{"location":"setup/installation/#desktop-shortcut-to-webfrontend","title":"Desktop shortcut to webfrontend","text":"

Create the following file at the given location:

~/Desktop/photobooth-app.desktop
[Desktop Entry]\nVersion=1.3\nTerminal=false\nType=Application\nName=Photobooth-App\nExec=chromium-browser --kiosk http://localhost:8000/ --noerrdialogs --disable-infobars --no-first-run --check-for-update-interval=31536000 --touch-events=enabled --password-store=basic\nStartupNotify=false\n
"},{"location":"setup/installation/#autostart-webfrontend-on-system-startup","title":"Autostart webfrontend on system startup","text":"

Create the same file as for desktop shortcut above and place it in /etc/xdg/autostart/photobooth-app.desktop. After reboot chromium will start automatically.

"},{"location":"setup/installation/#install-on-windows","title":"Install on Windows","text":"

While using the app on windows works, there is no documentation yet. Also use is limited by now, because the digicamcontrol software is not yet implemented. Only webcams can be used on windows right now.

"},{"location":"setup/installation/#install-development-version","title":"Install development version","text":"

Stable releases are published at PyPI registry usually. To test the latest development version install directly from git:

pip install git+https://github.com/mgrl/photobooth-app.git@dev\n
"},{"location":"setup/mediaprocessing/","title":"Postprocess Images and Collages","text":"

The mediaitems (images, videos, gifs) are postprocessed in a configurable pipeline consisting of several stages. The pipeline starts with the original mediaitem. Next is the stage to remove a greenscreen, add texts and a new background. The final processed item is stored to the gallery.

"},{"location":"setup/mediaprocessing/#examples","title":"Examples","text":""},{"location":"setup/mediaprocessing/#single-images","title":"Single Images","text":"

TODO: add example image

"},{"location":"setup/mediaprocessing/#collages","title":"Collages","text":"

Collages are merged from several images. These can be captured images from camera and being mixed with predefined images. Each capture can be modified, eg. remove the greenscreen and add a new background before merging in the collage. Following is an example how the collage is processed:

"},{"location":"setup/mediaprocessing/#pipelines","title":"Pipelines","text":"

Depending on the job type

there are different postprocess pipelines available. They can be configured in the admin dashboard. The pipeline consists of several stages, each can be enabled and configured separately.

"},{"location":"setup/mediaprocessing/#basics","title":"Basics","text":""},{"location":"setup/mediaprocessing/#picture-pipeline","title":"Picture-Pipeline","text":"

The single image pipeline runs following stages in given sequence:

  1. remove chromakey (greenscreen removal), replace by transparency
  2. apply pilgram2 filter (instagram like filters)
  3. fill background with a solid color
  4. add background image (useful only if no solid color was added)
  5. text overlay
"},{"location":"setup/mediaprocessing/#collage-pipeline","title":"Collage-Pipeline","text":"

The collage pipeline runs following stages in given sequence:

  1. run single images stages (chromakey, pilgram2, background only)
  2. merge captured images and predefined images on one canvas
  3. fill background with a solid color
  4. add background image (useful only if no solid color was added)
  5. place image on top. Captured images shine through transparent area. Use PNGs with transparency!
  6. text overlay

"},{"location":"setup/mediaprocessing/#gifvideo-pipeline","title":"GIF/Video-Pipeline","text":"

Feature not yet implemented. You're invited to contribute \ud83d\udc4b

"},{"location":"setup/mediaprocessing/#print-pipeline","title":"Print-Pipeline","text":"

Feature not yet implemented. You're invited to contribute \ud83d\udc4b

"},{"location":"setup/mediaprocessing/#stages","title":"Stages","text":""},{"location":"setup/mediaprocessing/#chromakeying","title":"Chromakeying","text":"

Remove a color from the captured image. Removed parts will be transparent. TODO: add more description about how to choose the green value.

"},{"location":"setup/mediaprocessing/#instagram-like-color-filter","title":"Instagram-Like Color-Filter","text":"

Apply a default color filter. Choose from pilgram2's available filters. There is also the option for the user to change the filter in the gallery. See UI configuration in admin dashboard.

"},{"location":"setup/mediaprocessing/#background-fill-solid-color","title":"Background Fill Solid Color","text":"

When using the chromakeying / background removal stages, the removed background is left empty and transparent. With this stage, the transparent area is filled with a solid color.

"},{"location":"setup/mediaprocessing/#background-image","title":"Background Image","text":"

When using the chromakeying / background removal stages, the removed background is left empty and transparent. With this stage, the transparent area is filled with an image.

"},{"location":"setup/mediaprocessing/#texts","title":"Texts","text":"

Texts that are overlaid the finished image. Use it to easily individualize the images without having to create a new background images where a picture would get inserted to. Custom fonts are supported.

"},{"location":"setup/printing/","title":"Printing","text":"

Setup printing allows to get a hardcopy of the images and collages. Prints can be triggered by

"},{"location":"setup/printing/#working-principle","title":"Working Principle","text":"

The user can choose an image in the gallery to print. In the background, the photobooth-app invokes a custom command, that needs to be set. This way, printing works on all platforms where a print command is available. There is no feedback to photobooth app about the status of the print job or the printer itself. If the paper is empty the photobooth app is not aware of that.

"},{"location":"setup/printing/#general-setup","title":"General Setup","text":"

The configuration is made in the Admin Center -> Config -> Tab: HardwareInputOutput.

Info

Test printing with a virtual PDF printer: https://wiki.ubuntuusers.de/CUPS-PDF/

"},{"location":"setup/printing/#setup-on-linux","title":"Setup on Linux","text":"

On Linux printing is realized with CUPS software. The cups webinterface is available on http://localhost:631/printers/ usually. The link only works from the Linux system itself, it's not available in the local network. Installing a printer is very individual to the specific printer and the setup. Try to install on your own. In the end, make sure the following command prints a photo. Instead of {filename} point to some image on the computer for testing.

Following is an example to print. Set the command in the app. {filename} is replaced by the .jpg image to print when the job is run.

lp -d PRINTER_NAME_HERE -o landscape -o fit-to-page {filename}\n

If you use other commands, that work better in your installation, let me know in GitHub Discussions.

Info

You might want to update to more recent driver packages. See following guide: https://www.peachyphotos.com/blog/stories/building-modern-gutenprint/ Also you might need a ppd file. Here is one for Canon Selphy CP1300 that works.

"},{"location":"setup/printing/#setup-on-windows","title":"Setup on Windows","text":"

As first start use mspaint to test printing. Use following print command on windows.

mspaint /p {filename}\n

If you use other commands, that work better in your installation, let me know in GitHub Discussions.

"},{"location":"setup/printing/#troubleshooting","title":"Troubleshooting","text":""},{"location":"setup/shareservice/","title":"Share images via QR Code","text":"

The share service allows users to easily download images on the user's phone. The user simply scans the QR code to download.

Scan the QR code to download image to smartphones."},{"location":"setup/shareservice/#options-to-share-via-qr-code","title":"Options to share via QR code","text":"
  1. Use the batteries included shareservice.
  2. Sync images (on your own) and provide a custom URL users can download images
"},{"location":"setup/shareservice/#batteries-included-shareservice","title":"Batteries included shareservice","text":""},{"location":"setup/shareservice/#benefits","title":"Benefits","text":""},{"location":"setup/shareservice/#working-principle","title":"Working Principle","text":"

It's developed with ease of use in mind and shall work on most systems even with firewalled internet connection on photobooth side like cellular services. Once setup, the prinicple is as following:

"},{"location":"setup/shareservice/#setup","title":"Setup","text":""},{"location":"setup/shareservice/#troubleshooting","title":"Troubleshooting","text":""},{"location":"setup/shareservice/#use-your-own-sharing-solution","title":"Use your own sharing solution","text":"

If the shareservice is not what you want, you can synchronize the data folder manually and share a link to the images. The QR code is pointing to an URL that needs to be accessible by the users smartphone. This is possible if the user connects to a local hotspot in the same network as the photobooth computer or the files can be uploaded to the internet to make them accessible.

"},{"location":"setup/update/","title":"Update","text":""},{"location":"setup/update/#update-photobooth-app-from-pypi","title":"Update photobooth app from PyPi","text":"

Check the changelog for breaking changes and new features. To upgrade to the latest release use pip:

pip install --upgrade photobooth-app\n

Afterwards restart the photobooth. If the app doesn't show up again, check the troubleshooting page.

"},{"location":"setup/update/#update-to-development-versions","title":"Update to development versions","text":"

Stable releases are published at PyPI registry usually. To test the latest development version update directly from git:

# upgrade to main-branch\npip install --upgrade --force-reinstall --no-deps git+https://github.com/mgrl/photobooth-app.git@main\n\n# or upgrade to dev-branch\npip install --upgrade --force-reinstall --no-deps git+https://github.com/mgrl/photobooth-app.git@dev\n

Info

If dependencies changed remove --no-deps from above commands to also update pip packages the app relies on.

"},{"location":"support/","title":"Support","text":"

Find support on these channels:

"},{"location":"support/faq/","title":"FAQ","text":"

TODO! No FAQ yet.

Check discussions for further help!

"},{"location":"support/troubleshooting/","title":"Troubleshooting","text":""},{"location":"support/troubleshooting/#photobooth-app-website-not-available","title":"Photobooth app website not available","text":"

In default configuration the app listens to port 8000, so it can be reached from every computer in the same network on port 8000. On the same computer go to http://localhost:8000.

If the website is not available, the reason could be

Check that the website is available on the device itself via http://localhost:8000. If that works, the issue is about the network.

If not, the app might have crashed.

"},{"location":"support/troubleshooting/#gather-information-to-troubleshoot","title":"Gather information to troubleshoot","text":"

The following commands help tracking down issues and gather information:

# logfiles from service (last 200 lines)\njournalctl --user --unit=photobooth-app -n 200 --no-pager\n\n# logfiles created by photobooth every day\nls ~/photobooth-data/log/\ncat ~/photobooth-data/log/photobooth_2023xxxx.log\n\n# check CmaFree especially for Arducams if low:\ncat /proc/meminfo\n
"},{"location":"support/troubleshooting/#manually-start-the-app","title":"Manually start the app","text":"

If service crashed \ud83d\udc80, stop the service and maybe even kill the python process:

# stop the photobooth service (if installed)\nsystemctl --user stop photobooth-app\n\n# check whether there is a process still running but not responsive:\nps ax | grep python3\n\n# kill it\nsudo pkill -9 python3\n

Manually start the photobooth-app and watch the terminal

Info

The app uses current directory as data directory! Ensure to cd to the correct directory before starting.

photobooth\n#or\npython -m photobooth\n

Watch the terminal for errors and try to debug. If you fail, start a discussion.

"},{"location":"support/troubleshooting/#photobooth-command-not-found","title":"Photobooth command not found","text":"

If there is a warning as following during pip installation and photobooth can't start check the PATH variable

The script photobooth is installed in '/home/pi/.local/bin' which is not on PATH. Consider adding this directory to PATH.

See following is fine, might just need a restart after installation because the path .local/bin did not exist on newly installed systems.

~/.profile
# set PATH so it includes user's private bin if it exists\nif [ -d \"$HOME/.local/bin\" ] ; then\nPATH=\"$HOME/.local/bin:$PATH\"\nfi\n
"},{"location":"support/troubleshooting/#gphoto2-camera-found-but-no-access","title":"Gphoto2 camera found but no access","text":"

On a fresh Linux installation, there might be services running to detect cameras and allow for easy file transfer. For the photobooth this needs to be disabled because the application needs access to the camera.

If you find errors in the log as below, read further.

[    INFO] found camera - 0:  usb:001,009  Canon EOS 1100D (gphoto2.py:303)\n[    INFO] (gp_libusb1_open [libusb1.c:437]) 'libusb_claim_interface (port->pl->dh, port->settings.usb.interface)' failed: Resource busy (-6) (port_log.py:89)\n[    INFO] (gp_port_set_error [gphoto2-port.c:1190]) Could not claim interface 0 (Success). Make sure no other program (gvfs-gphoto2-volume-monitor) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. (port_log.py:89)\n[CRITICAL] camera failed to initialize. no power? no connection? (gphoto2.py:100)\n[   ERROR] [-53] Could not claim the USB device (gphoto2.py:101)\n[    INFO] (gp_libusb1_open [libusb1.c:437]) 'libusb_claim_interface (port->pl->dh, port->settings.usb.interface)' failed: Resource busy (-6) (port_log.py:89)\n[    INFO] (gp_port_set_error [gphoto2-port.c:1190]) Could not claim interface 0 (Success). Make sure no other program (gvfs-gphoto2-volume-monitor) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. (port_log.py:89)\n

Check for running processes:

$ ps ax | grep gphoto2\n1074 ?        Ssl    0:00 /usr/libexec/gvfs-gphoto2-volume-monitor\n2785 ?        Sl     0:00 /usr/libexec/gvfsd-gphoto2 --spawner :1.7 /org/gtk/gvfs/exec_spaw/2\n

To disable the monitoring services, execute following commands:

systemctl --user stop gvfs-gphoto2-volume-monitor\nsystemctl --user disable gvfs-gphoto2-volume-monitor # after a reboot, the gvfs-gphoto2-volume-monitor will be enabled automatically again :(\n# permanently disable:\nsudo chmod -x /usr/lib/gvfs/gvfs-gphoto2-volume-monitor\n\nreboot\n

After a restart there should be no process any more:

$ ps ax | grep gphoto2\n# nothing to see here...\n

Additional references:

"},{"location":"support/troubleshooting/#error-failed-building-wheel-for-component","title":"Error Failed building wheel for component","text":"
ERROR: Failed building wheel for cmake\n      Failed to build cmake\n      ERROR: Could not build wheels for cmake, which is required to install pyproject.toml-based projects\n

During pip installation cmake error can come up if not all prerequisites are complied with.

"}]} \ No newline at end of file diff --git a/setup/shareservice/index.html b/setup/shareservice/index.html index 1cb81e0..22a0863 100755 --- a/setup/shareservice/index.html +++ b/setup/shareservice/index.html @@ -274,18 +274,25 @@ + + +
  • Printing @@ -429,18 +444,25 @@ +
  • +
  • + + Use your own sharing solution + +
  • + + @@ -467,7 +497,20 @@

    Share images via QR Code

    Scan the QR code to download image to smartphones.
    -

    Working Principle

    +

    Options to share via QR code

    +
      +
    1. Use the batteries included shareservice.
    2. +
    3. Sync images (on your own) and provide a custom URL users can download images
    4. +
    +

    Batteries included shareservice

    +

    Benefits

    + +

    Working Principle

    It's developed with ease of use in mind and shall work on most systems even with firewalled internet connection on photobooth side like cellular services. Once setup, the prinicple is as following:

    -

    Benefits

    - -

    Setup

    +

    Setup

    -

    Troubleshooting

    +

    Troubleshooting

    +

    Use your own sharing solution

    +

    If the shareservice is not what you want, you can synchronize the data folder manually and share a link to the images. +The QR code is pointing to an URL that needs to be accessible by the users smartphone. This is possible if the user connects to a local hotspot in the same network as the photobooth computer or the files can be uploaded to the internet to make them accessible.

    diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 13da0e2..28727c6 100755 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ diff --git a/support/troubleshooting/index.html b/support/troubleshooting/index.html index 2b3b5de..3ce86b4 100755 --- a/support/troubleshooting/index.html +++ b/support/troubleshooting/index.html @@ -331,6 +331,20 @@ Photobooth app website not available +
  • @@ -428,6 +442,20 @@ Photobooth app website not available +
  • @@ -453,8 +481,8 @@

    Troubleshooting

    Photobooth app website not available

    -

    In default configuration the app listens to 0.0.0.0:8000, -so it can be reached from every computer in the same network on port 8000.

    +

    In default configuration the app listens to port 8000, +so it can be reached from every computer in the same network on port 8000. On the same computer go to http://localhost:8000.

    If the website is not available, the reason could be