To update movement to the latest version, see the update guide.
What's Changed
⚡️ Highlight: unified data loading interface
Thanks to @lochhh's tireless efforts, loading poses and bounding boxes is now handled by a single entry point, movement.io.load_dataset.
The new load_dataset function works for all our supported third-party formats. For example:
from movement.io import load_dataset
# DeepLabCut -> poses dataset
ds = load_dataset("path/to/file.h5", source_software="DeepLabCut", fps=30)
# SLEAP -> poses dataset
ds = load_dataset("path/to/file.slp", source_software="SLEAP")
# NWB -> poses dataset
ds = load_dataset("path/to/file.nwb", source_software="NWB")
# VGG Image Annotator tracks -> bounding boxes dataset
ds = load_dataset("path/to/file.csv", source_software="VIA-tracks")Similarly, movement.io.load_multiview_dataset replaces the old movement.io.load_poses.from_multiview_files, with added support for bounding boxes:
from movement.io import load_multiview_dataset
# Load LightningPose pose predictions from two cameras.
ds = load_multiview_dataset(
{"cam1": "path/to/cam1.csv", "cam2": "path/to/cam2.csv"},
source_software="LightningPose",
fps=30,
)Software-specific loaders (e.g. load_poses.from_dlc_file, load_bboxes.from_via_tracks_file) remain available for users who want full control over the loading process.
Warning
The following functions are deprecated and will be removed in a future release:
load_poses.from_file→ useload_datasetinsteadload_bboxes.from_file→ useload_datasetinsteadload_poses.from_multiview_files→ useload_multiview_datasetinstead
Migrating from deprecated functions:
# Before
from movement.io import load_poses, load_bboxes
ds = load_poses.from_file("file.h5", source_software="DeepLabCut", fps=30)
ds = load_bboxes.from_file("file.csv", source_software="VIA-tracks", fps=30)
ds = load_poses.from_multiview_files(
{"cam1": "cam1.csv", "cam2": "cam2.csv"},
source_software="LightningPose", fps=30,
)
# After
from movement.io import load_dataset, load_multiview_dataset
ds = load_dataset("file.h5", source_software="DeepLabCut", fps=30)
ds = load_dataset("file.csv", source_software="VIA-tracks", fps=30)
ds = load_multiview_dataset(
{"cam1": "cam1.csv", "cam2": "cam2.csv"},
source_software="LightningPose", fps=30,
)🐛 Bug fixes
- Adapt
savgol_filterfor compatibility with Scipy >= 1.17 by @niksirbi in #761 - Fix coordinate assignment for
elem2in_cdistby @HARSHDIPSAHA in #776 - Hide _factorized properties from Points layer tooltips by @niksirbi in #781
🤝 Improving the contributor experience
- Docs: restructure contributing guide and add community cards by @ishan372or in #764
- Add preliminary benchmarks by @sfmig in #772
- Use
tox-uvin test action by @niksirbi in #766 - Move docs dependencies to pyproject.toml by @AlgoFoe in #774
📚 Documentation
- Fix docstring Raises formatting in LineOfInterest.normal by @AlgoFoe in #771
- Added link to FOSDEM 2026 talk by @niksirbi in #797
- Fix broken 404 page by @AlgoFoe in #785
- Fix links to SLEAP analysis h5 docs by @niksirbi in #807
- Add code snippets for verifying sample data loading by @Edu92337 in #759
🧹 Housekeeping
- Restrict sphinx version to < 9 by @niksirbi in #768
- Unpin sphinx and pin ablog>=0.11.13 by @niksirbi in #811
- Fix deprecated license syntax by @sfmig in #549
- Ignore Docutils URL in linkcheck by @lochhh in #793
- Ignore ISO URL in linkcheck by @lochhh in #815
- Authenticate with GitHub token during linkcheck by @niksirbi in #800
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #795
- Contributors-Readme-Action: Update contributors list by @github-actions[bot] in #787
- Bump conda-incubator/setup-miniconda from 3.2.0 to 3.3.0 by @dependabot[bot] in #788
New Contributors
- @AlgoFoe made their first contribution in #771
- @HARSHDIPSAHA made their first contribution in #776
- @ishan372or made their first contribution in #764
- @Edu92337 made their first contribution in #759
Full Changelog: v0.13.0...v0.14.0