Skip to content

v0.1.7

Latest

Choose a tag to compare

@h-mayorquin h-mayorquin released this 14 Apr 23:12
· 1 commit to main since this release

v0.1.7 (2026-04-14)

Removals, Deprecations and changes

  • DANDI widgets no longer load NWB files in Python for video metadata. Video metadata (URLs and session-time ranges) is now fetched in JavaScript via LINDI and the DANDI REST API, with a Python fallback using targeted h5py reads when LINDI is unavailable. The nwbfile parameter on NWBDANDIVideoPlayer and the video_nwbfile parameter on NWBDANDIPoseEstimationWidget are deprecated and no longer have any effect. They will be removed in v0.1.8. PR #35
  • Removed private helpers _get_video_urls_from_dandi and _get_dandi_video_info from _utils.py. PR #35
  • Unified internal traitlet interface across all widget types. Local and DANDI widgets now use the same internal traitlets for video URLs and timing. PR #35

Bug Fixes

  • Fixed LINDI ref parsing in JS resolveVideoInfo() so DANDI widgets discover video URLs when a LINDI file is available. LINDI version 12 stores .zattrs and .zarray as inline JSON objects, but the parser only handled JSON-encoded strings. Sessions with LINDI files always showed an empty Video Selection dropdown. PR #42
  • Fixed LINDI inline data decoding failing on blosc-compressed chunks. LINDI stores inline base64 refs with a 16-byte blosc header that lindiRefToString and lindiRefToBytes did not strip, causing readLindiJson2String to fail on external_file paths (e.g. dandiset 000409 IBL sessions, dandiset 001425). PR #43
  • Fixed crash when NWB files contain PoseEstimation containers with the same name in different processing modules (e.g. dandiset 001425). Duplicate names are now disambiguated with a module/name prefix. PR #40
  • discover_video_series() now searches all NWB objects instead of only acquisition, so ImageSeries stored in processing modules or other containers are discovered. Duplicate names are disambiguated with the same parent/name pattern. PR #40
  • Fixed get_dandi_video_info() returning empty results for NWB files created on Windows. The external_file paths in these files use backslashes (e.g. dandiset 001771), which failed to match DANDI's forward-slash asset paths. PR #38

Features

  • Added get_dandi_video_info(asset) public function that returns video URLs and session-time ranges for a DANDI NWB asset. No widget or display required. PR #36
  • Added from_url() classmethod to NWBDANDIVideoPlayer and NWBDANDIPoseEstimationWidget for creating widgets from a DANDI URL string. Also added url parameter to get_dandi_video_info(). PR #39

Improvements

  • DANDI pose widget now loads keypoint coordinates and timestamps directly from S3 via LINDI byte-range requests in JavaScript, bypassing the Python-to-browser JSON serialization path. For large recordings this eliminates ~50 MB of websocket transfer per camera switch. Falls back to the Python path when LINDI data is compressed or unavailable.
  • Removed unused get_camera_to_video_mapping() from _utils.py and empty _on_camera_to_video_changed() observer from LocalPoseWidget. PR #41