python-intan
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
.datrecording 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:
Read_Files: RHD, per-signal DAT, CSV, NPZ, and event segmentation.RHXDevice: live RHX recording and plotting.LSL: LSL viewers and marker subscriptions.gesture_classifier: maintained dataset, training, and prediction CLIs.applications: optional GUI applications.interface: optional Pico IMU and combined hardware acquisition.finger_kinematics: optional video/landmark integration.exo_classifierand3D_printed_arm_control: project-specific research and hardware examples; additional hardware/software may be required.
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
- Update the version consistently in
pyproject.toml,intan/__init__.py, andCITATION.cff. - Update
CHANGELOG.md, run the full validation commands above, and inspect both archives. - Commit the release changes, create a matching annotated
vX.Y.Ztag, and rebuild from that clean tagged commit. - Upload to TestPyPI and validate an installation from TestPyPI.
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca1be1e164efe4f02844a1acf63202ee2659b58aa9797be95bda66bdfa0b09df
|
|
| MD5 |
7f28bc3da0e563ae9b843724e030a3bc
|
|
| BLAKE2b-256 |
008f78d7237de7265447ec92f13ec2e2717808124db41607867ff5ea081ece41
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4ce1027997a91f35c602c93555039136454ef6da488c679c779389822ba53cd
|
|
| MD5 |
7a90b5a142fa61d4c4df8c3aaff7ad02
|
|
| BLAKE2b-256 |
4c91fe11e729385e177a4b1aa79e27dcbc5507d594c9b4211f4d1f2507c2f615
|