Skip to main content

Logo

python-intan

PyPI Python License: MIT Documentation

python-intan provides Python tools for reading Intan RHD recordings, working with RHX TCP streams, processing EMG/electrophysiology signals, and building optional visualization and machine-learning workflows. Hardware examples require the relevant Intan or microcontroller hardware and are not exercised by a normal package installation.

Quick links

Features

  • Read RHD files and Intan per-signal .dat recording directories.
  • Load and save CSV and NPZ datasets.
  • Connect to RHX software over its command and waveform TCP ports.
  • Filter, normalize, repair, synchronize, and extract features from channel-by-sample data.
  • Publish and subscribe to Lab Streaming Layer (LSL) streams.
  • Plot multichannel data and run optional GUI viewers.
  • Train and run optional PyTorch EMG models.

Installation

Python 3.10 or later is required.

python -m pip install python-intan

For development from a repository checkout:

git clone https://github.com/Neuro-Mechatronics-Interfaces/python-intan.git
cd python-intan
python -m pip install -e '.[test]'

On Windows PowerShell, use double quotes around extras if your shell configuration does not accept single quotes.

Optional dependencies

Install only the groups required by your workflow:

python -m pip install 'python-intan[gui]'    # PyQt5 and pyqtgraph
python -m pip install 'python-intan[ml]'     # PyTorch model training/inference
python -m pip install 'python-intan[video]'  # OpenCV and MediaPipe
python -m pip install 'python-intan[docs]'   # Sphinx documentation build
python -m pip install 'python-intan[test]'   # tests and release validation

The finger-kinematics landmark example can integrate with the separate handtrack project, but that project is intentionally not a package dependency. Install and evaluate it separately if you choose to run that example.

Getting started

RHD data is represented with channels on axis 0 and samples on axis 1.

from intan.io import load_rhd_file
from intan.processing import bandpass_filter, notch_filter

recording = load_rhd_file("path/to/recording.rhd")
emg = recording["amplifier_data"]
fs = recording["frequency_parameters"]["amplifier_sample_rate"]

filtered = notch_filter(emg, fs=fs, f0=60)
filtered = bandpass_filter(filtered, lowcut=20, highcut=450, fs=fs)
print(filtered.shape)

For RHX streaming, start the TCP server in Intan RHX software before connecting:

from intan.interface import IntanRHXDevice

with IntanRHXDevice(num_channels=32, auto_start=False) as device:
    device.enable_wide_channel(range(32))
    device.start_streaming()
    window = device.get_latest_window(1000)
    print(window.shape)

CLI usage

The optional GUI extra installs two console commands:

intan-emg-viewer --help
intan-trial-selector --help
intan-emg-viewer
intan-trial-selector

Most reproducible workflows are maintained as example CLIs. Run any command below from the repository root:

python examples/Read_Files/load_rhd_demo.py --help
python examples/Read_Files/load_dat_demo.py --help
python examples/gesture_classifier/1_build_dataset.py --help
python examples/gesture_classifier/2_train_model.py --help
python examples/gesture_classifier/3_predict.py --help

Examples

The example folders distinguish package workflows from external hardware integrations:

Examples that need data open a file picker or accept an explicit path. Microcontroller .py files and the bundled .uf2 firmware are intended for their device runtimes, not desktop Python.

Package structure

intan/
├── applications/   optional GUI applications
├── decomposition/  PCA and constrained ICA utilities
├── interface/      RHX TCP, LSL, and optional Pico interfaces
├── io/             RHD, DAT, CSV, NPZ, event, and config I/O
├── ml/             lazy-loaded PyTorch model workflows
├── plotting/       static and real-time visualization
├── processing/     filtering, features, synchronization, and QC
├── samples/        packaged sample assets
└── ui/             shared optional GUI helpers

Documentation

Published documentation is available on GitHub Pages. To build it locally:

python -m pip install -e '.[docs]'
sphinx-build -W --keep-going -b html docs/source docs/build/html

Development and testing

python -m pip install -e '.[test]'
python -m pytest
python -m compileall -q intan examples
python -m build
python -m twine check dist/*

Hardware, LSL, and interactive GUI behavior requires the corresponding devices, streams, or display server. The automated suite confines itself to deterministic offline and headless checks.

Release workflow

  1. Update the version consistently in pyproject.toml, intan/__init__.py, and CITATION.cff.
  2. Update CHANGELOG.md, run the full validation commands above, and inspect both archives.
  3. Commit the release changes, create a matching annotated vX.Y.Z tag, and rebuild from that clean tagged commit.
  4. Upload to TestPyPI and validate an installation from TestPyPI.
  5. Upload the exact already-validated artifacts to PyPI.

Do not reuse a version or rebuild artifacts between TestPyPI and PyPI.

Contributing

Bug reports and focused pull requests are welcome. See CONTRIBUTING.md for environment and review guidance.

License

python-intan is distributed under the MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_intan-0.2.3.tar.gz (6.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_intan-0.2.3-py3-none-any.whl (187.5 kB view details)

Uploaded Python 3

File details

Details for the file python_intan-0.2.3.tar.gz.

File metadata

  • Download URL: python_intan-0.2.3.tar.gz
  • Upload date:
  • Size: 6.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.11

File hashes

Hashes for python_intan-0.2.3.tar.gz
Algorithm Hash digest
SHA256 ca1be1e164efe4f02844a1acf63202ee2659b58aa9797be95bda66bdfa0b09df
MD5 7f28bc3da0e563ae9b843724e030a3bc
BLAKE2b-256 008f78d7237de7265447ec92f13ec2e2717808124db41607867ff5ea081ece41

See more details on using hashes here.

File details

Details for the file python_intan-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: python_intan-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 187.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.11

File hashes

Hashes for python_intan-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a4ce1027997a91f35c602c93555039136454ef6da488c679c779389822ba53cd
MD5 7a90b5a142fa61d4c4df8c3aaff7ad02
BLAKE2b-256 4c91fe11e729385e177a4b1aa79e27dcbc5507d594c9b4211f4d1f2507c2f615

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 files

0.0.3

2 files

0.0.2

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page