Skip to main content

Gen-Z-flavored AI photo organizer CLI/TUI

Project description

  ____  _____  ___  _  _____  ___   _   _  __  __  ____
 |  _ \|_ _\ \/ / |/ \|  _  || _ \ | | | ||  \/  ||  _ \
 | |_) || | \  /| | _ | |_| || | || | | | || |\/| || |_) |
 |  __/ | | /  \| ||_||  _  || |_||_|_|_|||_|  |_||  __/
 |_|   |___/_/\_\_|   |_| |_||___/         |_|     |_|

because your camera roll is a cry for help ๐Ÿซ 

Python 3.10+ License: MIT Tests Type Checked

PixelDump is an agentic AI photo organizer that uses vision LLMs to sort your camera roll into intelligently named folders. It deduplicates near-identical shots, groups photos into events, and writes folder names with the energy of a chronically-online friend.


โœจ what it does

  • ๐Ÿ“ธ Sorts photos into events โ€” uses EXIF dates + GPS clustering, not just "by year"
  • ๐Ÿง  Vision-LLM classification โ€” Claude API or local Ollama (Gemma 3 / LLaVA)
  • ๐Ÿ’€ Catches duplicates โ€” exact (SHA-256) and near-duplicate (perceptual hash)
  • ๐Ÿท๏ธ Three naming vibes โ€” corporate, chaotic, or unhinged (your call)
  • ๐Ÿ“‚ Year/month folder layout โ€” 2024/2024_03_event_name/
  • โ†ฉ๏ธ Undo support โ€” every move is logged in a manifest, fully reversible
  • ๐Ÿ›Ÿ Dry-run by default โ€” preview before anything moves
  • ๐Ÿ” Resumable โ€” interrupt a run, pick up where you left off
  • ๐Ÿงพ Receipt at the end โ€” stats, easter eggs, and a roast

๐Ÿš€ quick start

pip install pixeldump
pixeldump run ~/Pictures/CameraRoll

The first run drops you into an interactive wizard. After that, flags are your friends:

# show me what you'd do, don't actually move anything (default)
pixeldump run ~/Photos --dry-run

# yes, do it
pixeldump run ~/Photos --apply

# corporate mode, sass off, batch hard
pixeldump run ~/Photos --mode corporate --sass 0 --apply

# how much will Claude cost me?
pixeldump run ~/Photos --estimate

# undo the last run
pixeldump undo ~/Photos/.pixeldump/manifests/20260509_143022.json

๐Ÿท๏ธ naming modes (with real examples)

The vision model looks at the photos and writes the folder name based on what it actually sees. Pick your aesthetic:

Mode Example output
--mode corporate ๐Ÿข 2024_03_japan_trip ยท 2024_06_sarah_birthday ยท 2024_07_office_holiday_party
--mode chaotic ๐Ÿ”ฅ 2024_03_ate_good_in_tokyo ยท 2024_06_main_character_moment ยท 2024_07_the_old_people_gathered
--mode unhinged ๐Ÿซ  2024_03_proof_i_went_outside_once ยท 2024_06_emotional_support_sunset ยท 2024_07_what_the_dog_doin

๐Ÿง  provider setup

PixelDump works with Anthropic's Claude API (best vision quality) or Ollama (local & free).

Claude (recommended for accuracy):

export ANTHROPIC_API_KEY=sk-ant-...
pixeldump setup

Ollama (local, free, slower):

# install ollama from https://ollama.com
ollama pull gemma3
pixeldump setup

If both are configured, PixelDump auto-detects and prefers Claude. Override with --provider.

๐Ÿ“ output structure

After a run, your photo directory looks like this:

