Metadata-Version: 2.4
Name: ethograph
Version: 0.2.14
Summary: A multimodal timeseries GUI for neuroethology
Author-email: Akseli Ilmanen <akseli.ilmanen@gmail.com>
License-Expression: GPL-3.0-or-later
Project-URL: Homepage, https://github.com/Akseli-Ilmanen/ethograph
Project-URL: Bug Tracker, https://github.com/Akseli-Ilmanen/ethograph/issues
Project-URL: Documentation, https://Akseli-Ilmanen.github.io/ethograph
Project-URL: Source Code, https://github.com/Akseli-Ilmanen/ethograph
Project-URL: User Support, https://github.com/Akseli-Ilmanen/ethograph/issues
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering
Classifier: Intended Audience :: Science/Research
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: xarray
Requires-Dist: netcdf4
Requires-Dist: scipy
Requires-Dist: scikit-learn
Requires-Dist: matplotlib
Requires-Dist: pynapple>=0.10
Requires-Dist: pyyaml
Requires-Dist: crowsetta
Requires-Dist: pynwb
Requires-Dist: h5py
Provides-Extra: gui
Requires-Dist: PyQt6; extra == "gui"
Requires-Dist: qtpy; extra == "gui"
Requires-Dist: pyqtgraph; extra == "gui"
Requires-Dist: PyOpenGL; extra == "gui"
Requires-Dist: pygfx>=0.15.3; extra == "gui"
Requires-Dist: pynaviz>=0.1; extra == "gui"
Requires-Dist: rendercanvas; extra == "gui"
Requires-Dist: wgpu; extra == "gui"
Requires-Dist: av>=12; extra == "gui"
Requires-Dist: movement>=0.14; extra == "gui"
Requires-Dist: ruptures; extra == "gui"
Requires-Dist: jinja2; extra == "gui"
Requires-Dist: natsort; extra == "gui"
Requires-Dist: tqdm; extra == "gui"
Requires-Dist: nwb-video-widgets; extra == "gui"
Requires-Dist: phylib>=2.6.4; extra == "gui"
Requires-Dist: neo; extra == "gui"
Requires-Dist: opencv-contrib-python-headless; extra == "gui"
Requires-Dist: pupil-apriltags; extra == "gui"
Provides-Extra: audio
Requires-Dist: audioio; extra == "audio"
Requires-Dist: soundfile; extra == "audio"
Requires-Dist: vocalpy; extra == "audio"
Requires-Dist: sounddevice; extra == "audio"
Requires-Dist: librosa; extra == "audio"
Requires-Dist: tqdm; extra == "audio"
Provides-Extra: dandi
Requires-Dist: dandi; extra == "dandi"
Provides-Extra: proxy
Requires-Dist: imageio-ffmpeg; extra == "proxy"
Provides-Extra: model
Requires-Dist: omegaconf; extra == "model"
Requires-Dist: pillow; extra == "model"
Requires-Dist: tqdm; extra == "model"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pytest-qt; extra == "dev"
Requires-Dist: coverage; extra == "dev"
Requires-Dist: tox; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: setuptools-scm; extra == "dev"
Provides-Extra: docs
Requires-Dist: sphinx; extra == "docs"
Requires-Dist: sphinx-autobuild; extra == "docs"
Requires-Dist: pydata-sphinx-theme; extra == "docs"
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
Requires-Dist: sphinx-sitemap; extra == "docs"
Requires-Dist: sphinx-design; extra == "docs"
Requires-Dist: myst-nb; extra == "docs"
Requires-Dist: linkify-it-py; extra == "docs"
Requires-Dist: setuptools-scm; extra == "docs"
Dynamic: license-file

# ethograph

<p align="center">
  <img src="docs/source/_static/media/demo.gif" alt="EthoGraph demo" width="40.8%">
  <img src="docs/source/_static/media/label_basic_downsampled.gif" alt="Labelling in EthoGraph" width="58.1%">
</p>

EthoGraph is a graphical user interface for visualizing and segmenting
multimodal timeseries behavioural data. It builds upon a number of
[open-source libraries](#support) to load and quickly render video and pose
files, audio and spectrograms, ephys recordings in various formats, and
arbitrary multi-dimensional timeseries — all on one shared timeline.

Note this GUI is still in development. I welcome people testing it and
[providing feedback](https://akseli-ilmanen.github.io/ethograph/community/contributing.html)!

📖 **[Documentation](https://akseli-ilmanen.github.io/ethograph/)**

🎥 **[Watch the demo](https://vimeo.com/1206424641)**

## Quickstart

First install [uv](https://docs.astral.sh/uv/), a fast Python package manager:

```bash
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
winget install astral-sh.uv
```

Then install the GUI as a standalone tool — one command, no environment to
create or activate:

```bash
uv tool install --python 3.12 "ethograph[gui,audio]"
```

To open the GUI, run:

```bash
ethograph launch
```

For installing into a dedicated virtual environment, optional extras, and
troubleshooting, see the
[installation guide](https://akseli-ilmanen.github.io/ethograph/getting_started/installation.html).

After launching, there are some
[example datasets](https://akseli-ilmanen.github.io/ethograph/examples/index.html)
you can explore the GUI with. To learn more about all the functionalities, I
recommend the
[user manual](https://akseli-ilmanen.github.io/ethograph/getting_started/user_manual.html).

## Support

<img src="docs/source/_static/media/opensource.png" alt="Open-source projects EthoGraph depends on" width="60%">

EthoGraph is built on top of a number of open-source projects:
[PyAV](https://pyav.org/docs/stable/),
[audioio](https://github.com/bendalab/audioio),
[Neo](https://neo.readthedocs.io),
[crowsetta](https://github.com/vocalpy/crowsetta),
[Neurodata Without Borders](https://www.nwb.org/),
[xarray](https://docs.xarray.dev/),
[pynapple](https://pynapple.org/index.html),
[movement](https://movement.neuroinformatics.dev/),
[phy](https://github.com/cortex-lab/phy),
[PyQtGraph](https://www.pyqtgraph.org/), and
[pygfx](https://pygfx.org/) (via
[pynaviz](https://github.com/pynapple-org/pynaviz)).
