Default configuration

Relative paths:

Relative path (path which doesn’t start by a /) can be used. In this case, the path is considered starting from the configuration file location.

List of elements:

Option with mention list of quoted ... indicated means that a list of 2 or more elements can be provided. A list starts and finishes with parenthesis (...). Each element is separated by a comma ,.

pibooth.cfg

[GENERAL]
# User interface language: 'br', 'de', 'dk', 'en', 'es', 'fr', 'hu', 'it', 'nl', 'no', 'pt' or 'se'
language = en

# Path to save pictures (list of quoted paths accepted)
directory = ~/Pictures/pibooth

# Start pibooth at Raspberry Pi startup
autostart = False

# How long to wait in second before start pibooth at Raspberry Pi startup
autostart_delay = 0

# In debug mode, exceptions will stop pibooth, logs are more verbose, image placeholders at screen
debug = False

# Path to custom plugin(s) not installed with pip (list of quoted paths accepted)
plugins = 

# Plugin names to be disabled after startup (list of quoted names accepted)
plugins_disabled = 

# Enable a virtual keyboard in the settings interface
vkeyboard = False

[WINDOW]
# The (width, height) of the display window or 'fullscreen'
size = (800, 480)

# Background RGB color or image path
background = (0, 0, 0)

# Font name or file path used for app texts
font = Amatic-Bold

# Text RGB color
text_color = (255, 255, 255)

# Blinking background when a capture is taken
flash = True

# Animate the last taken picture by displaying captures one by one
animate = False

# How long is displayed the capture in seconds before switching to the next one
animate_delay = 0.2

# On 'wait' state: how long is displayed the final picture in seconds before being hidden (-1 if never hidden)
wait_picture_delay = -1

# On 'wait' state: display the last picture saved on disk when the application starts
wait_picture_reload = False

# How long is displayed the 'chosen' state:  (0 if never shown)
chosen_delay = 4

# On 'finish' state: how long is displayed the final picture in seconds (0 if never shown)
finish_picture_delay = 0

# Show arrows to indicate physical buttons: 'bottom', 'top', 'hidden' or 'touchscreen'
arrows = bottom

# Apply horizontal offset to arrows position
arrows_x_offset = 0

# How long is the preview in seconds (0 if never shown)
preview_delay = 3

# Show a countdown timer during the preview
preview_countdown = True

[PICTURE]
# Orientation of the final picture: 'auto', 'portrait' or 'landscape'
orientation = auto

# Show backgrounds in layout choice thumbnails
captures_preview_backgrounds = False

# Possible choice(s) of captures numbers (numbers between 1 to 4)
captures = (1, 2, 3, 4)

# Effect applied to the captures (list of quoted names accepted)
captures_effects = none

# Crop each capture border in order to fit the paper size
captures_cropping = False

# Thick (in pixels) between captures and picture borders/texts
margin_thick = 100

# Main text displayed
footer_text1 = Footer 1

# Secondary text displayed
footer_text2 = Footer 2

# RGB colors used for footer texts (list of tuples accepted)
text_colors = (0, 0, 0)

# Fonts name or file path used for footer texts (list of quoted names accepted)
text_fonts = ('Amatic-Bold', 'AmaticSC-Regular')

# Alignments used for footer texts: 'left', 'center' or 'right' (list of quoted names accepted)
text_alignments = center

# Overlay path (PNG file) with same aspect ratio than final picture (list of quoted paths accepted)
overlays = 

# Background RGB color or image path (list of tuples or quoted paths accepted)
backgrounds = (255, 255, 255)

[CAMERA]
# Adjust ISO for lighting issues, can be different for preview and capture (list of integers accepted)
iso = 100

# Flip horizontally the capture
flip = False

# Rotation of the camera: 0, 90, 180 or 270, can be different for preview and capture (list of integers accepted)
rotation = 0

# Resolution for camera captures (preview will have same aspect ratio)
resolution = (1934, 2464)

# Autofocus of the camera (when it has a motorized lens): 'continuous', 'capture' or 'off'
autofocus = continuous

# Focus distance in diopters (1/meters, 0 = infinity) when autofocus is 'off'
lens_position = 0.0

# Delete captures from camera internal memory (when applicable)
delete_internal_memory = False

[PRINTER]
# Name of the printer defined in CUPS (or use the 'default' one)
printer_name = default

# Print options passed to the printer, shall be a valid Python dictionary
printer_options = {}

# How long is the print view in seconds (0 to skip it)
printer_delay = 10

# Number of pages automatically sent to the printer (or use 'max' to reach max duplicate)
auto_print = 0

# Maximum number of printed pages before warning on paper/ink levels (-1 = infinite)
max_pages = -1

# Maximum number of duplicate pages sent to the printer (avoid paper waste)
max_duplicates = 3

[CONTROLS]
# How long to press a single hardware button in seconds
debounce_delay = 0.3

# How long to press multiple hardware buttons in seconds
multi_press_delay = 0.5

# Physical GPIO IN pin to take a capture sequence
capture_btn_pin = 11

# Physical GPIO OUT pin to light a LED when capture button is pressed
capture_led_pin = 7

# Physical GPIO IN pin to print a picture
print_btn_pin = 13

# Physical GPIO OUT pin to light a LED when print button is pressed
print_led_pin = 15

Customizing per layout

When multiple capture layouts are enabled (e.g. captures = (4, 3, 2, 1)), you can provide a different background, overlay, effect and text color for each layout. The order matches the captures tuple.

Orientation behavior:

With orientation = auto, pibooth automatically picks the best orientation based on the number of captures:

Captures

Final image orientation

1 photo

Same as camera (typically portrait)

4 photos

Same as camera (typically portrait)

2 photos

Inverted (landscape if camera is portrait)

3 photos

Inverted (landscape if camera is portrait)

Example: different background and overlay per layout

[PICTURE]
captures = (4, 3, 2, 1)
orientation = auto

# One background per layout (in same order as captures)
# Portrait layouts: 2400x3600px, Landscape layouts: 3600x2400px
backgrounds = ('bg_4photos.jpg', 'bg_3photos.jpg', 'bg_2photos.jpg', 'bg_1photo.jpg')

# Overlays (PNG with alpha channel), empty string to skip
overlays = ('overlay_4.png', '', '', 'overlay_1.png')

# Different effects per capture
captures_effects = ('none', 'blur', 'none', 'sharpen')

# Different text colors per layout
text_colors = ((255, 255, 255), (0, 0, 0), (0, 0, 0), (255, 255, 255))

You can also mix image paths with RGB color tuples for backgrounds:

# Photo 4: custom image, Photo 3: white, Photo 2: image, Photo 1: black
backgrounds = ('bg_4photos.jpg', (255, 255, 255), 'bg_2photos.jpg', (0, 0, 0))

Preparing overlay files:

  • Format: PNG 32-bit with alpha channel (RGBA)

  • Transparent zones (alpha = 0) let the photos show through

  • Decorative elements (frames, logos) should be opaque

  • Match the final image dimensions for best quality: portrait = 2400x3600px, landscape = 3600x2400px (at default 600 DPI, 4x6 paper)

  • Keep file size under 5 MB for Raspberry Pi performance

Preparing background files:

  • Format: JPG (no transparency needed), quality 85-90%

  • Same dimensions as overlay files

  • Will be cropped to fit if aspect ratio differs