iscc-bio - ISCC Processing for Bioimage Data
ISCC Processing for Multi-Dimensional Bioimage Data
Generate ISO 24138:2024 International Standard Content Codes (ISCC) for bioimage data across multiple formats using deterministic IMAGEWALK plane traversal.
Project Status
Version 0.2.0
Overview
iscc-bio bridges bioimage formats with ISCC-CODE processing by implementing the IMAGEWALK specification -
a deterministic algorithm for traversing and canonicalizing pixel data from multi-dimensional bioimaging data.
This produces consistent, reproducible content identifiers regardless of source format or storage platform.
Documentation: https://bio.iscc.codes
Key Features
- Format-Agnostic Hashing: Generate reproducible ISCCs at the level of pixel data across OME-TIFF, OME-Zarr, OMERO, CZI, ND2, LIF, and other formats
- IMAGEWALK Implementation: Deterministic Z→C→T plane traversal with canonical byte representation
- Multi-Source Support: Process local files (via BioIO), OME-Zarr archives, and OMERO remote servers
- Memory Efficient: Lazy loading with Dask for processing large multi-dimensional images
- Multi-Scene Processing: Handle complex multi-scene/multi-series bioimage files
- Command-Line Tools: CLI commands for code generation
Installation
Basic Installation
# Using uv (recommended)
uv tool install iscc-bio
# Using pip
pip install iscc-bio
Installation with Format Support
# Install with all bioimage reader plugins
uv tool install "iscc-bio[readers]"
# Install with specific format support
uv tool install "iscc-bio[czi,nd2,lif]"
# Install everything (all readers)
uv tool install "iscc-bio[all]"
OMERO Support
OMERO requires platform-specific prebuilt zeroc-ice wheels not available on PyPI. Install separately:
pip install -r requirements-omero.txt
Available Optional Dependencies
- readers / all: All BioIO reader plugins (BioFormats, CZI, OME-TIFF, OME-Zarr, ND2, LIF, etc.)
- bioformats: BioFormats reader for broad format support
- czi, nd2, lif, ome-tiff, ome-zarr, dv, imageio, tifffile, tiff-glob: Individual format readers
Quick Start
CLI Commands
Generate Biocode (ISCC-SUM)
# Generate biocode (ISCC-SUM) for bioimage scenes
iscc-bio biocode myimage.ome.tiff
# Works with multiple sources:
iscc-bio biocode local/file.czi # Local bioimage file
iscc-bio biocode data.zarr # OME-Zarr/NGFF
iscc-bio biocode --host omero.server.com --iid 123 # OMERO server
# With per-plane simprints for similarity search:
iscc-bio biocode myimage.czi --simprints
Generate Imagecode (Experimental)
# Generate comprehensive fingerprint with ISCC-SUM + ISCC-IMAGE + ISCC-MIXED
iscc-bio imagecode myimage.czi
# Output includes:
# - ISCC-SUM hash over normalized pixel content
# - Representative view extraction (~5 views per scene)
# - ISCC-IMAGE codes for each view
# - ISCC-MIXED global descriptor
Extract Representative Views
# Extract intelligent 2D views for perceptual hashing
iscc-bio views myimage.nd2 --output-dir ./views/
# Extraction strategies:
# - Maximum intensity projections (MIP)
# - Best focus planes
# - Representative sampling
# - Multi-channel composites
IMAGEWALK Specification
IMAGEWALK is a deterministic algorithm for traversing multi-dimensional bioimage data to produce format-agnostic, reproducible hash digests. The canonical specification is maintained as ISCC Enhancement Proposal IEP-0018.
Core Principles
-
Z→C→T Traversal Order: Planes are processed in deterministic order:
- Outermost loop: Z dimension (depth/focal plane)
- Middle loop: C dimension (channel)
- Innermost loop: T dimension (time)
-
Canonical Byte Representation: Each 2D plane is:
- Flattened in row-major order (Y then X)
- Encoded as big-endian bytes
- Fed to a hash processor
-
Multi-Scene Independence: Each scene/series is processed separately, producing one hash per scene
Example Traversal
For an image with Z=2, C=3, T=2 dimensions (12 total planes):
Plane 1: z=0, c=0, t=0 Plane 7: z=1, c=0, t=0
Plane 2: z=0, c=0, t=1 Plane 8: z=1, c=0, t=1
Plane 3: z=0, c=1, t=0 Plane 9: z=1, c=1, t=0
Plane 4: z=0, c=1, t=1 Plane 10: z=1, c=1, t=1
Plane 5: z=0, c=2, t=0 Plane 11: z=1, c=2, t=0
Plane 6: z=0, c=2, t=1 Plane 12: z=1, c=2, t=1
Implementation Modules
iw_bioio.py: BioIO-based implementation for local filesiw_ngff.py: OME-NGFF/Zarr implementation using ome-zarr-pyiw_blitz.py: OMERO Blitz implementation for remote servers
All implementations produce identical hashes for identical pixel data, conforming to the IMAGEWALK specification (IEP-0018).
Command-Line Interface
biocode - Generate Biocode (ISCC-SUM)
Generate biocode (ISCC-SUM) for bioimage scenes:
iscc-bio biocode INPUT [OPTIONS]
Options:
-s, --source [auto|bioio|omero|zarr] Data source type
--simprints Generate per-plane simprints
--host TEXT OMERO server hostname
--iid INTEGER OMERO image ID
--fid INTEGER OMERO fileset ID
imagecode - Generate Imagecode (Experimental)
Create comprehensive bioimage fingerprints with ISCC-SUM + ISCC-IMAGE + ISCC-MIXED codes:
iscc-bio imagecode INPUT [OPTIONS]
Options:
-o, --output-dir PATH Save extracted view PNGs
-n, --max-views INTEGER Maximum views per scene (default: 5)
views - Extract Representative Views
Extract intelligent 2D views for perceptual hashing:
iscc-bio views INPUT [OPTIONS]
Options:
-s, --strategies TEXT View strategies (mip, best_focus, representative, composite)
-n, --max-views INTEGER Maximum views to extract (default: 8)
-o, --output-dir PATH Directory to save thumbnails
--host TEXT OMERO server hostname
--iid INTEGER OMERO image ID
scenes - Extract Scene Thumbnails
Extract thumbnails from all scenes in a multi-scene file:
iscc-bio scenes INPUT
thumb - Extract Thumbnail
Extract a single representative thumbnail from a bioimage:
iscc-bio thumb INPUT
Python API
High-Level Entry Point
The biocode() function handles all supported sources (local files, OME-NGFF/Zarr, OMERO) and returns a single
container dict: a top-level raw-byte ISCC-SUM over the original source with the per-scene IMAGEWALK content
codes nested as parts:
from iscc_bio.api import biocode
result = biocode("image.ome.tiff")
print(result["iscc_code"]) # top-level raw-byte ISCC-SUM
print(result["parts"][0]["iscc_code"]) # per-scene IMAGEWALK content code
# OME-NGFF/Zarr store (top-level code is the tree SUM over the store)
result = biocode("dataset.zarr")
# OMERO server (top-level iscc_code is None; parts carry per-scene codes)
result = biocode(host="omero.server.com", username="user", password="pass", iid=123)
IMAGEWALK Plane Iteration
from iscc_bio.imagewalk import iter_planes_bioio, iter_planes_ngff
from iscc_bio.imagewalk import iter_planes_blitz_image
# Iterate over planes using BioIO
for plane in iter_planes_bioio("image.czi"):
print(f"Scene {plane.scene_idx}, Z={plane.z_depth}, "
f"C={plane.c_channel}, T={plane.t_time}")
print(f"Shape: {plane.xy_array.shape}, dtype: {plane.xy_array.dtype}")
# Iterate over OME-Zarr planes
for plane in iter_planes_ngff("data.zarr"):
# Process plane.xy_array (2D numpy array)
pass
# Iterate over OMERO planes
from omero.gateway import BlitzGateway
conn = BlitzGateway("user", "pass", host="omero.server.com")
conn.connect()
image = conn.getObject("Image", 123)
for plane in iter_planes_blitz_image(conn, image):
# Process plane.xy_array
pass
conn.close()
Generate Biocode (ISCC-SUM)
from iscc_bio.biocode import generate_biocode
from iscc_bio.imagewalk import iter_planes_bioio
# Generate biocode for all scenes
planes = iter_planes_bioio("image.lif")
results = generate_biocode(planes)
print(results[0]["iscc_code"]) # ISCC-SUM for first scene
Generate Imagecode (Experimental)
from iscc_bio.imagecode import generate_imagecode, format_output
# Generate comprehensive fingerprints (ISCC-SUM + ISCC-IMAGE + ISCC-MIXED)
fingerprints = generate_imagecode("image.nd2", max_views=5)
# Format output
output = format_output(fingerprints, "image.nd2")
print(output)
Supported Formats
Via BioIO plugin ecosystem:
- OME-TIFF/TIFF: Multi-page TIFF with OME-XML metadata
- OME-Zarr/NGFF: Next-generation file format
- OMERO: Remote server access via Blitz gateway
- CZI: Carl Zeiss Image format
- ND2: Nikon NIS-Elements format
- LIF: Leica Image File format
- DV: DeltaVision format
- BioFormats: 150+ formats via Bio-Formats Java library
Development
Setup Development Environment
# Clone repository
git clone https://github.com/bio-codes/iscc-bio.git
cd iscc-bio
# Install with all dependencies
uv sync --extra all
# Run CLI during development
uv run iscc-bio --help
Development Commands
# Run tests
uv run pytest
This project uses poethepoet for task automation:
# Format markdown files
uv run poe format-md
# Format code files
uv run poe format-code
# Build documentation
uv run poe docs-build
# Run all formatting and docs
uv run poe all
Architecture
Core Modules
-
iscc_bio.api: High-level Python API —biocode()entry point for all sources -
iscc_bio.imagewalk: IMAGEWALK plane traversal implementationsiw_bioio.py: BioIO implementationiw_ngff.py: OME-Zarr/NGFF implementationiw_blitz.py: OMERO Blitz implementationcommon.py: Plane data model and canonical byte conversion
-
iscc_bio.biocode: Biocode (ISCC-SUM) generation from IMAGEWALK plane iterators -
iscc_bio.imagecode: Imagecode generation (ISCC-SUM + ISCC-IMAGE + ISCC-MIXED) -
iscc_bio.views: Intelligent view extraction strategies -
iscc_bio.cli: Command-line interface (thin wrapper around the Python API)
Design Principles
- Lazy Loading: Uses Dask arrays for memory-efficient processing of large images
- Format Agnostic: Identical processing logic across all formats via IMAGEWALK
- Deterministic: Reproducible hashes across platforms and formats
- Modular: Clean separation between traversal, canonicalization, and hashing
Funding
This work was supported through the Open Science Clusters’ Action for Research and Society (OSCARS) European project under grant agreement Nº101129751.
See: BIO-CODES project (Enhancing AI-Readiness of Bioimaging Data with Content-Based Identifiers).
License
Apache License 2.0 - See LICENSE file for details.
Citation
If you use iscc-bio in your research, please cite:
@software{iscc_bio,
title = {bio-codes/iscc-bio: ISCC Processing for Bioimage Data},
author = {Pan, Titusz},
year = 2025,
url = {https://github.com/bio-codes/iscc-bio},
note = {Supported by OSCARS (Open Science Clusters' Action for Research and Society) under European Commission grant agreement Nº101129751},
version = {0.1.0}
}
Related Projects
Metadata
Release files for iscc-bio 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| iscc_bio-0.2.0.tar.gz | 61.2 kB | Without provenance | Details for iscc_bio-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| iscc_bio-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for iscc_bio-0.2.0-py3-none-any.whl |
Total release size: 116.1 kB
Release files / iscc_bio-0.2.0.tar.gz
| Download URL | iscc_bio-0.2.0.tar.gz |
|---|---|
| Size | 61.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
996c952a7c40c2dfd46e8a64beecf5f47360d419153757e71bcbc37ba8bb74ed
|
|
BLAKE2b-256 checksum How to use checksums |
14c41873d6c1e314028cd824b2eeced4782bccc9285ebc8ea7f74a37da39a221
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / iscc_bio-0.2.0-py3-none-any.whl
| Download URL | iscc_bio-0.2.0-py3-none-any.whl |
|---|---|
| Size | 54.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fbccddb3d60ef7c5c9c977639b9d3f403d3aff8b78483601af7a3040e97abc5d
|
|
BLAKE2b-256 checksum How to use checksums |
5b31f05017462f5ff7f1ae03d4d850c1c8d3eb3dcbfece420bf9e702e9deedd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for iscc-bio 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.