Skip to main content

bioio-vsi

A small, JVM-free reader for Olympus/Evident cellSens VSI microscopy images (a .vsi metadata file plus sibling .ets pixel files).

The format has no public specification (the vendor's exists but is not distributed). This reader is reverse engineered from sample files, with the tree layout taken from slideio's BSD-3 VSI driver (src/slideio/drivers/vsi) and checked against those files, and with Bio-Formats and slideio output as test oracles. It reads what it has seen and refuses the rest; docs/format.md records what is known and how each fact was established.

Install

pip install bioio-vsi
pip install "bioio-vsi[codecs]"   # JPEG 2000 tiles (imagecodecs)

# bioio plugin (registers on ``bioio.readers``)
pip install bioio bioio-vsi
pip install "bioio-vsi[codecs]"   # if your files use JPEG 2000

Developers use uv; see AGENTS.md.

Supported and refused

Reads single-image cellSens files: uint8/uint16, raw or JPEG 2000 tiles, optional pyramids, any declared order of time, z, and channel.

Refuses (with a named error): missing pixel file, multiple images per .vsi, unsupported compression or pixel type, size mismatches, incomplete tile grids, lambda/phase dimensions, truncated metadata fields, and unknown metadata units.

Why each of these is refused, and how values such as z spacing and channel names are reported, is in docs/design.md.

Usage

Standalone API:

from bioio_vsi import open_vsi, open_ets, describe

img = open_vsi("path/to/file.vsi")
plane = img.read_plane(t=0, c=0, z=0)

orphan = open_ets("path/to/frame_t_0.ets")  # geometry only, no axis names
print(describe("path/to/file.vsi"))

Through bioio:

from bioio import BioImage

image = BioImage("path/to/file.vsi")
stack = image.get_image_dask_data("TCZYX")  # dimension order TCZYX
plane = stack[0, 0, 0].compute()
print(image.physical_pixel_sizes, image.channel_names)

Z planes are in acquisition order, and in many cellSens stacks z decreases with plane index. bioio reports the z spacing as a positive distance; the signed step and each plane's position are in open_vsi(...).z_step_um and plane_z_positions_um. Channel names are the per-channel names cellSens stores (usually the dye), which can differ from the names Bio-Formats and slideio report.

python -m bioio_vsi describe path/to/file.vsi   # what the reader sees in a file

Reporting a file that fails to open

Open an issue with the output of

python -m bioio_vsi describe --redact path/to/file.vsi

which leaves out paths, file names and image or channel names (also in error lines).

If that is not enough and the acquisition cannot be shared, you can send a structure fixture instead. It keeps the .ets headers, tile table and the layout of the metadata, and removes pixels, text, dates and previews; measured values such as pixel size, positions and times are replaced by synthetic ones:

python -m bioio_vsi anonymize path/to/your.vsi /tmp/fixture-out

Upload the resulting anon.vsi and _anon_/stack*/ .skel files (not your original .vsi tree). Maintainers can turn the fixture back into a viewable file locally with python -m bioio_vsi materialize FIXTURE OUTDIR. See docs/design.md for what is kept and stripped.

Sample files wanted

The reader only knows the files it has seen. Files under a licence that allows redistribution help most, especially older cellSens versions, slide scanners (VS120, VS200), stitched scans and long time series; see the issue tracker.

Metadata

Release files for bioio-vsi 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bioio-vsi 0.1.0
File Size Uploaded
bioio_vsi-0.1.0.tar.gz 715.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bioio-vsi 0.1.0
File Interpreter ABI Platform
bioio_vsi-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 775.1 kB

Release files / bioio_vsi-0.1.0.tar.gz

Download URL bioio_vsi-0.1.0.tar.gz
Size 715.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b458c953b8e771b39eeb1ea378c13cc2f72bbd5516fbf142f0cc3a8548df04cf
BLAKE2b-256 checksum
How to use checksums
2ca54e158fac90aad4fb1e9dbcc43544e25fd2f6475bf0540467e4071b864fc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / bioio_vsi-0.1.0-py3-none-any.whl

Download URL bioio_vsi-0.1.0-py3-none-any.whl
Size 59.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
24e0bd67972cdaae0fe3b862d2a0f0012fcbf0db7de94af5012d74191ac34bfe
BLAKE2b-256 checksum
How to use checksums
86a1f29431dfcdfea233978d9f9a34a18343d4ca737070ac6b811135e50b6d7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page