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
metamancer-0.1.0b0.tar.gz
(16.8 kB
view details)
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.1.0b0.tar.gz.
File metadata
- Download URL: metamancer-0.1.0b0.tar.gz
- Upload date:
- Size: 16.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.26.7 CPython/3.14.3 Linux/6.17.0-1008-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
057755024330aac4641d2f8f1c284ce74d8d948df83e830ab6ef897f4fa032f4
|
|
| MD5 |
499d07878e675ad153a1863d024ffa45
|
|
| BLAKE2b-256 |
f7268dfb8c40778eb940e4e07bc7af5a4b4b2e16a77d16b5cd6f1f8e2c684c14
|
File details
Details for the file metamancer-0.1.0b0-py3-none-any.whl.
File metadata
- Download URL: metamancer-0.1.0b0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.26.7 CPython/3.14.3 Linux/6.17.0-1008-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cefb76d9368a91f09f849225fcdce3f1ea14accd4223c0eeae8df265bfb9fab
|
|
| MD5 |
375ae9b766d422aaf71bf6601b1539ab
|
|
| BLAKE2b-256 |
6c13fdb7b20453dbd588ae65d746e7ce23355880d7b93bb236e991c4864220ca
|