CFT Zarr Custom Codecs
Custom codecs for Zarr v3 optimized for CFT (Cryo-Fluorescence Tomography) data storage.
Codecs
This package provides custom Zarr v3 codecs:
cft_zarr.jpeg_compressor: JPEG compressor for RGB images (BytesBytesCodec - supports incremental updates)cft_zarr.shift12jls_compressor: JPEG-LS compressor for 12-bit fluorescent data (BytesBytesCodec - supports incremental updates)cft_zarr.jpeg: JPEG codec for RGB images (ArrayBytesCodec)cft_zarr.shift12jls: JPEG-LS codec for 12-bit fluorescent data (ArrayBytesCodec)cft_zarr.jls16: JPEG-LS codec for uint16 data without shifting; can also store scaled uint32 stack sumscft_zarr.jpegxl: JPEG XL codec (ArrayBytesCodec)
Installation
pip install cft-zarr
Usage
Reading Zarr Files
Important: You must import cft_zarr before opening Zarr files that use these codecs. This registers the codecs with Zarr.
import cft_zarr # This registers the codecs
import zarr
# Now you can open Zarr files that use custom codecs
arr = zarr.open('rgb.zarr', mode='r')
Using with napari
When opening Zarr files in napari, cft_zarr can be auto-registered via the
napari plugin system (installed in the same environment as napari). If you
still have trouble, import cft_zarr first:
import cft_zarr # Register codecs before opening files
import napari
# Now napari can read Zarr files with custom codecs
viewer = napari.Viewer()
viewer.open('path/to/file.zarr') # Will work with custom codecs
Or in a Python script before launching napari:
import cft_zarr # Must import before opening Zarr files
import napari
viewer = napari.Viewer()
viewer.open('rgb.zarr')
napari.run()
Creating Zarr Arrays with Custom Codecs
import cft_zarr
from cft_zarr import JPEGCompressor, JLS16Codec, Shift12JLSCompressor
import zarr
# Create RGB array with JPEG compression
rgb_array = zarr.create(
shape=(100, 512, 512, 3),
chunks=(4, 512, 512, 3),
dtype='uint8',
compressors=[JPEGCompressor(level=85)]
)
# Create fluorescent array with Shift12JLS compression
fl_array = zarr.create(
shape=(100, 512, 512),
chunks=(4, 512, 512),
dtype='uint16',
compressors=[Shift12JLSCompressor()]
)
# Create a uint16 fluorescent array with direct JPEG-LS compression
jls16_array = zarr.create(
shape=(100, 512, 512),
chunks=(4, 512, 512),
dtype='uint16',
serializer=JLS16Codec(),
compressors=[]
)
# Store 32x 12-bit stack sums as uint32 with scale=2.
# The encoded stream stores round(value / 2) as uint16 JPEG-LS and decodes
# back to value * 2, giving at most +/-1 count error from the scaling step.
stack32_array = zarr.create(
shape=(100, 512, 512),
chunks=(4, 512, 512),
dtype='uint32',
serializer=JLS16Codec(scale=2),
compressors=[]
)
Decode concurrency
The cft_zarr.jpeg and cft_zarr.shift12jls array codecs decode chunks on a
shared worker pool instead of blocking Zarr's IO event loop. The pool starts
threads on demand, with one worker per available logical CPU, shared across RGB
and fluorescence arrays. Python 3.13+ uses the process-aware CPU count; Python
3.11–3.12 uses the system CPU count. If the count is unavailable, the pool uses
one worker. No extra dependency or configuration is required. Codec metadata, pixel values and encoding are
unchanged.
Each worker still decodes a complete physical chunk. Decoded-chunk caching in the viewer remains important for adjacent slices. Cancelling a read can cancel queued work; a native decode already running finishes before its worker is reused. Active native calls cannot be interrupted. The concurrency cap bounds simultaneous decodes, not total dataset or viewer cache memory.
Metadata
Release files for cft-zarr 0.1.2
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 |
|---|---|---|---|---|
| cft_zarr-0.1.2.tar.gz | 34.4 kB | Without provenance | Details for cft_zarr-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cft_zarr-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for cft_zarr-0.1.2-py3-none-any.whl |
Total release size: 78.0 kB
Release files / cft_zarr-0.1.2.tar.gz
| Download URL | cft_zarr-0.1.2.tar.gz |
|---|---|
| Size | 34.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3e366781222ce060f21d2a907c2b872f9b662d11448712407d0469619924d3e2
|
|
BLAKE2b-256 checksum How to use checksums |
5b58cda18ec8b36a9889ea3c5fea8edb6e965f06f3437b2532b5c63185ea0ce6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.14.3 Darwin/27.0.0
|
Release files / cft_zarr-0.1.2-py3-none-any.whl
| Download URL | cft_zarr-0.1.2-py3-none-any.whl |
|---|---|
| Size | 43.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87d762342a4b85f7b04102f5b01059c53237b2fab7b37ee3b7cc27107f8cdfe2
|
|
BLAKE2b-256 checksum How to use checksums |
5a7fc944a21140194eb42d0b945cee9f92179bbb84bb6221aafd2a2b6e8ed6af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.14.3 Darwin/27.0.0
|
Security for cft-zarr 0.1.2
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.