Anipose: 3D Animal Pose Estimation Wrapped Around DeepLabCut
🐜🐀🐒🚶 A toolkit for robust markerless 3D pose estimation
At a glance
- What is it?
- Anipose is a Python toolkit that takes 2D keypoints from DeepLabCut, calibrates multiple camera views, and triangulates them into 3D pose. It is aimed at labs that already run DeepLabCut and need a third dimension without training a new model.
- Who is it for?
- Anipose fits labs that already have DeepLabCut working on two or more calibrated cameras and want 3D coordinates without building a new detector. It is the wrong tool if you have a single camera, no checkerboard calibration session, or no DeepLabCut model, because Anipose supplies no 2D detector of its own.
- Can I use it commercially?
- Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 105 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap Anipose fills between DeepLabCut and 3D coordinates
DeepLabCut estimates the 2D pixel location of user-defined body parts in a single camera view. That is enough for many behavioral questions, but it cannot tell you how far a paw is from the body, or whether a limb is moving toward or away from the camera. Recovering depth normally means either training a 3D-aware model or writing your own multi-view triangulation pipeline, including camera calibration, synchronization, and outlier rejection. Anipose is the second option, packaged. Its README describes it as a toolkit for markerless 3D pose estimation of animal behavior from multiple camera views that uses DeepLabCut to track keypoints in 2D, then triangulates across camera views. The intended user is a lab that already has a working DeepLabCut model and a multi-camera rig, and wants to add a third dimension without retraining. The name is a contraction of Animal Pose, and the README notes it also sounds like any pose. The repository lists topics including deeplabcut, calibration, 2d-tracking, and 3d-tracking, which maps closely to the pipeline stages.
How triangulation works in the Anipose pipeline
The architecture is a chain, and each link depends on the previous one. First, DeepLabCut produces 2D keypoint coordinates and confidence scores for each camera view. Anipose then needs the geometric relationship between cameras, which comes from a calibration step: a video of a fiducial marker board is recorded, and the marker corners are detected to estimate camera intrinsics and extrinsics. The README cites Romero-Ramirez et al, 2018, Speeded up detection of squared fiducial markers, which points to the ArUco family of markers as the calibration target. With 2D points and camera parameters in hand, Anipose triangulates the same keypoint across views into a 3D point per frame. The word robust in the project description is doing real work here: triangulation across views gives redundant constraints, so a keypoint that DeepLabCut misplaces in one camera can be outvoted or filtered by the others. That is the core value proposition. The output is a 3D coordinate per body part per frame, which downstream analysis can treat as a skeleton in metric or arbitrary units depending on calibration. Anipose does not train a network, does not track identity across frames in a learned way, and does not replace DeepLabCut. It is a geometry layer on top of a learned 2D detector.
Installation and the commands you actually type
Anipose is distributed on PyPI, and the README carries a PyPI version badge, so the documented install path is pip. The package name is anipose. Because it depends on DeepLabCut, which in turn depends on TensorFlow, the practical install order is DeepLabCut first, then Anipose, in the same environment. The README does not spell out a pinned dependency set in the excerpt available here, so treat version compatibility as something to confirm against the documentation at anipose.org rather than assume. The workflow, based on the pipeline described in the README, runs in stages: a calibration step that processes a video of the marker board, a 2D tracking step that runs your DeepLabCut model over each camera's video, and a triangulation step that combines them. Anipose is driven by a project configuration file, and the documentation site is the reference for the exact keys. The repository is written primarily in JavaScript according to the language metadata, which is worth flagging: the analysis code users interact with is Python, and the JavaScript portion relates to the browser-based visualization side of the project. If you are evaluating the codebase for contribution, do not assume the primary language label describes the pipeline you will be running.
Where Anipose breaks down
The dependency on DeepLabCut is the largest constraint, and it cuts both ways. If your 2D detector is wrong in a consistent, correlated way across cameras, triangulation has nothing to correct against. Two cameras that both place a wrist at the wrong pixel will agree on the wrong 3D point. Redundancy only helps when errors are independent. A second limitation is calibration. Triangulation quality is bounded by the accuracy of the camera parameters, and those come from a physical procedure: printing a marker board, recording it across the working volume, and hoping the detector finds the markers in enough frames. Labs that skip or rush this step will get 3D output that looks plausible and is metrically wrong. Third, the release history is thin. The most recent release listed is v0.9.0, labeled a draft release for the Anipose paper, dated August 2021. The last repository push is much more recent, so development continues on master, but there is no stable tagged release after v0.9.0 in the material provided. Anyone who needs a pinned, versioned dependency for a long-running study should check what master currently contains and whether it is installable, because the tagged releases do not reflect it. Finally, Anipose assumes synchronized cameras. The README does not describe a synchronization mechanism in the excerpt available, so if your rig free-runs cameras, frame alignment is your problem to solve.
Anipose versus DeepLabCut's own 3D mode and other routes
DeepLabCut itself supports multi-animal and multi-view workflows, and a lab already committed to DeepLabCut may reasonably ask why it needs a second package. The difference is in where the 3D logic lives. Anipose keeps the learned part and the geometric part separate: DeepLabCut stays a 2D detector, and Anipose owns calibration, triangulation, and filtering as an explicit, inspectable pipeline. That separation is useful when you want to swap detectors, debug a single stage, or apply the same triangulation to keypoints from a different source. It is less useful if you want one tool with one configuration format and one support channel. A different class of alternative is end-to-end 3D pose estimation, where a network is trained on multi-view data and predicts 3D directly. That approach can learn view-dependent cues and handle occlusion patterns that triangulation cannot, but it requires 3D ground truth or a large synchronized dataset, and retraining when the behavior or the rig changes. Anipose needs no 3D labels at all, which is its main practical advantage for a lab starting from scratch. The trade is that Anipose cannot recover a keypoint that no camera sees clearly, while a learned 3D model might infer it from context.
Maintenance, licensing, and what the BSD-2-Clause means here
Anipose is BSD-2-Clause licensed, a permissive license that allows use, modification, and redistribution with the copyright notice and disclaimer retained. For an academic lab, that is about as unobtrusive as it gets: no copyleft obligation on your analysis scripts, no requirement to publish modifications. It also means there is no warranty, which matters for a research tool where a silent triangulation error can propagate into a published result. Note that the license covers Anipose itself, not DeepLabCut or any other dependency, and those carry their own terms that you should check separately. This is not legal advice. On maintenance cost, the picture from the repository metadata is a project with a 2021 paper release and continued commits on master. That pattern is common in academic software: the maintainers are researchers, and the release cadence follows paper deadlines and grant cycles rather than a support contract. Budget for the possibility that you will need to read the source when something breaks, and pin your environment, because a DeepLabCut or TensorFlow upgrade can break the chain at the 2D stage before Anipose is even involved.
Who should adopt Anipose and what to check first
Adopt it if you have a multi-camera rig, a trained DeepLabCut model, and a behavioral question that genuinely needs depth. The pipeline is conceptually clean, the calibration and triangulation stages are the parts you would otherwise write yourself, and the BSD-2-Clause license imposes nothing on your downstream code. Do not adopt it if you have one camera, if you have no way to record a marker board across your working volume, or if your cameras are not synchronized and you are not prepared to fix that. Do not adopt it expecting it to replace DeepLabCut. Before committing, verify three things in this order. First, confirm that the current master branch installs against your DeepLabCut version, since the newest tagged release is v0.9.0 from 2021. Second, run a calibration recording and check the reprojection error, because that number bounds everything downstream. Third, triangulate a short clip of a known object and measure it, so you know whether your 3D output is in the units you think it is.
Editorial conclusion
Anipose fits labs that already have DeepLabCut working on two or more calibrated cameras and want 3D coordinates without building a new detector. It is the wrong tool if you have a single camera, no checkerboard calibration session, or no DeepLabCut model, because Anipose supplies no 2D detector of its own. Before adopting it, verify that your camera rig is synchronized, that you can produce a calibration video with a detectable fiducial marker, and that the v0.9.0 release, dated 2021, still installs cleanly against your current DeepLabCut and TensorFlow versions.
Community notes