Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tlhunter/photolib
An opinionated tool for managing a library of photographs taken by digital cameras.
https://github.com/tlhunter/photolib
Last synced: 25 days ago
JSON representation
An opinionated tool for managing a library of photographs taken by digital cameras.
- Host: GitHub
- URL: https://github.com/tlhunter/photolib
- Owner: tlhunter
- Created: 2024-06-19T04:36:25.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-08-10T03:59:43.000Z (3 months ago)
- Last Synced: 2024-08-10T04:31:29.222Z (3 months ago)
- Language: Rust
- Size: 43.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# `photolib`
An opinionated tool for managing a library of photographs taken by digital cameras.
Note that I'm teaching myself Rust while working on this project. It may never reach production-ready status.
## Goals
- Always handle pairs of photos, such as `DSC123.JPG` and `DSC123.RAW`, in tandem
- Provide mechanisms for importing photos to the library from a memory card
- Should work on Linux and macOS desktops, and Linux servers
- Probably won't provide a GUI but should be easily shelled out for automation purposes
- Configuration files follow [XDG guidelines](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)
- Work with RAW files from all of the major camera manufacturers
- Support extracting metadata from RAW files and Darktable files## Progress
- Nothing works yet
## Opinionated Library Hierarchy
- A given filesystem can have multiple library directories.
- Paths to library locations are stored in a global config file.
- A library can contain multiple collection directories, which can have arbitrary names.
- A collection can contain multiple shoot directories, which should follow a `YYYY-MM-DD Arbitrary Name` pattern.
- Shoot directories can contain multiple photos.
- Photos consist of one or more files which share a common prefix.Here's an example of a filesystem layout:
```
~/.config/photolib/config.ini
~/Photos/
~/Photos/.photolib.db
~/Photos/Side Projects/
~/Photos/Headshots/
~/Photos/Headshots/2024-06-18 XYZ Corp/
~/Photos/Headshots/2024-06-18 XYZ Corp/DSC001.JPG
~/Photos/Headshots/2024-06-18 XYZ Corp/DSC001.ARW
~/Photos/Headshots/2024-06-18 XYZ Corp/DSC001.ARW.xmp
~/Photos/Headshots/2024-06-18 XYZ Corp/DSC001.export.jpg
~/Photos/Headshots/2024-06-18 XYZ Corp/DSC001.insta.jpg
```## Subcommands
- `photolib info `: Retrieve EXIF information from image
- `photolib init`: Initialize the configuration file
- `photolib new ()`: Create a new library
- `photolib check `: Check for library errors (e.g. mismatched dates)
- `photolib import `: Copy or move files to a library
- `photolib dupes `: Check for photos duplicated across different shoots
- `photolib report `: Provide library statistics such as focal length frequency
- `photolib fix`: Prompt user to fix mismatched dates, delete duplicates, etc.
- `photolib list collections`: List all collections for the current library
- `photolib list shoots `: List all shoots for library or specified collection
- `photolib list photos `: List all photos (DSC001) for given shoot
- `photolib prune --min-rating=1`: Delete photos below a certain ratingIn these commands, `` refers to a filesystem path, `` refers to either a library, a library/collection, or a library/collection/shoot.
Some things can be assumed, for example if the current working directory is inside of a photolib library then photolib will assumed the commands are for that library.
Commands which delete files probably shouldn't make such assumptions.Deletions will send files to trash by default, e.g. by shelling out to `gio trash ` on Linux.
# Compilation Requisites
```sh
sudo apt-get install libgexiv2-dev
```