Manipulate File metadata like a wizard-engineer!
Project description
MetaMancer is a Python library for reading, writing, and manipulating metadata in files, specifically photos and videos.
Features
- Unified Metadata Interface: Access EXIF, IPTC, and XMP metadata through a single, consistent API
- Intelligent Caching: Improve performance with built-in TTL caching of metadata
- GPS Handling: Extract coordinates, generate map URLs, and work with location data
- Spatial Analysis: Cluster images by location and generate interactive maps
- Date Extraction: Intelligently determine the most accurate creation date from various metadata information
- Camera Information: Extract and manipulate camera and photographer details
- Keyword Management: Add, remove, and manage keywords and tags
Installation
pip install MetaMancer
Usage
Basic Metadata Access
from metamancer import MetaMancer
# Get metadata for an image file
metadata = MetaMancer.get_metadata('path/to/image.jpg') # Provide str or Path
# Access specific metadata fields
date = metadata.date
camera = metadata.camera
title = metadata.title
keywords = metadata.keywords
# Check if a specific field exists
if 'Exif.DateTimeOriginal' in metadata:
print(f'Original date: {metadata['Exif.DateTimeOriginal']}')
# Modify metadata
metadata.title = 'My Vacation Photo'
metadata.add_keyword('vacation', 'beach', 'summer')
Caching for Performance
from pathlib import Path
from metamancer import MetaMancer
file_path = Path('large_image.jpg')
# First access will parse the file
metadata = MetaMancer.get_metadata(file_path)
# Subsequent accesses will use the cached data (much faster)
metadata = MetaMancer.get_metadata(file_path)
# Check if a file's metadata is cached
is_cached = MetaMancer.is_cached(file_path)
# Clear cache for a specific file
MetaMancer.clear(file_path)
# Clear entire cache
MetaMancer.clear()
Location and Mapping
from pathlib import Path
from metamancer import MetaMancer
import glob
# Get all jpg files in a directory
image_files = [Path(f) for f in glob.glob('vacation_photos/*.jpg')]
# Generate an interactive map with all geotagged photos
MetaMancer.generate_photo_map(image_files, 'vacation_map.html')
# Get coordinates for a specific image
metadata = MetaMancer.get_metadata(image_files[0])
if metadata.has_location():
lat, lon = metadata.get_gps_coords()
map_url = metadata.get_gps_url() # Google Maps URL
print(f'Photo taken at: {lat}, {lon}')
print(f'View on map: {map_url}')
Spatial Clustering
# Cluster images by location
spatial_strata = MetaMancer.cluster(image_files)
# Access files in the root level
print(f'Total files: {len(spatial_strata.files)}')
# Access files in a specific location cluster
if 'Beach' in spatial_strata._nested_files:
beach_photos = spatial_strata['Beach'].files
print(f'Beach photos: {len(beach_photos)}')
TODO
This library is currently in its Alpha release. It is in active development, but there is still a lot of work to do, including:
- Fully documented functions
- More detailed examples, emphasizing various classes
- Many more fields supported (only started with the bare minimum)
- Setting/modifying metadata values
- Check in test code (once it doesn't involve personal photos)
- Video file support
- Configuration, specifically around caching
- More thoughtful README
- More world-building!
- Links to projects that use MetaMancer
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file metamancer-0.0.3a0.tar.gz.
File metadata
- Download URL: metamancer-0.0.3a0.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.26.3 CPython/3.14.2 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f1935c8ef0212103e1f5f657e0d9f7c4adc7a0e4324aa89f05006a11f783db0
|
|
| MD5 |
abd5f1d3e61225547e92c8779cf3cc61
|
|
| BLAKE2b-256 |
e2da53f49ae463da2f879c988512239e7477f9f6f3dffaceb394f71bd5a4fbc0
|
File details
Details for the file metamancer-0.0.3a0-py3-none-any.whl.
File metadata
- Download URL: metamancer-0.0.3a0-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.26.3 CPython/3.14.2 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8d94cf29bc6942afecd5165b7bfdb0e69c1828f81ea3eefb6e0e584116c0151
|
|
| MD5 |
3feb2fa98535534eaf1fa131de949f3e
|
|
| BLAKE2b-256 |
fc37b33b67a960c340caf37bab8fd973c76131d7138db338f8ddba862a63f23c
|