A toolkit for processing the ASM's Mammal Image Library (MIL).
Project description
mil-kit
A Python toolkit for batch processing images, with a focus on PSD to image conversion and robust watermarking capabilities.
Features
- Two main commands:
exportandwatermark. - 🚀 Batch process multiple files in a directory.
- ⚡ Parallel processing for faster execution.
- 📊 Progress bar with detailed status.
- 📁 Support for recursive directory processing.
- ⚡ Preserve folder structure in output.
- 📝
export: Automatically hide all text layers in PSD files. - 🖼️
export: Export processed files as PNG (default) or other formats. - 💧
watermark: Apply copyright watermarks to images. - 📖
watermark: Metadata-driven watermarks from Excel/CSV files. - fallback
watermark: Use static text when no metadata match is found. - 🎨
watermark: Customize watermark opacity.
Installation
Install using pip:
pip install mil-kit
Or using uv:
uv add mil-kit
Usage
Command Line
mil-kit provides two main commands: export and watermark.
export
Batch hide text layers in PSDs and export them as images.
mil-kit export -d /path/to/psd/files
Process recursively, specify an output directory, and use JPEG format:
mil-kit export -d /path/to/psd/files -o /path/to/output -r -f jpeg --max-resolution 500
watermark
Apply a copyright watermark to a directory of images.
Apply a static watermark to all images:
mil-kit watermark -d /path/to/images -t "© 2024 Your Name"
Use a metadata file to apply dynamic watermarks. The file stem (e.g., 123 from 123.jpg) is matched against the MIL# column in the metadata file.
mil-kit watermark -d /path/to/images --meta-file /path/to/metadata.csv
Use a metadata file with a fallback watermark for images with no match:
mil-kit watermark -d /path/to/images --meta-file /path/to/metadata.csv -t "Default Watermark" --opacity 0.5
Options
Common Options (for export and watermark)
-d, --dir: Input directory containing image files (required).-o, --output: Output directory for processed files (default: input directory).-f, --output-format: Output image format (default: png).-r, --recursive: Process subdirectories recursively.--max-resolution: Set maximum resolution for output images.--limit: Limit the number of files to process.--max-workers: Maximum number of parallel workers (default: CPU count).--log-file: Path to a log file.--no-overwrite: Skip files that already exist in the output directory.--quiet: Suppress detailed progress output.
watermark Specific Options
-m, --meta-file: Path to an Excel or CSV metadata file.-t, --text: Static fallback watermark text.--opacity: Watermark opacity between 0.0 and 1.0 (default: 0.8).
Python API
You can also use mil-kit as a Python library.
PSDProcessor
from mil_kit.psd.processor import PSDProcessor
from mil_kit.psd.batch import BatchJob
# Process a single file
processor = PSDProcessor("image.psd")
processor.load()
processor.hide_non_image_layers()
processor.export("output.jpg", format="jpeg")
# If you want to export with max resolution
processor.export("output_resized.jpg", format="jpeg", max_resolution=500)
# Batch process
job = BatchJob(
input_dir="./psd_files",
output_dir="./output",
recursive=True,
output_format="png",
max_workers=4
)
job.run()
WatermarkProcessor
from mil_kit.watermark.add import WatermarkProcessor
from mil_kit.watermark.batch import WatermarkJob
# Process a single file
processor = WatermarkProcessor("photo.png", watermark_text="2024 Studio Name", opacity=0.8)
processor.load()
processor.apply_text_watermark()
processor.export("output/photo.png", format="png", max_resolution=1920)
# Batch process
job = WatermarkJob(
input_dir="images",
meta_file="metadata.csv",
watermark_text="Default Watermark",
output_dir="watermarked_output",
)
job.run()
Requirements
- Python >= 3.10
- fastexcel >= 0.19.0
- pillow >= 12.0.0
- polars >= 1.38.1
- psd-tools >= 1.12.0
- tqdm >= 4.67.1
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Issues
Report bugs and request features on GitHub Issues.
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 mil_kit-0.9.0.tar.gz.
File metadata
- Download URL: mil_kit-0.9.0.tar.gz
- Upload date:
- Size: 88.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7898aa2b74709afe6a8df41ed34817c960ff37ac0275aada6f863dfb8cb597a1
|
|
| MD5 |
ffef9f1e4921a2cc3b75cf005a323170
|
|
| BLAKE2b-256 |
e01d0256e52fa25e9fee53bfce7f1273e689ec4daa9003d2573a3bb5aeeb101f
|
File details
Details for the file mil_kit-0.9.0-py3-none-any.whl.
File metadata
- Download URL: mil_kit-0.9.0-py3-none-any.whl
- Upload date:
- Size: 26.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eed5962071a4bb8ac859b40dafc99733070b1950d7760bf8e92ff19a56827cd1
|
|
| MD5 |
3ee2ca45476d1f791696eb8602849d28
|
|
| BLAKE2b-256 |
23a4bca9f21521e88e4c1e94f8ba968cdc31be8f14225f87625a9a566e668200
|