You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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