senselab


Namesenselab JSON
Version 0.43.0 PyPI version JSON
download
home_pageNone
Summarysenselab is a Python package that simplifies building pipelines for speech and voice analysis.
upload_time2025-09-16 00:24:49
maintainerFabio Catania
docs_urlNone
authorFabio Catania
requires_python<3.13,>=3.11
license# LICENSE This project is licensed under the **Apache License, Version 2.0**. Some **optional** components depend on third-party packages that are licensed under terms other than Apache-2.0. If you install, enable, or distribute the project together with those optional components, your use and distribution of the combined work must also comply with the license obligations of those third-party components. See the **Third-party licenses** section below for details and references. ## Third-party licenses | Dependency | License | | -------------------------- | ------------------------------------------------------------------------------------------- | | accelerate | [Apache-2.0](https://github.com/huggingface/accelerate/blob/main/LICENSE) | | audiomentations | [MIT](https://github.com/iver56/audiomentations/blob/master/LICENSE) | | av | [BSD-3-Clause](https://github.com/PyAV-Org/PyAV/blob/main/LICENSE.txt) | | coqui-tts | [MPL-2.0](https://github.com/idiap/coqui-ai-TTS/blob/dev/LICENSE.txt) | | datasets | [Apache-2.0](https://github.com/huggingface/datasets/blob/main/LICENSE) | | huggingface-hub | [Apache-2.0](https://github.com/huggingface/huggingface_hub/blob/main/LICENSE) | | ipykernel | [BSD-3-Clause](https://github.com/ipython/ipykernel/blob/main/LICENSE) | | ipywidgets | [BSD-3-Clause](https://github.com/jupyter-widgets/ipywidgets/blob/main/LICENSE) | | iso639 | [MIT](https://github.com/janpipek/iso639-python/blob/master/LICENSE) | | jiwer | [Apache-2.0](https://github.com/jitsi/jiwer/blob/master/LICENSE) | | matplotlib | [CUSTOM](https://github.com/matplotlib/matplotlib/blob/main/LICENSE) | | mediapipe | [Apache-2.0](https://github.com/google-ai-edge/mediapipe/blob/master/LICENSE) | | nbformat | [BSD-3-Clause](https://github.com/jupyter/nbformat/blob/main/LICENSE) | | nbss-upload | [BSD-3-Clause](https://github.com/notebook-sharing-space/nbss-upload/blob/main/LICENSE) | | nemo-toolkit | [Apache-2.0](https://github.com/NVIDIA/NeMo/blob/main/LICENSE) | | nest-asyncio | [BSD-2-Clause](https://github.com/erdewit/nest_asyncio/blob/master/LICENSE) | | nltk | [Apache-2.0](https://github.com/nltk/nltk/blob/develop/LICENSE.txt) | | notebook-intelligence | [GPL-3.0](https://github.com/notebook-intelligence/notebook-intelligence/blob/main/LICENSE) | | opencv-python-headless | [MIT](https://github.com/opencv/opencv-python/blob/4.x/LICENSE.txt) | | opensmile | [CUSTOM](https://github.com/audeering/opensmile/blob/master/LICENSE) | | praat-parselmouth | [GPL-3.0](https://github.com/YannickJadoul/Parselmouth/blob/master/LICENSE) | | pyannote-audio | [MIT](https://github.com/pyannote/pyannote-audio/blob/develop/LICENSE) | | pycountry | [LGPL-2.1](https://github.com/pycountry/pycountry/blob/main/LICENSE.txt) | | pydantic | [MIT](https://github.com/pydantic/pydantic/blob/main/LICENSE) | | pydra | [Apache-2.0](https://github.com/nipype/pydra/blob/master/LICENSE) | | pylangacq | [MIT](https://github.com/jacksonllee/pylangacq/blob/main/LICENSE.txt) | | python-ffmpeg | [CUSTOM](https://github.com/jonghwanhyeon/python-ffmpeg/blob/main/LICENSE) | | scikit-learn | [BSD-3-Clause](https://github.com/scikit-learn/scikit-learn/blob/main/COPYING) | | sentence-transformers | [Apache-2.0](https://github.com/UKPLab/sentence-transformers/blob/master/LICENSE) | | speech-articulatory-coding | Not defined | | speechbrain | [Apache-2.0](https://github.com/speechbrain/speechbrain/blob/develop/LICENSE) | | torch | [CUSTOM](https://github.com/pytorch/pytorch/blob/main/LICENSE) | | torch-audiomentations | [MIT](https://github.com/asteroid-team/torch-audiomentations/blob/master/LICENSE) | | torchaudio | [BSD-2-Clause](https://github.com/pytorch/audio/blob/main/LICENSE) | | torchvision | [BSD-3-Clause](https://github.com/pytorch/vision/blob/main/LICENSE) | | transformers | [Apache-2.0](https://github.com/huggingface/transformers/blob/main/LICENSE) | | types-requests | [Apache-2.0](https://github.com/python/typeshed/blob/main/LICENSE) | | ultralytics | [AGPL-3.0](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) | | umap-learn | [BSD-3-Clause](https://github.com/lmcinnes/umap/blob/master/LICENSE.txt) | | vocos | [MIT](https://github.com/gemelo-ai/vocos/blob/main/LICENSE) | For clarity: * The **core** of this project is licensed under **Apache-2.0**. * **Optional** functionality depending on: - **`notebook-intelligence`** (GPL-3.0) and **`praat-parselmouth`** (GPL-3.0) → Using or distributing the project together with these components subjects the combined distribution to GPL-3.0 obligations. - **`ultralytics`** (AGPL-3.0) → Using or distributing the project together with this component subjects the combined distribution to AGPL-3.0 obligations. - **`pycountry`** (LGPL-2.1) → The project may depend dynamically on this component while remaining Apache-2.0; however, modifications or static incorporation are subject to LGPL-2.1 obligations. - **`coqui-tts`** (MPL-2.0) → Modifications to MPL-licensed files must be released under MPL-2.0, though the rest of the project remains Apache-2.0. - **`opensmile`** (audEERING Research License) → Licensed for non-commercial use only (academic research, teaching, evaluation). Any use in products or other commercial applications requires a separate commercial license from audEERING GmbH. * If you do **not** install or distribute the GPL, AGPL, LGPL, MPL, or custom-licensed optional components, your use of this project remains under the **Apache-2.0 License** only. **Note:** If you are uncertain about your rights or obligations under these licenses, you should seek advice from a qualified legal professional. --- ## Apache License, Version 2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: You must give any other recipients of the Work or Derivative Works a copy of this License; and You must cause any modified files to carry prominent notices stating that You changed the files; and You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
keywords audio voice speech video pose face text nlp
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![Build](https://github.com/sensein/senselab/actions/workflows/main-branch-status.yaml/badge.svg)](https://github.com/sensein/senselab/actions/workflows/main-branch-status.yaml)
[![codecov](https://codecov.io/gh/sensein/senselab/graph/badge.svg?token=9S8WY128PO)](https://codecov.io/gh/sensein/senselab)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

[![PyPI](https://img.shields.io/pypi/v/senselab.svg)](https://pypi.org/project/senselab/)
[![Python Version](https://img.shields.io/pypi/pyversions/senselab)](https://pypi.org/project/senselab)
[![License](https://img.shields.io/pypi/l/senselab)](https://opensource.org/licenses/Apache-2.0)

[![pages](https://img.shields.io/badge/api-docs-blue)](https://sensein.github.io/senselab)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/sensein/senselab)

# ```senselab```
This Python package **streamlines**, **optimizes**, and **enforces best open-science practices** for processing and analyzing _behavioral data_ (primarily voice and speech, but also text and video) using robust reproducible pipelines and utilities.

## Quick start
```Python
from senselab.audio.data_structures import Audio
from senselab.audio.tasks.preprocessing import resample_audios
from senselab.audio.tasks.features_extraction import extract_features_from_audios
from senselab.audio.tasks.speech_to_text import transcribe_audios

audio = Audio(filepath='path_to_audio_file.wav')
print(audio.sampling_rate)
# ➡️ 44100

[resampled_audio] = resample_audios([audio], resample_rate=16000)
print(resampled_audio.sampling_rate)
# ➡️ 16000

audio_features = extract_features_from_audios([audio])
print(audio_features[0].keys())
# ➡️ dict_keys(['opensmile', 'praat_parselmouth', 'torchaudio', 'torchaudio_squim', ...])

transcript = transcribe_audios([audio])
print(transcript)
# ➡️ "The quick brown fox jumps over the lazy dog."
```

For more detailed information, check out our [**Documentation**](https://sensein.group/senselab/senselab.html) and our [**Tutorials**](https://github.com/sensein/senselab/blob/main/tutorials/audio/00_getting_started.ipynb).

💡 **Tip**: Many tutorials include Google Colab badges and you can try them instantly without installing anything on your local machine.



### Why should you use ```senselab```?
- **Modular design**: Easily integrate or use standalone transformations for flexible data manipulation.
- **Pre-built pipelines**: Access pre-configured pipelines to reduce setup time and effort.
- **Reproducibility**: Ensure consistent and verifiable results with fixed seeds and version-controlled steps.
- **Easy integration**: Seamlessly fit into existing workflows with minimal configuration.
- **Extensible**: Modify and contribute custom transformations and pipelines to meet specific research needs.
- **Comprehensive documentation**: Detailed guides, examples, and documentation for all features and modules.
- **Performance optimized**: Efficiently process large datasets with optimized code and algorithms.
- **Interactive examples**: Jupyter notebooks provide practical examples for deriving insights from real-world datasets.
- **senselab AI**: Interact with your data through an AI-based chatbot. The AI agent generates and runs senselab-based code for you, making exploration easier and giving you both the results and the code used to produce them (perfect for quick experiments or for users who prefer not to code).


---

## ⚠️ System Requirements
1. **If on macOS, this package requires an ARM64 architecture** due to PyTorch 2.2.2+ dropping support for x86-64 on macOS.

    ❌ Unsupported systems include:
    - macOS (Intel x86-64)
    - Other platforms where dependencies are unavailable

    To check your system compatibility, please run this command:
    ```bash
    python -c "import platform; print(platform.machine())"
    ```

    If the output is:
    - `arm64` → ✅ Your system is compatible.
    - `x86_64` → ❌ Your system is not supported.

    If you attempt to install this package on an unsupported system, the installation or execution will fail.

2. `FFmpeg` is required by some audio and video dependencies (e.g., `torchaudio`). Please make sure you have `FFmpeg` properly installed on your machine before installing and using `senselab` (see [here](https://www.ffmpeg.org/download.html) for detailed platform-dependent instructions).

3. CUDA libraries matching the CUDA version expected by the PyTorch wheels (e.g., the latest pytorch 2.8 expects cuda-12.8). To install those with conda, please do:
  - ```conda config --add channels nvidia```
  - ```conda install -y nvidia/label/cuda-12.8.1::cuda-libraries-dev```
4. Docker is required and must be running for some video models (e.g., MediaPipe-based estimators).
Please follow the official installation instructions for your platform: [Install Docker](https://docs.docker.com/get-started/get-docker/).
5. Some functionalities rely on HuggingFace models, and increasingly, models require authentication and signed license agreements. Instructions on how to generate a Hugging Face access token can be found here: https://huggingface.co/docs/hub/security-tokens
  - You can provide your HuggingFace token either by exporting it in your shell:
    ```bash
    export HF_TOKEN=your_token_here
    ```
  - or by adding it to your `.env` file (see `.env.example` for reference).

---

## Installation
Install this package via:

```sh
pip install 'senselab[all]'
```

Or get the newest development version via:

```sh
pip install 'git+https://github.com/sensein/senselab.git#egg=senselab[all]'
```

If you want to install only audio dependencies, you do:
```sh
pip install 'senselab[audio]'
```

To install articulatory, video, text, and senselab-ai extras, please do:
```sh
pip install 'senselab[articulatory,video,text,senselab-ai]'
```

---

## senselab AI (our AI-based chatbot)

#### Development (with poetry)

```bash
poetry install --extras "senselab-ai"
poetry run senselab-ai
```

#### Production (with pip)

```bash
pip install 'senselab[senselab-ai]'
senselab-ai
```

Once started, you can open the provided JupyterLab interface, setup the agent and chat with it, and let it create and execute code for you.

![Example of how senselab-ai works](<tutorials/senselab-ai/resources/Screenshot 2025-09-02 at 8.52.31 PM.png>)

For a walkthrough, see: [`tutorials/senselab-ai/senselab_ai_intro.ipynb`](tutorials/senselab-ai/senselab_ai_intro.ipynb).


---

## Contributing
<ins>We welcome contributions from the community!</ins> Before proceeding with that, please review our [**CONTRIBUTING.md**](https://github.com/sensein/senselab/blob/main/CONTRIBUTING.md).

---

## Funding
`senselab` is mostly supported by the following organizations and initiatives:
- McGovern Institute ICON Fellowship
- NIH Bridge2AI Precision Public Health (OT2OD032720)
- Child Mind Institute
- ReadNet Project
- Chris and Lann Woehrle Psychiatric Fund

---

## Acknowledgments

`senselab` builds on the work of many open-source projects. We gratefully acknowledge the developers and maintainers of the following key dependencies:

* [PyTorch](https://github.com/pytorch/pytorch), [Torchvision](https://github.com/pytorch/vision), [Torchaudio](https://github.com/pytorch/audio)
_deep learning framework and audio/vision extensions_
* [Transformers](https://github.com/huggingface/transformers), [Datasets](https://github.com/huggingface/datasets), [Accelerate](https://github.com/huggingface/accelerate), [Huggingface Hub](https://github.com/huggingface/huggingface_hub)
_training and inference utilities plus (pre-)trained models and datasets_
* [Scikit-learn](https://github.com/scikit-learn/scikit-learn), [UMAP-learn](https://github.com/lmcinnes/umap)
_machine learning utilities_
* [Matplotlib](https://github.com/matplotlib/matplotlib)
_visualization toolkit_
* [Praat-Parselmouth](https://github.com/YannickJadoul/Parselmouth), [OpenSMILE](https://github.com/audeering/opensmile), [SpeechBrain](https://github.com/speechbrain/speechbrain), [SPARC](speech-articulatory-coding), [Pyannote-audio](https://github.com/pyannote/pyannote-audio), [Coqui-TTS](https://github.com/idiap/coqui-ai-TTS), [NVIDIA NeMo](https://github.com/NVIDIA/NeMo), [Vocos](https://github.com/gemelo-ai/vocos), [Audiomentations](https://github.com/iver56/audiomentations), [Torch-audiomentations](https://github.com/asteroid-team/torch-audiomentations)
_speech and audio processing tools_
* [NLTK](https://github.com/nltk/nltk), [Sentence-Transformers](https://github.com/UKPLab/sentence-transformers), [Pylangacq](https://github.com/jacksonllee/pylangacq), [Jiwer](https://github.com/jitsi/jiwer)
_text and language processing tools_
* [OpenCV](https://github.com/opencv/opencv-python), [Ultralytics](https://github.com/ultralytics/ultralytics), [mediapipe](https://github.com/google-ai-edge/mediapipe), [Python-ffmpeg](https://github.com/jonghwanhyeon/python-ffmpeg), [AV](https://github.com/PyAV-Org/PyAV)
_computer vision and pose estimation_
* [Pydra](https://github.com/nipype/pydra), [Pydantic](https://github.com/pydantic/pydantic), [Iso639](https://github.com/janpipek/iso639-python), [PyCountry](https://github.com/pycountry/pycountry), [Nest-asyncio](https://github.com/erdewit/nest_asyncio)
_workflow, validation, and utilities_
* [Ipywidgets](https://github.com/jupyter-widgets/ipywidgets), [IpKernel](https://github.com/ipython/ipykernel), [Nbformat](https://github.com/jupyter/nbformat), [Nbss-upload](https://github.com/notebook-sharing-space/nbss-upload), [Notebook-intelligence](https://github.com/notebook-intelligence/notebook-intelligence)
_Jupyter and notebook-related tools_

We are thankful to the open-source community for enabling this project! 🙏

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "senselab",
    "maintainer": "Fabio Catania",
    "docs_url": null,
    "requires_python": "<3.13,>=3.11",
    "maintainer_email": "fabiocat@mit.edu",
    "keywords": "audio, voice, speech, video, pose, face, text, nlp",
    "author": "Fabio Catania",
    "author_email": "fabiocat@mit.edu",
    "download_url": "https://files.pythonhosted.org/packages/0d/ab/19ae5892f080e279ae042d7c42261572f7b34b0b1e7d8c17434721377d0a/senselab-0.43.0.tar.gz",
    "platform": null,
    "description": "[![Build](https://github.com/sensein/senselab/actions/workflows/main-branch-status.yaml/badge.svg)](https://github.com/sensein/senselab/actions/workflows/main-branch-status.yaml)\n[![codecov](https://codecov.io/gh/sensein/senselab/graph/badge.svg?token=9S8WY128PO)](https://codecov.io/gh/sensein/senselab)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n[![PyPI](https://img.shields.io/pypi/v/senselab.svg)](https://pypi.org/project/senselab/)\n[![Python Version](https://img.shields.io/pypi/pyversions/senselab)](https://pypi.org/project/senselab)\n[![License](https://img.shields.io/pypi/l/senselab)](https://opensource.org/licenses/Apache-2.0)\n\n[![pages](https://img.shields.io/badge/api-docs-blue)](https://sensein.github.io/senselab)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/sensein/senselab)\n\n# ```senselab```\nThis Python package **streamlines**, **optimizes**, and **enforces best open-science practices** for processing and analyzing _behavioral data_ (primarily voice and speech, but also text and video) using robust reproducible pipelines and utilities.\n\n## Quick start\n```Python\nfrom senselab.audio.data_structures import Audio\nfrom senselab.audio.tasks.preprocessing import resample_audios\nfrom senselab.audio.tasks.features_extraction import extract_features_from_audios\nfrom senselab.audio.tasks.speech_to_text import transcribe_audios\n\naudio = Audio(filepath='path_to_audio_file.wav')\nprint(audio.sampling_rate)\n# \u27a1\ufe0f 44100\n\n[resampled_audio] = resample_audios([audio], resample_rate=16000)\nprint(resampled_audio.sampling_rate)\n# \u27a1\ufe0f 16000\n\naudio_features = extract_features_from_audios([audio])\nprint(audio_features[0].keys())\n# \u27a1\ufe0f dict_keys(['opensmile', 'praat_parselmouth', 'torchaudio', 'torchaudio_squim', ...])\n\ntranscript = transcribe_audios([audio])\nprint(transcript)\n# \u27a1\ufe0f \"The quick brown fox jumps over the lazy dog.\"\n```\n\nFor more detailed information, check out our [**Documentation**](https://sensein.group/senselab/senselab.html) and our [**Tutorials**](https://github.com/sensein/senselab/blob/main/tutorials/audio/00_getting_started.ipynb).\n\n\ud83d\udca1 **Tip**: Many tutorials include Google Colab badges and you can try them instantly without installing anything on your local machine.\n\n\n\n### Why should you use ```senselab```?\n- **Modular design**: Easily integrate or use standalone transformations for flexible data manipulation.\n- **Pre-built pipelines**: Access pre-configured pipelines to reduce setup time and effort.\n- **Reproducibility**: Ensure consistent and verifiable results with fixed seeds and version-controlled steps.\n- **Easy integration**: Seamlessly fit into existing workflows with minimal configuration.\n- **Extensible**: Modify and contribute custom transformations and pipelines to meet specific research needs.\n- **Comprehensive documentation**: Detailed guides, examples, and documentation for all features and modules.\n- **Performance optimized**: Efficiently process large datasets with optimized code and algorithms.\n- **Interactive examples**: Jupyter notebooks provide practical examples for deriving insights from real-world datasets.\n- **senselab AI**: Interact with your data through an AI-based chatbot. The AI agent generates and runs senselab-based code for you, making exploration easier and giving you both the results and the code used to produce them (perfect for quick experiments or for users who prefer not to code).\n\n\n---\n\n## \u26a0\ufe0f System Requirements\n1. **If on macOS, this package requires an ARM64 architecture** due to PyTorch 2.2.2+ dropping support for x86-64 on macOS.\n\n    \u274c Unsupported systems include:\n    - macOS (Intel x86-64)\n    - Other platforms where dependencies are unavailable\n\n    To check your system compatibility, please run this command:\n    ```bash\n    python -c \"import platform; print(platform.machine())\"\n    ```\n\n    If the output is:\n    - `arm64` \u2192 \u2705 Your system is compatible.\n    - `x86_64` \u2192 \u274c Your system is not supported.\n\n    If you attempt to install this package on an unsupported system, the installation or execution will fail.\n\n2. `FFmpeg` is required by some audio and video dependencies (e.g., `torchaudio`). Please make sure you have `FFmpeg` properly installed on your machine before installing and using `senselab` (see [here](https://www.ffmpeg.org/download.html) for detailed platform-dependent instructions).\n\n3. CUDA libraries matching the CUDA version expected by the PyTorch wheels (e.g., the latest pytorch 2.8 expects cuda-12.8). To install those with conda, please do:\n  - ```conda config --add channels nvidia```\n  - ```conda install -y nvidia/label/cuda-12.8.1::cuda-libraries-dev```\n4. Docker is required and must be running for some video models (e.g., MediaPipe-based estimators).\nPlease follow the official installation instructions for your platform: [Install Docker](https://docs.docker.com/get-started/get-docker/).\n5. Some functionalities rely on HuggingFace models, and increasingly, models require authentication and signed license agreements. Instructions on how to generate a Hugging Face access token can be found here: https://huggingface.co/docs/hub/security-tokens\n  - You can provide your HuggingFace token either by exporting it in your shell:\n    ```bash\n    export HF_TOKEN=your_token_here\n    ```\n  - or by adding it to your `.env` file (see `.env.example` for reference).\n\n---\n\n## Installation\nInstall this package via:\n\n```sh\npip install 'senselab[all]'\n```\n\nOr get the newest development version via:\n\n```sh\npip install 'git+https://github.com/sensein/senselab.git#egg=senselab[all]'\n```\n\nIf you want to install only audio dependencies, you do:\n```sh\npip install 'senselab[audio]'\n```\n\nTo install articulatory, video, text, and senselab-ai extras, please do:\n```sh\npip install 'senselab[articulatory,video,text,senselab-ai]'\n```\n\n---\n\n## senselab AI (our AI-based chatbot)\n\n#### Development (with poetry)\n\n```bash\npoetry install --extras \"senselab-ai\"\npoetry run senselab-ai\n```\n\n#### Production (with pip)\n\n```bash\npip install 'senselab[senselab-ai]'\nsenselab-ai\n```\n\nOnce started, you can open the provided JupyterLab interface, setup the agent and chat with it, and let it create and execute code for you.\n\n![Example of how senselab-ai works](<tutorials/senselab-ai/resources/Screenshot 2025-09-02 at 8.52.31\u202fPM.png>)\n\nFor a walkthrough, see: [`tutorials/senselab-ai/senselab_ai_intro.ipynb`](tutorials/senselab-ai/senselab_ai_intro.ipynb).\n\n\n---\n\n## Contributing\n<ins>We welcome contributions from the community!</ins> Before proceeding with that, please review our [**CONTRIBUTING.md**](https://github.com/sensein/senselab/blob/main/CONTRIBUTING.md).\n\n---\n\n## Funding\n`senselab` is mostly supported by the following organizations and initiatives:\n- McGovern Institute ICON Fellowship\n- NIH Bridge2AI Precision Public Health (OT2OD032720)\n- Child Mind Institute\n- ReadNet Project\n- Chris and Lann Woehrle Psychiatric Fund\n\n---\n\n## Acknowledgments\n\n`senselab` builds on the work of many open-source projects. We gratefully acknowledge the developers and maintainers of the following key dependencies:\n\n* [PyTorch](https://github.com/pytorch/pytorch), [Torchvision](https://github.com/pytorch/vision), [Torchaudio](https://github.com/pytorch/audio)\n_deep learning framework and audio/vision extensions_\n* [Transformers](https://github.com/huggingface/transformers), [Datasets](https://github.com/huggingface/datasets), [Accelerate](https://github.com/huggingface/accelerate), [Huggingface Hub](https://github.com/huggingface/huggingface_hub)\n_training and inference utilities plus (pre-)trained models and datasets_\n* [Scikit-learn](https://github.com/scikit-learn/scikit-learn), [UMAP-learn](https://github.com/lmcinnes/umap)\n_machine learning utilities_\n* [Matplotlib](https://github.com/matplotlib/matplotlib)\n_visualization toolkit_\n* [Praat-Parselmouth](https://github.com/YannickJadoul/Parselmouth), [OpenSMILE](https://github.com/audeering/opensmile), [SpeechBrain](https://github.com/speechbrain/speechbrain), [SPARC](speech-articulatory-coding), [Pyannote-audio](https://github.com/pyannote/pyannote-audio), [Coqui-TTS](https://github.com/idiap/coqui-ai-TTS), [NVIDIA NeMo](https://github.com/NVIDIA/NeMo), [Vocos](https://github.com/gemelo-ai/vocos), [Audiomentations](https://github.com/iver56/audiomentations), [Torch-audiomentations](https://github.com/asteroid-team/torch-audiomentations)\n_speech and audio processing tools_\n* [NLTK](https://github.com/nltk/nltk), [Sentence-Transformers](https://github.com/UKPLab/sentence-transformers), [Pylangacq](https://github.com/jacksonllee/pylangacq), [Jiwer](https://github.com/jitsi/jiwer)\n_text and language processing tools_\n* [OpenCV](https://github.com/opencv/opencv-python), [Ultralytics](https://github.com/ultralytics/ultralytics), [mediapipe](https://github.com/google-ai-edge/mediapipe), [Python-ffmpeg](https://github.com/jonghwanhyeon/python-ffmpeg), [AV](https://github.com/PyAV-Org/PyAV)\n_computer vision and pose estimation_\n* [Pydra](https://github.com/nipype/pydra), [Pydantic](https://github.com/pydantic/pydantic), [Iso639](https://github.com/janpipek/iso639-python), [PyCountry](https://github.com/pycountry/pycountry), [Nest-asyncio](https://github.com/erdewit/nest_asyncio)\n_workflow, validation, and utilities_\n* [Ipywidgets](https://github.com/jupyter-widgets/ipywidgets), [IpKernel](https://github.com/ipython/ipykernel), [Nbformat](https://github.com/jupyter/nbformat), [Nbss-upload](https://github.com/notebook-sharing-space/nbss-upload), [Notebook-intelligence](https://github.com/notebook-intelligence/notebook-intelligence)\n_Jupyter and notebook-related tools_\n\nWe are thankful to the open-source community for enabling this project! \ud83d\ude4f\n",
    "bugtrack_url": null,
    "license": "# LICENSE\n\nThis project is licensed under the **Apache License, Version 2.0**.\n\nSome **optional** components depend on third-party packages that are licensed under terms other than Apache-2.0. If you install, enable, or distribute the project together with those optional components, your use and distribution of the combined work must also comply with the license obligations of those third-party components.\n\nSee the **Third-party licenses** section below for details and references.\n\n\n## Third-party licenses\n\n\n| Dependency                 | License                                                                                     |\n| -------------------------- | ------------------------------------------------------------------------------------------- |\n| accelerate                 | [Apache-2.0](https://github.com/huggingface/accelerate/blob/main/LICENSE)                   |\n| audiomentations            | [MIT](https://github.com/iver56/audiomentations/blob/master/LICENSE)                        |\n| av                         | [BSD-3-Clause](https://github.com/PyAV-Org/PyAV/blob/main/LICENSE.txt)                      |\n| coqui-tts                  | [MPL-2.0](https://github.com/idiap/coqui-ai-TTS/blob/dev/LICENSE.txt)                       |\n| datasets                   | [Apache-2.0](https://github.com/huggingface/datasets/blob/main/LICENSE)                     |\n| huggingface-hub            | [Apache-2.0](https://github.com/huggingface/huggingface_hub/blob/main/LICENSE)              |\n| ipykernel                  | [BSD-3-Clause](https://github.com/ipython/ipykernel/blob/main/LICENSE)                      |\n| ipywidgets                 | [BSD-3-Clause](https://github.com/jupyter-widgets/ipywidgets/blob/main/LICENSE)             |\n| iso639                     | [MIT](https://github.com/janpipek/iso639-python/blob/master/LICENSE)                        |\n| jiwer                      | [Apache-2.0](https://github.com/jitsi/jiwer/blob/master/LICENSE)                            |\n| matplotlib                 | [CUSTOM](https://github.com/matplotlib/matplotlib/blob/main/LICENSE)                        |\n| mediapipe                  | [Apache-2.0](https://github.com/google-ai-edge/mediapipe/blob/master/LICENSE)                        |\n| nbformat                   | [BSD-3-Clause](https://github.com/jupyter/nbformat/blob/main/LICENSE)                       |\n| nbss-upload                | [BSD-3-Clause](https://github.com/notebook-sharing-space/nbss-upload/blob/main/LICENSE)     |\n| nemo-toolkit               | [Apache-2.0](https://github.com/NVIDIA/NeMo/blob/main/LICENSE)                              |\n| nest-asyncio               | [BSD-2-Clause](https://github.com/erdewit/nest_asyncio/blob/master/LICENSE)                 |\n| nltk                       | [Apache-2.0](https://github.com/nltk/nltk/blob/develop/LICENSE.txt)                         |\n| notebook-intelligence      | [GPL-3.0](https://github.com/notebook-intelligence/notebook-intelligence/blob/main/LICENSE) |\n| opencv-python-headless     | [MIT](https://github.com/opencv/opencv-python/blob/4.x/LICENSE.txt)                         |\n| opensmile                  | [CUSTOM](https://github.com/audeering/opensmile/blob/master/LICENSE)                        |\n| praat-parselmouth          | [GPL-3.0](https://github.com/YannickJadoul/Parselmouth/blob/master/LICENSE)                 |\n| pyannote-audio             | [MIT](https://github.com/pyannote/pyannote-audio/blob/develop/LICENSE)                      |\n| pycountry                  | [LGPL-2.1](https://github.com/pycountry/pycountry/blob/main/LICENSE.txt)                    |\n| pydantic                   | [MIT](https://github.com/pydantic/pydantic/blob/main/LICENSE)                               |\n| pydra                      | [Apache-2.0](https://github.com/nipype/pydra/blob/master/LICENSE)                           |\n| pylangacq                  | [MIT](https://github.com/jacksonllee/pylangacq/blob/main/LICENSE.txt)                       |\n| python-ffmpeg              | [CUSTOM](https://github.com/jonghwanhyeon/python-ffmpeg/blob/main/LICENSE)                  |\n| scikit-learn               | [BSD-3-Clause](https://github.com/scikit-learn/scikit-learn/blob/main/COPYING)              |\n| sentence-transformers      | [Apache-2.0](https://github.com/UKPLab/sentence-transformers/blob/master/LICENSE)           |\n| speech-articulatory-coding | Not defined                                                                                 |\n| speechbrain                | [Apache-2.0](https://github.com/speechbrain/speechbrain/blob/develop/LICENSE)               |\n| torch                      | [CUSTOM](https://github.com/pytorch/pytorch/blob/main/LICENSE)                              |\n| torch-audiomentations      | [MIT](https://github.com/asteroid-team/torch-audiomentations/blob/master/LICENSE)           |\n| torchaudio                 | [BSD-2-Clause](https://github.com/pytorch/audio/blob/main/LICENSE)                          |\n| torchvision                | [BSD-3-Clause](https://github.com/pytorch/vision/blob/main/LICENSE)                         |\n| transformers               | [Apache-2.0](https://github.com/huggingface/transformers/blob/main/LICENSE)                 |\n| types-requests             | [Apache-2.0](https://github.com/python/typeshed/blob/main/LICENSE)                          |\n| ultralytics                | [AGPL-3.0](https://github.com/ultralytics/ultralytics/blob/main/LICENSE)                    |\n| umap-learn                 | [BSD-3-Clause](https://github.com/lmcinnes/umap/blob/master/LICENSE.txt)                    |\n| vocos                      | [MIT](https://github.com/gemelo-ai/vocos/blob/main/LICENSE)                                 |\n\n\nFor clarity:\n\n* The **core** of this project is licensed under **Apache-2.0**.\n* **Optional** functionality depending on:\n  - **`notebook-intelligence`** (GPL-3.0) and **`praat-parselmouth`** (GPL-3.0)\n    \u2192 Using or distributing the project together with these components subjects the combined distribution to GPL-3.0 obligations.\n  - **`ultralytics`** (AGPL-3.0)\n    \u2192 Using or distributing the project together with this component subjects the combined distribution to AGPL-3.0 obligations.\n  - **`pycountry`** (LGPL-2.1)\n    \u2192 The project may depend dynamically on this component while remaining Apache-2.0; however, modifications or static incorporation are subject to LGPL-2.1 obligations.\n  - **`coqui-tts`** (MPL-2.0)\n    \u2192 Modifications to MPL-licensed files must be released under MPL-2.0, though the rest of the project remains Apache-2.0.\n  - **`opensmile`** (audEERING Research License)\n    \u2192 Licensed for non-commercial use only (academic research, teaching, evaluation).\n      Any use in products or other commercial applications requires a separate commercial license from audEERING GmbH.\n* If you do **not** install or distribute the GPL, AGPL, LGPL, MPL, or custom-licensed optional components, your use of this project remains under the **Apache-2.0 License** only.\n\n**Note:** If you are uncertain about your rights or obligations under these licenses, you should seek advice from a qualified legal professional.\n\n---\n\n## Apache License, Version 2.0\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\n\n    You must give any other recipients of the Work or Derivative Works a copy of this License; and\n    You must cause any modified files to carry prominent notices stating that You changed the files; and\n    You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\n    If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\n\nYou may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n",
    "summary": "senselab is a Python package that simplifies building pipelines for speech and voice analysis.",
    "version": "0.43.0",
    "project_urls": null,
    "split_keywords": [
        "audio",
        " voice",
        " speech",
        " video",
        " pose",
        " face",
        " text",
        " nlp"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a902e13be1574d5b813c98a2fbc3c9df5272dc35dd50508ca25f8d40508d1271",
                "md5": "f03389933cc34a387344b62edef16add",
                "sha256": "129748f1a77219461e7fd9a7184ca7f540a7b2e09d1e1ec3a7c9ce15701cbb6c"
            },
            "downloads": -1,
            "filename": "senselab-0.43.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f03389933cc34a387344b62edef16add",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.13,>=3.11",
            "size": 237934,
            "upload_time": "2025-09-16T00:24:47",
            "upload_time_iso_8601": "2025-09-16T00:24:47.971217Z",
            "url": "https://files.pythonhosted.org/packages/a9/02/e13be1574d5b813c98a2fbc3c9df5272dc35dd50508ca25f8d40508d1271/senselab-0.43.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0dab19ae5892f080e279ae042d7c42261572f7b34b0b1e7d8c17434721377d0a",
                "md5": "af523bef2c7fb89f3786301afdab6619",
                "sha256": "671b4ee6a86229c22919172c60bd0ba6d2221754a3b39bd0c5e9e10bef7c7223"
            },
            "downloads": -1,
            "filename": "senselab-0.43.0.tar.gz",
            "has_sig": false,
            "md5_digest": "af523bef2c7fb89f3786301afdab6619",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.13,>=3.11",
            "size": 175123,
            "upload_time": "2025-09-16T00:24:49",
            "upload_time_iso_8601": "2025-09-16T00:24:49.718693Z",
            "url": "https://files.pythonhosted.org/packages/0d/ab/19ae5892f080e279ae042d7c42261572f7b34b0b1e7d8c17434721377d0a/senselab-0.43.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-16 00:24:49",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "senselab"
}
        
Elapsed time: 2.31289s