filmtagger


Namefilmtagger JSON
Version 0.3.0 PyPI version JSON
download
home_pageNone
SummaryA simple CLI to tag film scans with EXIF metadata
upload_time2025-08-14 04:28:32
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords exif film metadata photography
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # filmtagger

A simple CLI to tag film scans with EXIF metadata.

## Installation

```bash
pip install filmtagger
```

### Requirements

This package uses the [pyexiv2](https://pypi.org/project/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

```bash
# Show help
filmtagger --help

# Tag a single image
filmtagger tag image.jpg

# Tag multiple images
filmtagger tag *.jpg
```

## Development

This project uses [Hatch](https://hatch.pypa.io/) for development and package management.

### Setup Development Environment

1. Install Hatch:
```bash
pip install hatch
```

2. Create and activate development environment:
```bash
hatch shell
```

### Running Tests

```bash
# 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

```bash
# Build the package
hatch build

# Publish to PyPI
hatch publish
```

## License

This project is licensed under the MIT License - see the [LICENSE](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:

```toml
["Mamiya RB67"]
"Exif.Image.Make" = "Mamiya"
"Exif.Image.Model" = "RB67"
```

And a `~/.config/filmtagger/films.toml` like this:

```toml
["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](https://exiv2.org/metadata.html).
In addition to the standard Exiv2 tag schema, [AnalogExif 
tags](http://analogexif.sourceforge.net/help/analogexif-xmp.php) are 
also supported.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "filmtagger",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "exif, film, metadata, photography",
    "author": null,
    "author_email": "Scott Johnston <sjohnston@alum.mit.edu>",
    "download_url": "https://files.pythonhosted.org/packages/2d/c2/1c0bdbab74ed90a50ccc913ba4f71a9e759f40f22c26dc512f6b56e6e185/filmtagger-0.3.0.tar.gz",
    "platform": null,
    "description": "# filmtagger\n\nA simple CLI to tag film scans with EXIF metadata.\n\n## Installation\n\n```bash\npip install filmtagger\n```\n\n### Requirements\n\nThis package uses the [pyexiv2](https://pypi.org/project/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.\n\n## Usage\n\n```bash\n# Show help\nfilmtagger --help\n\n# Tag a single image\nfilmtagger tag image.jpg\n\n# Tag multiple images\nfilmtagger tag *.jpg\n```\n\n## Development\n\nThis project uses [Hatch](https://hatch.pypa.io/) for development and package management.\n\n### Setup Development Environment\n\n1. Install Hatch:\n```bash\npip install hatch\n```\n\n2. Create and activate development environment:\n```bash\nhatch shell\n```\n\n### Running Tests\n\n```bash\n# Run all tests\nhatch run test\n\n# Run tests with coverage\nhatch run test-cov\n\n# Run linting checks\nhatch run lint:all\n\n# Format code\nhatch run lint:fmt\n```\n\n### Building and Publishing\n\n```bash\n# Build the package\nhatch build\n\n# Publish to PyPI\nhatch publish\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Usage examples\n\nTo set the date of all images to 12 June 2019, specifying camera and \nfilm as well:\n\n    $ filmtagger -d 2019-06-12 -c \"Leica M6\" -f \"E100G\" *.jpg\n\nFilmtagger supports fuzzy-matching against its database of cameras and \nfilms, so your input strings needn't be exact.  Likewise, it attempts to \nautodetect a variety of date/time input.\n\n## Configuration\n\nYou may configure your own camera and film definitions to override the\nsystem-wide ones.\n\nCreate a `~/.config/filmtagger/cameras.toml` file that looks like this:\n\n```toml\n[\"Mamiya RB67\"]\n\"Exif.Image.Make\" = \"Mamiya\"\n\"Exif.Image.Model\" = \"RB67\"\n```\n\nAnd a `~/.config/filmtagger/films.toml` like this:\n\n```toml\n[\"Ilford HP5 Plus\"]\n\"Exif.Photo.ISOSpeedRatings\" = 400\n\"Xmp.AnalogExif.FilmMaker\" = \"Ilford\"\n\"Xmp.iptcExt.DigitalSourceType\" = \"http://cv.iptc.org/newscodes/digitalsourcetype/negativeFilm\"\n```\n\nThe section headings will be fuzzy-matched from the command-line \narguments.  The key-value pairs that follow will be set as metadata, \nassuming they are [valid tag names](https://exiv2.org/metadata.html).\nIn addition to the standard Exiv2 tag schema, [AnalogExif \ntags](http://analogexif.sourceforge.net/help/analogexif-xmp.php) are \nalso supported.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A simple CLI to tag film scans with EXIF metadata",
    "version": "0.3.0",
    "project_urls": {
        "Homepage": "https://github.com/2n3906/filmtagger",
        "Issues": "https://github.com/2n3906/filmtagger/issues",
        "Repository": "https://github.com/2n3906/filmtagger.git"
    },
    "split_keywords": [
        "exif",
        " film",
        " metadata",
        " photography"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9c3ac67e4fa296bc3ce632171bc2f7753e823dcd1e79227d1ebcd2fe385dfd3f",
                "md5": "5f84f80f6cf5bb270793cf90bb5298ec",
                "sha256": "aba2708d3f87ca6930266c85b020e70d747fbb51730dfe4f5b962a6850f514a8"
            },
            "downloads": -1,
            "filename": "filmtagger-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5f84f80f6cf5bb270793cf90bb5298ec",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 6827,
            "upload_time": "2025-08-14T04:28:31",
            "upload_time_iso_8601": "2025-08-14T04:28:31.252148Z",
            "url": "https://files.pythonhosted.org/packages/9c/3a/c67e4fa296bc3ce632171bc2f7753e823dcd1e79227d1ebcd2fe385dfd3f/filmtagger-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2dc21c0bdbab74ed90a50ccc913ba4f71a9e759f40f22c26dc512f6b56e6e185",
                "md5": "b52d335f619b290171d0fc75efd3d46d",
                "sha256": "783192b69486b9044e624dba72b34f8c3b299e08ef8e34e79488b0dd95bd7828"
            },
            "downloads": -1,
            "filename": "filmtagger-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b52d335f619b290171d0fc75efd3d46d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 10702,
            "upload_time": "2025-08-14T04:28:32",
            "upload_time_iso_8601": "2025-08-14T04:28:32.300530Z",
            "url": "https://files.pythonhosted.org/packages/2d/c2/1c0bdbab74ed90a50ccc913ba4f71a9e759f40f22c26dc512f6b56e6e185/filmtagger-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-14 04:28:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "2n3906",
    "github_project": "filmtagger",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "filmtagger"
}
        
Elapsed time: 0.71517s