You read the previous post. You are convinced. OME-Zarr is the future, your CZI files are the past, and you would like to get from here to there without a PhD in file format archaeology.
Good news: you don’t need one.
The one tool that handles almost everything
bioformats2raw is a Java command-line tool from Glencoe Software that converts any format supported by Bio-Formats to OME-Zarr. [1] Bio-Formats supports over 160 formats. That means CZI, LIF, ND2, VSI, NDPI, SVS, MRXS, OME-TIFF, plain TIFF, and a hundred and fifty more all go in, and spec-compliant OME-Zarr comes out.
The basic command is two arguments:
bioformats2raw input.czi output.zarr
That is it. The tool reads metadata from the source file, writes the chunked Zarr pyramid, and produces a valid OME-NGFF 0.4 directory. Channel names, physical pixel sizes, Z-step, acquisition metadata: all preserved.
Download: github.com/glencoesoftware/bioformats2raw. Requires Java 11 or later. [1]
Prefer a GUI? NGFF-Converter
Glencoe also ships NGFF-Converter: a desktop application built on the same bioformats2raw engine. Same conversion power, point-and-click interface. Drop files in, choose your output format (OME-Zarr or OME-TIFF), and run. [2]
Version 2.0 (May 2024) was a complete rebuild: modular Jobs/Workflows/Tasks architecture, modernized UI, and direct integration with bioformats2raw. If you’re running conversions for a lab or core facility and don’t want to manage a Java CLI, NGFF-Converter is the practical choice.
Product page: glencoesoftware.com/products/ngff-converter [2] GitHub: github.com/glencoesoftware/NGFF-Converter
bioformats2raw options worth knowing
Downsampling algorithm: By default, bioformats2raw generates a multi-resolution pyramid using simple averaging. You can control the algorithm:
bioformats2raw --downsample-type GAUSSIAN input.czi output.zarr
Options: SIMPLE (default), GAUSSIAN, AREA, LINEAR, CUBIC, LANCZOS. For fluorescence data, GAUSSIAN is usually cleaner. For pathology slides or brightfield, AREA averaging preserves staining better.
Chunk size: The default is 1024x1024 pixels. For streaming and web viewing, 512x512 chunks typically perform better:
bioformats2raw --tile_width 512 --tile_height 512 input.lif output.zarr
Multi-series files: LIF files from Leica commonly contain dozens of acquisitions. To convert only specific series:
bioformats2raw --series 0,1,4 input.lif output.zarr
The Python route
If you’re already in Python and want to write OME-Zarr directly from arrays (NumPy, Dask, simulation output), use the ome-zarr package:
pip install ome-zarr
It’s the reference Python implementation of OME-NGFF: read, write, and validate. Useful for pipelines that generate data programmatically rather than converting existing acquisitions.
For napari users, the napari-ome-zarr plugin reads and writes OME-Zarr directly from napari’s layer system.
Batch conversion for large archives
If you have hundreds of files to convert, BatchConvert from Euro-BioImaging wraps bioformats2raw in a Nextflow pipeline for parallelized batch processing. [3]
github.com/Euro-BioImaging/BatchConvert
Runs locally or on HPC and cloud infrastructure. Useful for core facilities converting legacy archives without converting one file at a time.
What to do with the output
The .zarr directory that bioformats2raw produces is a normal folder: a root directory with JSON metadata files and subdirectories of compressed chunks. You can:
- Keep it local and open it in Find Nuclei Viewer by dragging the folder into the browser. Your data never leaves the machine.
- Put it on S3 (or any S3-compatible store like MinIO) and stream it by URL.
- Serve it with Find Nuclei Data Server: a single Docker container that serves a directory of OME-Zarr files over HTTP, with optional token authentication. One command, your whole converted archive accessible on your network.
The storage post covers what to expect from each option and how to choose.
A note on OME-TIFF
bioformats2raw can also produce OME-TIFF via the companion raw2ometiff tool. Useful if your downstream software doesn’t support Zarr yet. But OME-TIFF is still monolithic: you lose the chunked streaming benefits. Use it as a bridge, not a final destination.
TL;DR
bioformats2raw input.czi output.zarrhandles 160+ formats in one command- NGFF-Converter is the GUI version: same engine, no CLI required
- Python pipeline? Use
ome-zarrto write directly from arrays - Large archive? BatchConvert wraps it all in a parallel Nextflow pipeline
- Put the output behind HTTP and Find Nuclei Viewer streams it from anywhere
References
[1] bioformats2raw. Glencoe Software / OME. https://github.com/glencoesoftware/bioformats2raw
[2] NGFF-Converter. Glencoe Software. https://www.glencoesoftware.com/products/ngff-converter/ — https://github.com/glencoesoftware/NGFF-Converter
[3] BatchConvert. Euro-BioImaging. https://github.com/Euro-BioImaging/BatchConvert