Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 24 additions & 6 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,24 @@ Lightning Pose Homepage

.. image:: images/LightningPose_horizontal_light.png

.. admonition:: 📢 Official Release: Lightning Pose App 2.0

A new modern UI is available for multi-camera single-animal pose estimation,
featuring end-to-end support for labeling, model management, and viewing predictions.

Since the initial release in late Jan 2026. Over 40 researchers from 8 countries have installed and run the app.

* **Get started:**
Check out the :doc:`Create your first project <source/create_first_project>` tutorial and
:doc:`installation guide <source/installation_guide>`.

* **See what's new:**
Check out the `release notes <https://github.com/paninski-lab/lightning-pose-app?tab=readme-ov-file#-release-notes>`_
for the latest updates. New capabilities are released weekly.

* **📣 Join the discord:** Have a question or feature request?
Just want to chat? We'd love to hear from you in the
`Discord channel <https://discord.gg/tDUPdRj4BM>`_!

.. meta::
:description: Accessible documentation for animal pose estimation.
Expand Down Expand Up @@ -175,7 +193,7 @@ It covers the end-to-end workflow of labeling, training, and evaluation.
.. toctree::
:maxdepth: 2
:hidden:
:caption: Getting started
:caption: 🚀 Getting started

source/installation_guide
source/core_concepts
Expand All @@ -186,7 +204,7 @@ It covers the end-to-end workflow of labeling, training, and evaluation.
.. toctree::
:maxdepth: 4
:hidden:
:caption: CLI User guides
:caption: 💻 CLI User guides

source/user_guide_singleview/index
source/user_guide_multiview/index
Expand All @@ -196,21 +214,21 @@ It covers the end-to-end workflow of labeling, training, and evaluation.
.. toctree::
:maxdepth: 2
:hidden:
:caption: Community
:caption: 🧑‍🤝‍🧑 Community

source/migrating_to_app
Discord channel <https://discord.gg/tDUPdRj4BM>
📣 Discord channel 📣 <https://discord.gg/tDUPdRj4BM>
Github Repo <https://github.com/paninski-lab/lightning-pose>
Release notes <https://github.com/paninski-lab/lightning-pose/releases>
App Github Repo <https://github.com/paninski-lab/lightning-pose-app>
App Github Repo 📁 <https://github.com/paninski-lab/lightning-pose-app>
App Release notes <https://github.com/paninski-lab/lightning-pose-app?tab=readme-ov-file#-release-notes>
source/faqs


.. toctree::
:maxdepth: 2
:hidden:
:caption: Reference
:caption: 📖 Reference

source/directory_structure_reference/index
source/api
Expand Down
10 changes: 10 additions & 0 deletions docs/source/directory_structure_reference/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,16 @@ over time.
:depth: 2


v2.0.7.0 | Feb 26, 2026
------------------------------------

* Added ``creation_datetime`` to the model config file, for display in the model list page.
The app backfills the field for existing models on startup.
* Videos must be stored in ``DATA_DIR/videos`` to be viewable in the viewer. Previously the
app supported viewing videos anywhere in the data directory.
* Label files must be stored at the top-level of ``DATA_DIR`` to be accessible in the labeler. Previously the
app supported viewing label files anywhere in the data directory.

v2.0.5.3 | Feb 8, 2026
------------------------------------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,3 +281,12 @@ The following parameters are used for general evaluation.

* ``eval.confidence_thresh_for_vid`` (*float, default: 0.9*): predictions with confidence below this
value will not be plotted in the labeled videos

Additional Metadata
===================

The following parameters are added to the config by lightning pose on model creation:

* ``creation_datetime``: (*string*) An ISO datetime string of the model creation datetime.
* ``model.lightning_pose_version``: (*string*) The lightning-pose package version number that created
this model.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ The detailed documentation for a multiview project data directory.
│ ├── session0_view0.mp4
│ └── session0_view1.mp4
├── CollectedData_view0.csv ...........................[4]
── CollectedData_view1.csv
── CollectedData_view1.csv
├── CollectedData_view0.unlabeled.jsonl ...............[5]
└── CollectedData_view1.unlabeled.jsonl

Expand Down
20 changes: 18 additions & 2 deletions docs/source/installation_guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -81,18 +81,34 @@ Option B: Installation from Source (Development)

Use this if you plan to modify the source code. This requires cloning the repositories for an **editable** install.

If you want to edit the core training/inference logic:

.. code-block:: bash

# Clone the core repo and install
git clone https://github.com/paninski-lab/lightning-pose.git
cd lightning-pose
pip install -e .
pip install -e ".[dev]"
cd ..

If you want to edit the app/UI code:

.. code-block:: bash

# Clone the app repo and install
git clone https://github.com/paninski-lab/lightning-pose-app.git
cd lightning-pose-app
cd lightning-pose-app/app_server
pip install -e .
cd ..

# Install node.js via nvm to be able to compile and run the web UI.
# Follow the directions here: https://github.com/nvm-sh/nvm
# Then:
npm install -g @angular/cli
cd web_ui
npm install
cd ..
honcho -f Procfile.dev

.. note::

Expand Down
6 changes: 4 additions & 2 deletions lightning_pose/train.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Example model training function."""

import contextlib
from datetime import datetime
import json
import math
import os
Expand All @@ -21,7 +22,6 @@
from lightning_pose.api.model_config import ModelConfig
from lightning_pose.utils import pretty_print_cfg, pretty_print_str
from lightning_pose.utils.io import (
find_video_files_for_views,
return_absolute_data_paths,
)
from lightning_pose.utils.scripts import (
Expand Down Expand Up @@ -218,6 +218,7 @@ def _train(cfg: DictConfig, status_file: Path = None) -> Model:

# record lightning-pose version
with open_dict(cfg):
cfg.creation_datetime = datetime.now().isoformat()
cfg.model.lightning_pose_version = lightning_pose.version

print("Config file:")
Expand Down Expand Up @@ -302,7 +303,8 @@ def _train(cfg: DictConfig, status_file: Path = None) -> Model:
# Log hydra config to tensorboard as helpful metadata.
for key, value in cfg.items():
logger.experiment.add_text(
"hydra_config_%s" % key, "```\n%s```" % OmegaConf.to_yaml(value)
"hydra_config_%s" % key,
"```\n%s```" % (value if isinstance(value, str) else OmegaConf.to_yaml(value))
)

# early stopping, learning rate monitoring, model checkpointing, backbone unfreezing
Expand Down
7 changes: 5 additions & 2 deletions lightning_pose/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ def pretty_print_cfg(cfg):
print("--------------------")
print("%s parameters" % key)
print("--------------------")
for k, v in val.items():
print("{}: {}".format(k, v))
if hasattr(val, "items"):
for k, v in val.items():
print("{}: {}".format(k, v))
if isinstance(val, str):
print(val)
print()
print("\n\n")
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"

[project]
name = "lightning-pose"
version = "2.0.6"
version = "2.0.7"
description = "Semi-supervised pose estimation using pytorch lightning"
license = "MIT"
readme = "README.md"
Expand Down