ezMM: Mini-Suite for Easy Multimodal Data Processing
This lightweight Python package aims to streamline and simplify the processing of multimodal data. The core philosophy of ezMM is to treat any data (whether strings, images, audios, tables, etc.) as a multimodal sequence.
Usage
Core is the MultimodalSequence class. Here is an example:
from ezmm import MultimodalSequence, Image
img1 = Image("in/roses.jpg")
img2 = Image("in/garden.jpg")
seq = MultimodalSequence("The image", img1, "shows two beautiful roses while",
img2, "shows a nice garden with many flowers.")
seq comprehensively aggregates the different modalities into one handy object. It also offers some useful features:
MultimodalSequence is stringifyable
print(seq)
will return
The image <image:1> shows two beautiful roses while <image:2> shows a nice garden with many flowers.
That is, non-string items in the MultimodalSequence get replaced by their unique reference when turned into strings.
MultimodalSequence understands references
Conversely, you can do
seq2 = MultimodalSequence("The image <image:1> shows two beautiful roses while <image:2> shows a nice garden with many flowers.")
which obeys seq == seq2. That is, MultimodalSequence resolves references within the input string and loads the corresponding items under the hood.
Access MultimodalSequence like a list
You can apply list comprehension to seq. For example,
seq[1] == img.
Easy modality checks
You can check for specific modalities like images quickly, e.g., with seq.has_images().
Get the text and manipulate the sequence
seq.text returns all text parts (without items) as a single string. You can manipulate a MultimodalSequence like a list via append(), extend(), insert(), remove(), pop(), seq[i] = ..., del seq[i], + and +=. Nested sequences are always flattened automatically, so a MultimodalSequence never contains another one.
Item Types
| Class | Reference | For |
|---|---|---|
Image |
<image:1> |
Images (JPEG, PNG, AVIF, ...) |
Video |
<video:1> |
Videos (MP4, ...) |
Audio |
<audio:1> |
Audio-only files (MP3, WAV, FLAC, OGG, M4A, ...) |
File |
<file:1> |
Any other file (PDF, Excel sheets, archives, ...) |
All items can be created from a file path or from binary data, e.g., Audio(binary_data=data, mime_type="audio/mpeg"). Files larger than 100 MB are rejected with a FileTooLargeError; change the limit with set_max_file_size(n_bytes) (or None for no limit) or the EZMM_MAX_FILE_SIZE environment variable.
Item Registry
ezMM keeps track of all items in a registry (an SQLite DB plus media files) located at temp/ or at the path specified by the EZMM environment variable (or set_ezmm_path()).
- Deduplication: Identical files (same kind and byte-identical content, incl. embedded metadata) collapse to the same item and reference. Each item keeps all its source URLs (
item.source_urls). To find an item by URL, useitem_registry.get_by_source_url(url). - Cleanup:
python -m ezmm dedup [--dry-run]removes duplicates from existing registries. References to removed duplicates keep resolving to the remaining item. - Missing files: The registry remembers which items' files are missing (used by the web UI to hide them). Run
python -m ezmm checkto re-check all files, e.g., after moving or deleting files outside of ezMM. - Migration: Registries created with older ezMM versions are migrated automatically on first use (a backup
item_registry.v<version>.bak.dbis kept). Older ezMM versions cannot read migrated registries.
Web UI
Install with pip install ezmm[ui] and run
python -m ezmm ui [--path REGISTRY_PATH] [--port 7878]
to browse all items of the registry (and sequences rendered via seq.render()) at http://localhost:7878.
Feature Overview
- ✅ Image support
- ✅ Video support
- ✅ Audio support
- ✅ Support for any other file type
- ✅ Saving and organizing media in a database along with their origin URLs
- ✅ Rendering
MultimodalSequenceand browsing the registry in a web UI - ✅ Duplication management: Identify and re-use duplicates
Metadata
Release files for ezMM 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ezmm-0.6.1.tar.gz | 49.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ezmm-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 98.2 kB
Release files / ezmm-0.6.1.tar.gz
| Download URL | ezmm-0.6.1.tar.gz |
|---|---|
| Size | 49.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbd9c7db94cebcb85c906454da50ba496fb90570949365b0b3a21929eea12ffd
|
|
BLAKE2b-256 checksum How to use checksums |
96ac10577cefac06619897625dd4f5a26810c5268d1007b5c3c2f1d8ba64b3f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|
Release files / ezmm-0.6.1-py3-none-any.whl
| Download URL | ezmm-0.6.1-py3-none-any.whl |
|---|---|
| Size | 48.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
483316b47b18ae544774768654d74b362ed5aa41128f6ef11a2f9cb10dea20a7
|
|
BLAKE2b-256 checksum How to use checksums |
283d58f1f673354b06cb64750858315189a21771e6a5972234af8175a4c89d82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|