Output File Formats¶
mesoSPIM-control writes acquired image data through a pluggable image writer system. Each acquisition entry in the Acquisition Manager selects its own writer via the file-naming wizard, so a single acquisition list can mix formats across rows if needed.
Tip
Not sure which one to pick?
Tiff_Writer (ImageJ-TIFF) for the broadest compatibility with external viewers and stitchers — the safest default if you’re not sure what your downstream tools support.
MP_OME_Zarr_Writer for new acquisitions on a fast (NVMe/SSD) system — natively saves multi-resolution pyramids with compression, and won’t stall acquisition on disk I/O.
H5_BDV_Writer for the easiest BigStitcher stitching workflow. See the caveats below before relying on it for Imaris.
At a glance¶
Writer |
Extension |
Files per acquisition |
Pyramid |
Compression |
Notes |
|---|---|---|---|---|---|
|
|
One store (per-tile subgroups) |
Yes |
zstd / lz4 |
Writes in a background process; recommended default |
|
|
One store (per-tile subgroups) |
Yes |
zstd / lz4 |
Single-core; same format as above |
|
|
One file (all tiles) |
Not in practice † |
gzip / lzf / none |
Easiest BigStitcher stitching workflow; Imaris-compatible only for a single-tile, uncompressed, pyramid-free dataset |
|
|
One per tile/channel |
No |
No |
ImageJ-compatible; broadest compatibility with external viewers/stitchers |
|
|
One per tile/channel |
No |
No |
Same as TIFF, in the BigTIFF container format |
|
|
One per tile/channel |
No |
No |
Uncompressed uint16 binary dump, no metadata |
† H5_BDV_Writer accepts a pyramid (subsamp) option, but
generating it during acquisition is slow enough (see below) that it’s not
used in practice.
Selecting a writer¶
Pick the writer for each acquisition entry in the file-naming wizard.
The plugins['first_image_writer'] setting in the config file only
controls which writer is pre-selected/listed first there — it does not
restrict which writers are available:
plugins = {
'path_list': ["../src/plugins"],
'first_image_writer': 'OME_Zarr_Writer',
}
See Configuration for the full plugins config reference.
OME-Zarr (OME_Zarr_Writer / MP_OME_Zarr_Writer)¶
Both write the same OME-Zarr format —
one .ome.zarr store per acquisition, with each tile in its own subgroup
— and accept identical configuration. The only difference is how the
writing happens:
``OME_Zarr_Writer`` writes on the main acquisition thread (single-core).
``MP_OME_Zarr_Writer`` offloads writing to a separate background process via a shared-memory ring buffer, so a slow disk can’t stall acquisition. This is the recommended writer for new acquisitions on systems with fast (NVMe/SSD) storage.
Both save multi-resolution pyramids natively, with compression, and can optionally emit an XML file for drag-and-drop stitching in BigStitcher.
OME_Zarr_Writer = {
'ome_version': '0.5', # '0.4' (zarr v2) or '0.5' (zarr v3, sharding supported)
'generate_multiscales': True, # False: only save the original resolution
'compression': 'zstd', # None, 'zstd', 'lz4'
'compression_level': 5, # 1-9
'shards': (64, 6000, 6000), # max shard size (z,y,x); ignored if ome_version == '0.4'
'base_chunks': (64, 256, 256), # starting chunk size (level 0), (z,y,x)
'target_chunks': (64, 64, 64), # chunk size at the highest pyramid level, (z,y,x)
'async_finalize': True, # let the next tile start before this one's pyramid finishes
# BigStitcher-specific
'write_big_stitcher_xml': True, # only takes effect for ome_version == '0.4'
'flip_xyz': (True, True, False), # match BigStitcher coordinates to mesoSPIM axes
'transpose_xy': False, # swap X/Y if tile positions come out wrong
}
MP_OME_Zarr_Writer = {
# ... same keys as above, plus:
'ring_buffer_size': 512, # frames buffered in shared memory; lower (e.g. 16) for demo/simulation mode
'write_cache': None, # optional fast local scratch path, moved to the final folder once a tile finishes
}
Note
The BigStitcher XML export only works with ome_version: '0.4' (zarr
v2). Choosing '0.5' gets you sharding (fewer files on disk) but no
BigStitcher XML.
Important
Bigger chunks/shards generally mean fewer, more efficient files; very small chunks can noticeably slow down writing on some hardware. The defaults above are a reasonable starting point — benchmark on your own hardware before changing them for a real acquisition.
H5_BDV_Writer¶
Writes all tiles of the acquisition into a single .h5 file in
BigDataViewer format, plus a companion
BigDataViewer/BigStitcher XML — the easiest stitching workflow in
BigStitcher of any of the writers here.
H5_BDV_Writer = {
'subsamp': ((1, 1, 1),), # e.g. ((1,1,1), (1,4,4)) for a 2-level (z,y,x) pyramid
'compression': None, # None, 'gzip', 'lzf'
'flip_xyz': (True, True, False), # match BigStitcher coordinates to mesoSPIM axes
'transpose_xy': False, # swap X/Y if tile positions come out wrong
}
Warning
subsamp (multiscale pyramid) is technically available but not used
in practice — generating pyramids and/or compressing on the fly during
acquisition can slow writing down by 5-10×, which most acquisitions
can’t afford. Leave both at their defaults (no subsampling, no
compression) unless you’ve specifically benchmarked otherwise.
Important
Imaris can only open these files if the dataset has a single tile (one position, no mosaic), with no compression and no multiscale pyramid.
Tiff_Writer / Big_Tiff_Writer¶
One plain, uncompressed, ImageJ-compatible TIFF stack per tile, no pyramid.
Tiff_Writer (regular TIFF) and Big_Tiff_Writer (the BigTIFF
container format) are both not limited to 4 GB per file — pick either;
Tiff_Writer’s plain ImageJ-TIFF output has the broadest compatibility
with external viewers and stitchers, and is a safe default if you’re unsure
what your downstream tools support. Filenames from both follow the
BigStitcher auto-loader naming convention, so individual-TIFF acquisitions
can still be imported into BigStitcher.
RAW_Writer¶
The simplest possible option: a single uncompressed uint16 binary file
per tile (no header, no metadata), written via a direct memory-mapped array.
Useful for custom downstream pipelines that read raw binary directly, or as
a baseline for debugging I/O performance issues in the other writers.
Writer capabilities¶
Writer |
Chunking |
Compression |
Multiscale |
Overwrite existing |
dtypes |
|---|---|---|---|---|---|
|
Yes |
Yes |
Yes |
No |
uint16 |
|
Yes |
Yes |
Yes |
No |
uint16 |
|
No |
No * |
No * |
No |
uint8, uint16, float32 |
|
No |
No |
No |
No |
uint8, uint16, float32 |
|
No |
No |
No |
No |
uint8, uint16, float32 |
|
No |
No |
No |
No |
uint16 |
* H5_BDV_Writer declares supports_compression=False and
supports_multiscale=False in its plugin capabilities, but its
compression and subsamp config keys (above) do work at runtime — a
known inconsistency between the declared capability flags and actual
behavior, not a documentation error.
For the plugin architecture itself (writing a new writer, the
ImageWriter interface, discovery rules), see Plugin System.