photree
A CLI tool to import, organize, verify, and export iOS photo albums as plain directories — preserving originals, edits, and sidecars without any proprietary database.
Main Use Cases
- Import iOS photos into organized album directories, preserving originals, edits, and AAE sidecars from macOS Image Capture
- Browse and curate using the
main-img/,main-jpg/, andmain-vid/directories — the best version of each photo/video, ready to view - Share albums by exporting JPEG-compatible versions to cloud sync folders (MEGAsync, Syncthing, etc.) or external drives
- Back up to external volumes with full album structure (originals + edits + sidecars) using symlinks or hardlinks to save disk space
- Verify album integrity with checksums and structural validation, with actionable fix suggestions
Non-Goals
- Not a photo viewer or editor. photree organizes files on disk — use your favorite viewer (Finder, feh, etc.) to browse
main-img/ormain-jpg/. - Not a photo management database. There is no catalog, index, or metadata database. Albums are plain directories, readable by any tool.
- Not a cloud service. photree exports to directories — pair it with your own sync tool (MEGAsync, Syncthing, rsync, etc.).
- Not cross-platform for import. The import pipeline requires macOS (
sipsfor HEIC-to-JPEG conversion). Exported albums are portable.
Known Limitations
- macOS required for import. The
sipstool (included with macOS) is used for HEIC/DNG-to-JPEG conversion. Import is not supported on Linux. Exported albums work everywhere. - iOS-only import source. The import pipeline is built around macOS Image Capture conventions (IMG_* naming, AAE sidecars, IMG_E* edits). Other camera sources are not currently supported.
- No EXIF-based organization. Album names and dates are derived from directory names (YYYY-MM-DD convention), not from EXIF metadata.
Philosophy
- Plain directories, no lock-in. Albums are standard filesystem directories. No database, no proprietary format. You can always
ls,cp,rsync, or browse with any tool. - Preserve everything, organize intelligently. Originals, edits, and sidecars are archived under
ios/. Themain-*directories provide a clean, browsable view without losing source material. - Explicit over magic. Every operation has a dry-run mode. Destructive fixes require explicit flags. The tool tells you what it would do before doing it.
- Composable with existing tools. photree handles album structure — pair it with rsync for backups, MEGAsync for cloud sync, or any viewer for browsing.
Related Projects
- Apple Photos — Apple's built-in photo manager. Great for editing, but uses a proprietary database. photree is for people who want plain directories.
- Immich / PhotoPrism — Self-hosted photo management with a web UI. A good complement if you want a browsable gallery on top of your photree albums.
- immich-go — CLI tool to bulk-upload photos to Immich. Can be used to upload photree albums.
- rsync / Syncthing / MEGAsync — File sync tools. photree exports to directories that these tools can sync.
- ExifTool — Metadata extraction and editing. Useful alongside photree for EXIF-based workflows.
Installation
See docs/installation.md.
Usage
See docs/usage.md.
Development
See docs/setup-development-environment.md.
Contribute
Practical information:
- docs/setup-development-environment.md — development setup
- docs/building-and-testing.md — running tests and checks
- docs/releasing-and-publishing.md — releases and PyPI publishing
- docs/guidelines.md — project-specific guidelines
- common-guidelines — shared coding guidelines
Conceptual information:
- docs/internals.md — runtime behavior, design decisions, and external commands
- docs/architecture.md — module dependency graph
Release files for photree 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| photree-0.7.0.tar.gz | 202.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| photree-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 507.5 kB
Release files / photree-0.7.0.tar.gz
| Download URL | photree-0.7.0.tar.gz |
|---|---|
| Size | 202.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
788b0b8c92050f041273135a4c29f47e4222decd17a0b50370df325d33eab45a
|
|
BLAKE2b-256 checksum How to use checksums |
fe473eee5f00fbed501715b438a23891feccc959b0c6a2a302a3565ca2e1f5f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / photree-0.7.0-py3-none-any.whl
| Download URL | photree-0.7.0-py3-none-any.whl |
|---|---|
| Size | 305.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f3407e38b1c9fc8300702639160b55e64912eb7194be6e69c04a6d1f526f0fc2
|
|
BLAKE2b-256 checksum How to use checksums |
1752dc0e9857c5a5dbb195d4b6f4a37a6c2a85e6a2c8d17ce424ce681b51ffe7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency log