A python stop-motion script that keeps things simple® and allows to use a DSLR or raspicam for capture.
Go to file
ABelliqueux 5006fbcddd Fix install instructions 2024-06-07 17:40:34 +02:00
locales Update l10n 2024-02-27 11:51:59 +01:00
Tuffy_Bold.ttf Fix video export folder, add license, use Tuffy font 2024-02-18 18:39:59 +01:00
config.toml New playback method 2024-04-09 09:11:32 +02:00
kisstopmo.xbm Ask for project folder on startup 2024-02-16 18:24:12 +01:00
kisstopmo.xcf Ask for project folder on startup 2024-02-16 18:24:12 +01:00
main_c.py New playback method 2024-04-09 09:11:32 +02:00
readme.md Fix install instructions 2024-06-07 17:40:34 +02:00
requirements.txt Add config file, l10n, session resuming 2024-02-18 13:12:09 +01:00
stopi.sh Remove prints, change key mapping 2024-03-01 14:34:28 +01:00

readme.md

Stopi

A python stop-motion script that keeps things simple and allows to use a DSLR or raspicam for capture.

  • Full screen display of the last picture taken
  • Optional Onion Skinning with the second to last picture
  • No gui : everything is done with keyboard keys (or a homemade rpi pico based remote) and a config file
  • Auto configuration of the DSLR on startup
  • Key or event mode ; use your DSLR's trigger button or IR remote and images are automatically downloaded after capture
  • Preview playback
  • Full HD export with ffmpeg
  • Uses translations

Disclaimer

This script was tested with a Nikon D40x DSLR and a rpi 4 B + raspicam module v3. It might not work with other hardware.
Issues reports and commits are welcome !

Setup

  1. (Windows users only) Setup WSL2 on your (P)OS and install a Debian based distro (Debian, Mint, Ubuntu...)
  2. Install dependencides : sudo apt install --no-install-recommends --no-install-suggests git ffmpeg gphoto2 python3-tk python3-pip python3-venv
    • (Optional) If you plan on using a RPI camera : sudo apt install --no-install-recommends --no-install-suggests python3-libcamera python3-picamera2
    • (Optional) If you want a minimal graphical environment : sudo apt install --no-install-recommends --no-install-suggests openbox xserver-xorg xinit pcmanfm gmrun lxterminal hsetroot unclutter
  3. Clone the repo : git clone https://git.arthus.net/arthus/stopi.git
  4. Change to directory : cd stopimotion
  5. Create Python venv : python -m venv ./
    • (Optional) If planning to use a raspicam, you need to also pass the --system-site-packages parameter to be able to import the GPIO module.
  6. Enter the newly created virtual environment with source bin/activate
  7. Install dependencies : pip install -r requirements.txt
  8. Plug your DSLR/setup your raspicam
  9. Set Execution bit on script : chmod +x stopi.sh
  10. Launch script : ./stopi.sh

Todo / Fix me

  • UI freezes when exporting
  • Better settings names ; currently they're kinda cryptic and sucky.
  • Notify ffmpeg export ending

Planned features

  • Liveview (when I get a DSLR that supports it :))
  • Webcam support (e.g; using pygame)

Raspberry Pi image

For convenience, a disk image will soon be available here for RPI users.

Kiosk like setup

For advanced users, the steps for preparing RaspiOS for a minimal kiosk-like experience are these :

  1. Flash Raspi OS bookworm lite version to a SD card, enabling SSH, Wifi, etc if needed.
  2. Follow the steps in the 'Setup' section above.
  3. Use the 'raspi-config' utility to enable console auto-login.
  4. Add this content to '~/.bash_login' :
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
   startx
fi
  1. Add this content to '~/.xinitrc' :
#!/bin/sh

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession

exec openbox-session
  1. Add this content to '~/.config/openbox/autostart.sh' :
#!/bin/env bash
# Change X keyboard mapping
setxkbmap fr
# Set background color
hsetroot -solid "#8393CC"
# Hide mouse after 0.2 seconds
unclutter -idle 0.2 &
# Start script
/home/$USER/stopi.sh &

When you reboot, the X session should launch automatically, and then the script.