IMetVi is a cross-format desktop application for extracting, standardizing, displaying, exporting, and curating scientific image metadata. It targets researchers, librarians, and research technicians working with microscopy, remote sensing, medical, astronomical, and general-purpose image files in Canadian academic institutions.
See ARCHITECTURE.md for how the codebase is
organized and UPDATES.md for a chronological changelog.
-
🖼️ Supported formats, each mapped to a discipline-aligned standard:
Format Extensions Standard TIFF .tif.tiffREMBI (microscopy) or EXIF (general photo/scan/illustration) CZI (Zeiss) .cziREMBI (microscopy) OME-TIFF .tif.tiffOME-XML GeoTIFF .tif.tiffISO 19115 (geospatial) JPG / JPEG .jpg.jpegEXIF + IPTC + XMP PNG .pngEXIF-style general fields DICOM .dcmDICOM PS3.3 (patient-identifying fields excluded by design) FITS .fits.fitFITS / WCS (astronomy) HDF5 .h5.hdf5.nc4Generic container inspection LIF (Leica) .lifREMBI (microscopy) NetCDF .nc.nc4ISO 19115 via CF Conventions LAS/LAZ (LiDAR) .las.lazISO 19115 / ASPRS LAS Formats sharing an extension (TIFF / OME-TIFF / GeoTIFF all use
.tif/.tiff; HDF5 / NetCDF both cover.nc4) are selected explicitly via the format dropdown, which auto-suggests a match on load. TIFF is a general-purpose container, not just a microscopy format — the Select Application dropdown offers both Microscopy and General / EXIF for it, so a scanned figure or illustration gets EXIF-style fields (camera, date, resolution) instead of REMBI microscopy fields. -
🛰️ LAS/LAZ point classification analysis (on demand) — beyond the header fields every LAS/LAZ file shows on load, a LiDAR sidebar action reads the full point records to report point classification breakdown (ground/vegetation/building/water/etc.), scan angle range, GPS time range, and flight-line count. Kept separate from the normal load path since it's slower (reads every point); sensor model and flying height are not stored in LAS/LAZ files at all, so the app says so rather than guessing. The sidebar section only appears when the loaded file's format is LAS — it stays out of the way for every other format instead of sitting there greyed out.
-
📁 Load a single file or an entire folder (batch loading runs off the UI thread with a progress bar).
-
🇨🇦 Bilingual EN/FR interface — a language selector switches every button, label, tooltip, dialog, and error/success message between English and French, including the dynamically rendered Curation summary. (Extracted metadata field labels and standards documentation text are not yet translated — see
ARCHITECTURE.md.) -
💬 Tooltips on every sidebar action — hover any button to see what it does before clicking it.
-
🌳 Readable CRS WKT — a CRS's WKT definition (often 1000+ characters on one line) is shown indented by nesting depth in the Recommended Fields tab instead of one unbroken wall of text. The value exported to JSON/CSV/sidecar files is unaffected — this only changes the on-screen display.
-
🖼️ Collapsible thumbnail preview — confirms visually which file is loaded (JPG/PNG/TIFF, first page for multi-page TIFF); other formats show a generic extension placeholder.
-
🧾 Three-tab metadata view:
- Raw Metadata — everything the parser extracted, unfiltered.
- Recommended Fields — standardized, discipline-aligned fields with human-readable labels and units.
- Curation — automated flags and integrity info for this file.
-
ℹ️ Metadata Standard Info dialog — for the active context, shows what the target standard requires and honestly reports what is (and isn't) captured from the file itself.
-
🚩 Curation flags, computed per batch:
DUPLICATE— identical MD5 checksum to another file in the batchCORRUPT— parser reported a read failureHAS_GPS_DATA— GPS metadata present (privacy/consent flag)DIMENSION_OUTLIER— dimensions deviate from the batch's most common sizeLOSSY_TIFF— TIFF using internal JPEG compressionNO_CRS_FOUND— a georeferenced format (GeoTIFF/NetCDF/LAS) with no embedded coordinate system
-
⚠️ Missing required fields — each format declares the standardized fields a well-formed capture is expected to have; gaps are shown in red at the top of the Recommended Fields tab and exported as aMissingFieldscolumn in the curation report -
✍️ Write metadata back into the file (JPEG: EXIF + IPTC + XMP; TIFF:
ImageDescription), with an editable form and an overwrite confirmation. Disabled (with an explanatory tooltip) for GeoTIFF and OME-TIFF, where writing would destroy georeferencing or the OME-XML structure — seeARCHITECTURE.md. -
📎 Save Sidecar JSON — writes
<basename>.jsonbeside the source image without touching the original (QGIS/ArcGIS/repository convention). -
🔒 Cross-session integrity verification —
Save Checksumspersists achecksums.jsonmanifest per folder;Verify Integrityre-scans and reportsOK/MODIFIED/MISSING/NEWper file. -
📋 Batch Compliance Summary — aggregates missing-required-field and curation-flag counts across a whole loaded batch into one dataset-wide readiness snapshot ("N / M files fully compliant", ranked by which fields/flags are most common), so you can judge deposit-readiness without reading every file's Curation tab individually.
-
💾 Export:
- Standardized metadata as JSON or CSV (single file or full batch)
- Dedicated Curation Report CSV (one row per file, curation-focused
columns, compatible with
CUR_Res_CurationToolsreport shape)
Recommended Fields view for a loaded LAS file — note the CRS (WKT) field indented for readability, and the LiDAR sidebar section that only appears for this format
- Python 3.8+
- Tested on Windows 10/11
- Recommended: run within a conda or venv environment
pip install -r requirements.txtpython main.pypython -m pytest -qThis project is licensed under the MIT License. See LICENSE for details.
- TIFF handling: tifffile
- Zeiss CZI reader: czifile
- Leica LIF reader: readlif
- EXIF read/write: Pillow + piexif
- IPTC read/write: iptcinfo3
- GeoTIFF / geospatial: rasterio
- HDF5: h5py
- NetCDF: netCDF4
- LiDAR / LAS-LAZ: laspy + pyproj
- DICOM: pydicom
- FITS: astropy
- REMBI Guidelines: https://doi.org/10.1038/s41592-021-01166-8
- OME-XML spec: https://www.openmicroscopy.org/ome-files/
- ISO 19115 (geospatial metadata): https://www.iso.org/standard/53798.html
- IPTC standard: https://www.iptc.org/std/photometadata/specification/
- ASPRS LAS specification: https://www.asprs.org/divisions-committees/lidar-division/laser-las-file-format-exchange-activities
