Skip to content

v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 31 Oct 15:29
10afa20

0.2.0 (2026-10-31)

⚠ BREAKING CHANGES

  • zarr: archives name numcodecs.zlib for zlib streams and refkv.tiff_lzw for QPTIFF LZW tiles; refkv no longer registers zlib, imagecodecs_lzw, imagecodecs_jpeg, imagecodecs_jpeg2k or imagecodecs_jpegxr (the last three come from imagecodecs-zarr, in the images extra).
  • say zarrify for virtualize, in the code, the CLI, the spec and the docs (#112)
  • mp4: cut video chunks at keyframes and decode a chunk's planes once, as a stream (#107)
  • ir: add the refkv.stream codec, port MP3 onto it, and virtualize MP4 files as the MP4 profile (§18) (#99)
  • reader: read http(s) archives with refkv's own HTTP client, and make obstore an extra (#72)
  • python: make python/ a self-contained package versioned from git tags (#71)

Features

  • cli: add vzip convert, a Rust port of the converter that writes identical archives (#78) (a6fb670)
  • demo: add a QuickTime .mov from DANDI 001538 to the MP4 examples (#154) (3fabeb2)
  • demo: add examples of LIF, QPTIFF, HDF5, NumPy, MP3 and FLAC files (#160) (099d5b2)
  • demo: add NOAA HRRR and GFS forecasts as GRIB examples (#170) (4b3d193)
  • demo: link a hosted .vzip archive as a plain vzip: Neuroglancer source (#126) (1f5ffbc)
  • demo: make a DANDI behavior video the MP4 example (#152) (2fa1ea1)
  • demo: show a Python script that builds the same Zarr hierarchy (#169) (cbe7ad0)
  • demo: show an MP4 file's video in Neuroglancer, with a SLEAP example (#108) (463c316)
  • dicom: zarrify JPEG Lossless frames as imagecodecs_ljpeg chunks (#163) (97c4ef0)
  • flac: zarrify FLAC files as virtual shards of frames, with a shared shard pass (#121) (df14a47)
  • grib: zarrify GRIB2 files, each message a chunk decoded by refkv.grib (#166) (0dd9063)
  • hdf5: zarrify HDF5 files, NWB first among them, in hdmf-zarr's Zarr v3 form (#143) (8a56953)
  • ir: add the refkv.stream codec, port MP3 onto it, and virtualize MP4 files as the MP4 profile (§18) (#99) (8f79104)
  • ir: virtualize MP3 files through the Rust IR, as the MP3 profile (§16) (#91) (0b127f3)
  • ir: virtualize MRC2014 files through the Rust IR, as the MRC profile (revision 28) (#83) (5b43073)
  • ir: virtualize Olympus VSI slides through the Rust IR, as the VSI profile (revision 29) (#87) (8ab760f)
  • js: build refkv_embed.js, the virtualizer and FITS tile decoder for a host that reads the input itself (#109) (62af0f1)
  • lif: zarrify Leica LIF files, as the LIF profile (#118) (4a14bec)
  • mp4: cut video chunks at keyframes and decode a chunk's planes once, as a stream (#107) (fd78ebe)
  • mp4: zarrify H.264 tracks whose pictures are presented before their sync sample (#110) (8fec438)
  • mp4: zarrify HEVC video tracks, 8- and 10-bit 4:2:0 (#151) (99eda76)
  • ndpi: zarrify JPEG XR levels, with the pixels their streams hold (#125) (3e3cdc1)
  • npy: present the deflated members of .npz archives, as np.savez_compressed writes them (#158) (9d409d9)
  • npy: zarrify NumPy .npy files and the stored arrays of .npz archives (#156) (2780e2e)
  • nrrd: zarrify NRRD files, attached or detached, raw or gzip, as the NRRD profile (#119) (465d575)
  • phkv: add the perfect-hash binding (Part 3, draft), standalone and hybrid with vzip (#79) (6e7776e)
  • python: build free-threaded wheels for CPython 3.14t and 3.15t (#174) (1f5b7d1)
  • reader: read http(s) archives with refkv's own HTTP client, and make obstore an extra (#72) (a165682)
  • tiff: zarrify images in strips and LZW, as the QPTIFF profile does (#137) (3b4cbd8)
  • tiff: zarrify images with a horizontal predictor through imagecodecs_delta (#139) (242ae27)
  • types: type-check the repository with pyrefly's strict preset (#116) (eefa6bd)
  • virtualize: add an omero block to TIFF and NDPI images, with channel labels and colors (#95) (7d051e3)
  • virtualize: add the QPTIFF profile, with LZW tiles and strips (#84) (850969d)
  • virtualize: sample the omero windows of TIFF and QPTIFF images from the coarsest level (#98) (01c4200)
  • vsi: zarrify lossless JPEG tiles, and ETS headers that list no dimension sizes (#162) (52304c5)
  • zarr: expose refkv's codecs to zarr through entry points, and rename the clashing ones (#136) (1bdab30)
  • zarrify: add zarrify_async and zarrify_store_async, which keep the event loop free (#175) (ca01733)
  • zarrify: name an input's profile with a source or store class, and choose its layouts (#114) (db24287)
  • zarrify: pad NIfTI, MRC and FITS edge chunks with one shared zero data source (#120) (b5f0eda)

Bug fixes

  • demo: make two-finger scroll step along the data's first non-x/y axis (#168) (2ff14a3)
  • demo: point the N5 example at an OpenOrganelle store that still exists (#129) (5aeb5a3)
  • js: say that a failed fetch in a browser may be a server that does not allow cross-origin reads (#111) (4bf3955)
  • mp4: read a version 0 ctts box's offsets as signed (#153) (7ad0409)
  • mp4: reject an avcC SPS whose RBSP is too short for its profile and level (#133) (7d13d85)
  • mp4: reject an ftyp box too short for its fields instead of panicking (#132) (513f947)
  • ndpi: give a strip's frame header its level's size when the two differ (#101) (4a7b754)
  • ndpi: read ASCII values out of line, and add no McuStartsHighBytes to an in-line McuStarts (#130) (2aa5b20)
  • nightly: report inputs their server did not serve as unavailable, and compare mutants as their fixtures (#159) (7a7e572)
  • reader: send a User-Agent with every range request (#92) (dc35c76)
  • sections: leave CHANGELOG.md's section references as release-please writes them (#173) (af8f923)
  • uri: percent-encode a local path when it names a source (#124) (a944426), closes #122
  • uri: support Windows paths in file: URIs, and run CI on Linux, macOS and Windows (#70) (8ba6323)
  • vsi: probe a stack's frame_t_0.ets only when its frame_t.ets is absent (#161) (6f33355)
  • zarr: decode zarrified HDF5 files' float attributes, so NWBZarrIO reads a rate of NaN (#149) (782ec27)

Documentation

  • add a guide and a project skill for adding a file format (#155) (276ebad)
  • demo: move the demo site to d-v-b.github.io/refkv-demo (#164) (89beb0f)
  • design: center PITCH.md on refkv as the model and vzip as its ZIP binding (#76) (994a08d)
  • design: drop the process history from COMPARISON.md and PITCH.md (#75) (0f7b66d)
  • design: frame vzip as an experiment and point readers to Icechunk and kerchunk (#74) (de1e1c5)
  • design: measure third-party readers against the Rust parsers, and keep the parsers (#135) (65b5131)
  • design: plan the FITS profile, a single-file virtualizer with a tile codec (#88) (5b56a47)
  • give each format a runnable example that zarrifies public data and plots it (#113) (94e473f)
  • readme: present refkv as the model and vzip as its ZIP binding (#77) (c00546b)
  • spec: state the format documents' shared paragraphs once, and check every CMO copy (#104) (44054be)
  • spec: tabulate every zarrification profile and reconcile the specs with refkv (#131) (209b0ef)

Refactoring

  • say zarrify for virtualize, in the code, the CLI, the spec and the docs (#112) (adb44e9)

Build

  • python: make python/ a self-contained package versioned from git tags (#71) (1d02f13)