exif
Read and modify image EXIF metadata using Python.
What it is and what it does
exif is a pure-Python library for reading and modifying EXIF metadata embedded in image files. It provides a simple object-oriented interface: load an image file, access EXIF tags as Python attributes (e.g., `image.gps_latitude`, `image.model`), modify or delete them, and write the updated image back to disk. The package handles the binary EXIF format internally, so you work with high-level Python objects rather than raw bytes.
The library supports a wide range of EXIF tags including camera settings (aperture, shutter speed, ISO), GPS coordinates, timestamps, and device information. It requires only plum-py as a runtime dependency and runs on Python 3.7+. The maintainer developed it as a hobby project and now has limited bandwidth, though the package is marked Production/Stable and accepts community contributions.
Use it for:
- Batch remove GPS coordinates from photos before sharing them online for privacy.
- Extract camera model, lens, and shooting parameters from a folder of images for analysis.
- Modify image timestamps or device metadata in bulk using a Python script.
- Read GPS location data from photos to build a map of where images were taken.
- Strip or update EXIF tags in automated image processing pipelines.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Read, modify, and write EXIF metadata in image files using pure Python, without external software dependencies.
Yes, if you need straightforward EXIF read/write without external dependencies. The package is stable, low-friction to install, and has no known vulnerabilities. The dormant maintenance status is a minor concern for long-term support, but the code is mature and the maintainer welcomes contributions. Not suitable if you need active development or guarantees of rapid bug fixes.
Install
exif on PyPI
pip
pip install exifuv
uv add exifpoetry
poetry add exifInstalling exif
Before you install
Low friction: pure Python wheel with a single runtime dependency (plum-py). Last release was 612 days ago; the maintainer notes reduced bandwidth since 2018 but accepts contributions. Status is dormant rather than abandoned.
License in practice
MIT license (permissive); you can use, modify, and distribute this package with minimal restrictions.
Quickstart
from exif import Image
with open('photo.jpg', 'rb') as f:
img = Image(f)
print(img.has_exif)
print(img.gps_latitude)
img.make = 'Modified'
with open('output.jpg', 'wb') as f:
f.write(img.get_file())
Requires Python 3.7 or later; image file must be opened in binary mode ('rb' or 'wb').
Verify before relying
- Whether plum-py introduces any significant runtime overhead or compatibility concerns.
- Current state of bug fixes and whether dormant status affects reliability for production use.
- Performance characteristics when processing large batches or high-resolution images.
Package facts
| License | not declared (permissive) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — plum-py |
| Maintenance | dormant — 612 days since the last release |
| First released | |
| Downloads | 111,163/month — #12,430 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: exif-1.6.1-py3-none-any.whl
Tags
More Graphics packages
Pillow adds image processing capabilities to…
permissive · top 100 on PyPI
fonttoolsfonttools manipulates font files in multiple…
permissive · top 1,000 on PyPI
matplotlib-inlineEnables matplotlib figures to display inline…
permissive · top 1,000 on PyPI
pymupdfPyMuPDF extracts, renders, converts, and…
agpl · top 1,000 on PyPI
pypdfium2pypdfium2 is a Python binding to PDFium that…
permissive · top 1,000 on PyPI
altairAltair is a declarative Python library for…
permissive · top 1,000 on PyPI
piexifPiexif reads, writes, and manipulates EXIF…
permissive · top 5,000 on PyPI
ExifReadExtracts Exif metadata from digital image files…
unclear · top 5,000 on PyPI
imagesizeReads image file headers to extract dimensions,…
permissive · top 1,000 on PyPI
pyexiv2pyexiv2 reads and writes image metadata (EXIF,…
copyleft · top 15,000 on PyPI
PyExifToolPyExifTool is a Python wrapper that…
copyleft · top 15,000 on PyPI
easy-thumbnailsGenerates and manages thumbnail images for…
permissive · top 15,000 on PyPI
pillow-jxl-pluginRegisters JPEG-XL codec support with Pillow,…
unclear · top 15,000 on PyPI
pillow-heifpillow-heif adds HEIF/HEIC image format support…
copyleft · top 5,000 on PyPI
arParses and reads ar archive files (.a),…
permissive · top 15,000 on PyPI