Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

nd-image-codecs

Composable Zarr v3 codecs for ND scientific images.

nd-image-codecs is not one codec but a builder that assembles a series (pipeline) of Zarr v3 codecs from an array’s axis metadata. It captures correlation along the z, time, and channel axes explicitly — as ordinary, independently specified array-to-array and array-to-bytes codecs — then stores the result with a fast entropy backend, High-Throughput JPEG 2000 (ISO/IEC 15444-15) coefficient planes, or ZFP blocks. It is a Rust core with Python and TypeScript bindings, built for OME-Zarr / OME-NGFF.

The three codec families

Three families trade off ratio, speed, and access pattern:

FamilySeries (pipeline)Built for
nd-deltatranspose → numcodecs.delta → bitshuffle → zstd/lz4Fast lossless storage from existing Zarr codecs only
nd-lift-httranspose → nd_lift → htj2kScalable microscopy & volume visualization (resolution pyramids, thumbnails)
nd-zfptranspose → nd_zfpGPU volume rendering, random access, predictable (fixed-rate) memory

Each family is produced by codec_series, which chooses a transpose order and decorrelation axes from the axis names (t, c, z, y, x, …) and the chunk shape — all overridable.

The IP posture

nd-image-codecs deliberately avoids JPEG 2000 Part 2 (the Multiple Component Transformation, MCT). Cross-axis decorrelation is instead expressed as nd_lift, an explicit, independently specified Zarr array-to-array codec, so the transform runs first and ordinary 2D coding compresses the resulting planes. The htj2k codec emits only conforming JPEG 2000 Part 1 (T.800) and Part 15 / HTJ2K (T.814) syntax, and nd_zfp is a clean-room port of LLNL ZFP. This keeps the whole system clear of Part 2 MCT patent concerns while still capturing the correlation that makes scientific volumes compressible.

Where to go next

SectionWhat you’ll find
ArchitectureThe design: the codec-series builder, the nd_lift transform, the HTJ2K plane codec and block coder, the ZFP port, codestream syntax, and range access
UsageTask-oriented guides for Zarr/OME-Zarr, the ndic CLI, Rust, Python, TypeScript, and thumbnails/streaming
DevelopmentEveryday commands, benchmarking, test data, publishing, commit format, and Rust style
RoadmapThe six implementation phases, in strict order, with acceptance criteria

New to the project? Read the architecture overview for the mental model, then the usage guide matching your ecosystem.