Photos/
โ”œโ”€โ”€ 2024/
โ”‚   โ”œโ”€โ”€ 2024_03_ate_good_in_tokyo/
โ”‚   โ”œโ”€โ”€ 2024_06_birthday_party/
โ”‚   โ”œโ”€โ”€ 2024_07_proof_i_had_friends/
โ”‚   โ”œโ”€โ”€ 2024_misc/
โ”‚   โ””โ”€โ”€ 2024_screenshots/
โ”œโ”€โ”€ 2023/
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ _review/
โ”‚   โ”œโ”€โ”€ duplicates/        # near-identical shots, kept the highest-res one
โ”‚   โ”œโ”€โ”€ no_date/           # photos with no EXIF date
โ”‚   โ””โ”€โ”€ low_confidence/    # photos the AI wasn't sure about
โ””โ”€โ”€ .pixeldump/
    โ”œโ”€โ”€ manifests/         # one JSON per run, used for undo
    โ”œโ”€โ”€ runs/              # per-run logs
    โ””โ”€โ”€ thumbnails/        # cached thumbnails

๐Ÿงฐ all flags

pixeldump run TARGET [OPTIONS]

  --provider [claude|ollama|auto]      vision LLM provider
  --mode [corporate|chaotic|unhinged]  folder name vibe (default: chaotic)
  --sass [0-3]                         personality intensity (default: 2)
  --burst-hours INT                    event clustering gap (default: 72h)
  --batch-size INT                     photos per LLM batch (default: 5)
  --concurrency INT                    parallel hashing workers (default: 4)
  --include-videos                     also sort .mp4/.mov by date
  --skip-duplicates                    don't run dup detection
  --skip-clustering                    classify each photo individually
  --output PATH                        sort into a different dir (copy mode)
  --dry-run / --apply                  preview vs. execute (default: dry-run)
  --quiet                              minimal output, no live dashboard
  --no-wizard                          skip the interactive wizard
  --estimate                           print cost estimate and exit

pixeldump undo MANIFEST [--yes]        reverse a previous run
pixeldump status TARGET                show the most recent manifest
pixeldump config [--reset]             show or reset config
pixeldump setup                        re-run provider setup

๐Ÿ’ธ cost

Rough rule of thumb with Claude: ~$0.001 per photo, since PixelDump batches photos by event and only sends one classification call per cluster (not per photo). A 1,500-photo library typically costs under $2. Use --estimate to see the exact number for your library before running.

Local Ollama is free, just slower. Bring your GPU energy.

๐Ÿ”’ your photos stay yours

  • Local Ollama sees nothing leave your machine
  • Claude API receives 512px thumbnails (not full-resolution photos), and Anthropic does not train on API inputs
  • Nothing is ever deleted. Files are moved, never removed. Every operation is logged and reversible.

๐Ÿ› ๏ธ development

git clone https://github.com/your-handle/pixeldump
cd pixeldump
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pre-commit install

make test           # pytest
make lint           # ruff
make typecheck      # mypy --strict

Architecture: see docs/ARCHITECTURE.md. Contributing: see .github/CONTRIBUTING.md.

๐Ÿค contributing

Issues and PRs welcome. Look for good first issue labels. The sass engine especially welcomes new lines โ€” see src/pixeldump/assets/sass_lines.json.

๐Ÿ“œ license

MIT. See LICENSE.


built by people who have absolutely been roasted by their own camera rolls

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pixeldump-0.1.0.tar.gz (40.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pixeldump-0.1.0-py3-none-any.whl (53.3 kB view details)

Uploaded Python 3

File details

Details for the file pixeldump-0.1.0.tar.gz.

File metadata

  • Download URL: pixeldump-0.1.0.tar.gz
  • Upload date:
  • Size: 40.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for pixeldump-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8cd1bb0aa15a209700b154e26abe29ae436d3bbfcec5edb98ffc521d075613ce
MD5 616bb42fa105136417597085931c2b3c
BLAKE2b-256 cd5108030ffae9aea7c6c192b48bd88dd8ab31186845b195bfbaa34dee4c268c

See more details on using hashes here.

File details

Details for the file pixeldump-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pixeldump-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 53.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for pixeldump-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 acf88d552a659b716197e37e780f5d6c45d94ff6d22f8a9416f30f555094f120
MD5 eb973d92d1fd884621a646354b3f2cba
BLAKE2b-256 759aa27afaef26ddadec13f0aeeb5083353a07db999f1582d1c1709fdc155f35

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page