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 Code (no API key), 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)
- ๐ Granular document routing โ screenshots, bills, boarding passes, prescriptions, and more each land in their own typed folder automatically
- โฉ๏ธ 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
# use claude-code provider (no API key needed)
pixeldump run ~/Photos --provider claude-code --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/tokyo_client_summit/ ยท 2024_06/sarah_alex_wedding_tuscany/ ยท 2024_07/team_offsite_q2_2024/ |
--mode chaotic ๐ฅ |
2024_03/ate_in_tokyo_fr/ ยท 2024_06/main_character_bali_era/ ยท 2024_07/family_chaos_thanksgiving/ |
--mode unhinged ๐ซ |
2024_03/proof_i_touched_grass/ ยท 2024_06/the_yassification_of_brunch/ ยท 2024_07/my_villain_era_in_milan/ |
๐ง provider setup
PixelDump supports three vision providers. Run pixeldump setup to configure whichever you want.
Claude Code (recommended โ no API key required):
If you already have Claude Code installed and logged in, PixelDump reuses your existing session. Nothing extra to configure.
# confirm claude is on your PATH
claude --version
pixeldump setup # pick "claude-code"
Claude API (best accuracy, pay-per-use):
export ANTHROPIC_API_KEY=sk-ant-...
pixeldump setup # pick "claude"
Ollama (fully local, free, slower):
# install ollama from https://ollama.com
ollama pull gemma3
pixeldump setup # pick "ollama"
Auto-detection order when --provider auto (the default): claude-code โ claude API โ ollama. Override with --provider claude-code, --provider claude, or --provider ollama.
๐ output structure
After a run, your photo directory looks like this:
Photos/
โโโ 2024/
โ โโโ 2024_03/ # month folder groups all events from that month
โ โ โโโ ate_good_in_tokyo/ # LLM-named event subfolders live inside
โ โ โโโ cherry_blossom_picnic/
โ โโโ 2024_06/
โ โ โโโ sarah_alex_wedding_tuscany/
โ โ โโโ main_character_bali_era/
โ โ
โ โโโ screenshots/ # document-type folders sit flat under the year
โ โโโ screenshots_apps/
โ โโโ screenshots_conversations/
โ โโโ screenshots_social/
โ โโโ screenshots_memes/
โ โโโ screenshots_web/
โ โโโ screenshots_maps/
โ โ
โ โโโ documents_receipts/
โ โโโ documents_bills/
โ โโโ documents_financial/ # bank statements, credit cards, tax docs, paychecks
โ โโโ documents_ids/ # passports, licences, insurance cards, visas
โ โโโ documents_travel/ # boarding passes, hotel confirmations, event tickets
โ โโโ documents_medical/ # prescriptions, lab results, vaccine records
โ โโโ documents_legal/ # contracts, leases, certificates
โ โโโ documents_misc/ # menus, business cards, whiteboards, QR codes
โ
โโโ 2023/
โ โโโ ...
โโโ _review/
โ โโโ duplicates/ # near-identical shots โ highest-res copy kept
โ โโโ no_date/ # photos with no EXIF date
โ โโโ low_confidence/ # photos the AI wasn't sure about (confidence < 0.5)
โโโ .pixeldump/
โโโ manifests/ # one JSON per run, used for undo
โโโ runs/ # per-run logs
โโโ thumbnails/ # cached thumbnails
Events land in YYYY/YYYY_MM/event_name/ so each month is its own browsable folder. Documents and screenshots sit flat under the year (YYYY/documents_receipts/) since they accumulate all year and don't need month grouping.
๐งฐ all flags
pixeldump run TARGET [OPTIONS]
--provider [claude-code|claude|ollama|auto] vision LLM provider (default: auto)
--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
Claude Code: free โ runs inside your existing Claude Code subscription, no extra charges.
Claude API: rough rule of thumb ~$0.001 per photo, since PixelDump batches photos by event and 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.
Ollama: free, just slower. Bring your GPU energy.
๐ your photos stay yours
- Claude Code reuses your local CLI session โ 512px thumbnails are passed to the local
claudeprocess, same data boundary as using Claude Code interactively - 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.
- Config files containing API keys are written with owner-only permissions (mode 0600)
๐ ๏ธ 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 me because my photos folder was a crime scene
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.1.tar.gz.
File metadata
- Download URL: pixeldump-0.1.1.tar.gz
- Upload date:
- Size: 50.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9a8896bb28776c85ea39dd12259f6389a1bba36d18d301eb8f7818346bb5a0a
|
|
| MD5 |
75974d996a35b4399fe650cefe7921df
|
|
| BLAKE2b-256 |
31bb29a6ba2425154c63119e22f99a34fdf0f10f0d97d31dd8e1d64004bfc755
|
File details
Details for the file pixeldump-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pixeldump-0.1.1-py3-none-any.whl
- Upload date:
- Size: 65.7 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 |
331c1bf451162b011cd4df419445f011a016686be332c50588f2bb933547a95f
|
|
| MD5 |
976a52f840543e30487cb003c8d8b584
|
|
| BLAKE2b-256 |
ce986fe1f5dad4e02aa0e3c2ec7db05395283c9b5ba289858e689bfc2e0b76cf
|