Skip to content

jalogisch/pixelGroomer

PixelGroomer

PixelGroomer

Deutsche Version

Modular CLI toolset for automating photo workflows.

Note: This project serves as an experiment for AI-assisted development using Cursor as IDE. The codebase is a mix of hand-written and AI-generated code, developed in parallel. Project rules are defined in .cursor/rules/*.mdc to ensure consistent AI behaviour. Contributors are welcome to use these rules or add new ones.

Features:

  • Import from SD cards with automatic sorting and renaming
  • EXIF/IPTC/XMP metadata management
  • Album management with symlinks (saves disk space)
  • RAW development to JPG (darktable-cli, ImageMagick, or RawTherapee)
  • Integrity verification with checksums

Installation

# 1. External dependencies (macOS)
brew install exiftool python3 darktable imagemagick rawtherapee

# 2. Run setup (creates venv, installs Python deps)
./setup.sh

# 3. Optional: Add to PATH
echo 'export PATH="$PATH:'$(pwd)'/bin"' >> ~/.zshrc

The setup script:

  • Creates a Python virtual environment (.venv/)
  • Installs Python dependencies
  • Checks external tools (exiftool, darktable, rawtherapee, etc.)

Note for macOS: The darktable formula may be deprecated or removed from Homebrew. You can use brew install --cask darktable, install from darktable.org, or use ImageMagick or RawTherapee with pg-develop instead.

  • Creates .env from template

Quickstart

1. Import photos

pg-import /Volumes/EOS_DIGITAL --event "Endurotraining" --location "Stadtoldendorf"

Photos are sorted into ~/Pictures/PhotoLibrary/2026-01-24/ and renamed.

2. Create album

pg-album create "Alps_Tour_Highlights"
pg-album add "Alps_Tour_Highlights" ~/Pictures/PhotoLibrary/2026-01-24/*.jpg

3. Develop RAW files

pg-develop ~/Pictures/PhotoLibrary/2026-01-24/*.cr3 --output ~/Desktop/jpgs/

4. Export album

pg-album export "Alps_Tour_Highlights" --to ~/Desktop/ForRiders/

Scripts

Script Description
pg-import Import from SD card with sorting and EXIF tagging
pg-rename Rename according to configurable pattern
pg-exif Set/show EXIF metadata
pg-album Album management with symlinks
pg-develop RAW to JPG development
pg-verify Checksum-based integrity verification

Configuration

# .env - Global settings
PHOTO_LIBRARY="$HOME/Pictures/PhotoLibrary"
DEFAULT_AUTHOR="Max Mustermann"
FOLDER_STRUCTURE="{year}-{month}-{day}"
# .import.yaml on SD card - Per-import settings
event: "Endurotraining Tag 1"
location: "Stadtoldendorf"

Priority: CLI arguments → environment variables → .env → .import.yaml

Documentation

German documentation:

Testing

Run the test suite before submitting changes:

make test          # Run all tests
make test-fast     # Skip slow tests
make test-coverage # Generate coverage report

Tests are in tests/ using pytest. All new features require tests.

Contributing with AI

This project uses Cursor rules (.cursor/rules/*.mdc) to guide AI assistants:

Rule Purpose
languages.mdc Only Bash and Python; Python must run in venv
bash-compatibility.mdc Enforce Bash 3.2 compatibility (macOS default)
bilingual-docs.mdc Maintain documentation in German and English
shellcheck.mdc Require ShellCheck validation for all scripts
testing-requirements.mdc All features require tests that pass
git-commits.mdc Small commits with action-prefixed messages

When contributing with an AI assistant, these rules ensure consistent code style and project conventions.

License

Unlicense - Public Domain. See LICENSE.

About

photo workflow

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors