Gen-Z-flavored AI photo organizer CLI/TUI
Project description
____ _____ ___ _ _____ ___ _ _ __ __ ____
| _ \|_ _\ \/ / |/ \| _ || _ \ | | | || \/ || _ \
| |_) || | \ /| | _ | |_| || | || | | | || |\/| || |_) |
| __/ | | / \| ||_|| _ || |_||_|_|_|||_| |_|| __/
|_| |___/_/\_\_| |_| |_||___/ |_| |_|
because your camera roll is a cry for help ๐ซ
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cd1bb0aa15a209700b154e26abe29ae436d3bbfcec5edb98ffc521d075613ce
|
|
| MD5 |
616bb42fa105136417597085931c2b3c
|
|
| BLAKE2b-256 |
cd5108030ffae9aea7c6c192b48bd88dd8ab31186845b195bfbaa34dee4c268c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
acf88d552a659b716197e37e780f5d6c45d94ff6d22f8a9416f30f555094f120
|
|
| MD5 |
eb973d92d1fd884621a646354b3f2cba
|
|
| BLAKE2b-256 |
759aa27afaef26ddadec13f0aeeb5083353a07db999f1582d1c1709fdc155f35
|