filmtagger
A simple CLI to tag film scans with EXIF metadata.
Installation
pip install filmtagger
Requirements
This package uses the pyexiv2 library for EXIF/XMP metadata manipulation, which provides Python bindings for the Exiv2 library. The pyexiv2 package includes pre-compiled binaries for most platforms, making installation straightforward without requiring system-level dependencies.
Usage
# Show help
filmtagger --help
# Tag a single image
filmtagger tag image.jpg
# Tag multiple images
filmtagger tag *.jpg
Development
This project uses Hatch for development and package management.
Setup Development Environment
- Install Hatch:
pip install hatch
- Create and activate development environment:
hatch shell
Running Tests
# Run all tests
hatch run test
# Run tests with coverage
hatch run test-cov
# Run linting checks
hatch run lint:all
# Format code
hatch run lint:fmt
Building and Publishing
# Build the package
hatch build
# Publish to PyPI
hatch publish
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Usage examples
To set the date of all images to 12 June 2019, specifying camera and film as well:
$ filmtagger -d 2019-06-12 -c "Leica M6" -f "E100G" *.jpg
Filmtagger supports fuzzy-matching against its database of cameras and films, so your input strings needn't be exact. Likewise, it attempts to autodetect a variety of date/time input.
Configuration
You may configure your own camera and film definitions to override the system-wide ones.
Create a ~/.config/filmtagger/cameras.toml file that looks like this:
["Mamiya RB67"]
"Exif.Image.Make" = "Mamiya"
"Exif.Image.Model" = "RB67"
And a ~/.config/filmtagger/films.toml like this:
["Ilford HP5 Plus"]
"Exif.Photo.ISOSpeedRatings" = 400
"Xmp.AnalogExif.FilmMaker" = "Ilford"
"Xmp.iptcExt.DigitalSourceType" = "http://cv.iptc.org/newscodes/digitalsourcetype/negativeFilm"
The section headings will be fuzzy-matched from the command-line arguments. The key-value pairs that follow will be set as metadata, assuming they are valid tag names. In addition to the standard Exiv2 tag schema, AnalogExif tags are also supported.
Metadata
Release files for filmtagger 0.3.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 | |
|---|---|---|---|
| filmtagger-0.3.0.tar.gz | 10.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| filmtagger-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.5 kB
Release files / filmtagger-0.3.0.tar.gz
| Download URL | filmtagger-0.3.0.tar.gz |
|---|---|
| Size | 10.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
783192b69486b9044e624dba72b34f8c3b299e08ef8e34e79488b0dd95bd7828
|
|
BLAKE2b-256 checksum How to use checksums |
2dc21c0bdbab74ed90a50ccc913ba4f71a9e759f40f22c26dc512f6b56e6e185
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.4
|
Release files / filmtagger-0.3.0-py3-none-any.whl
| Download URL | filmtagger-0.3.0-py3-none-any.whl |
|---|---|
| Size | 6.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aba2708d3f87ca6930266c85b020e70d747fbb51730dfe4f5b962a6850f514a8
|
|
BLAKE2b-256 checksum How to use checksums |
9c3ac67e4fa296bc3ce632171bc2f7753e823dcd1e79227d1ebcd2fe385dfd3f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.4
|