Skip to main content

title: YAMS emoji: 🍠 colorFrom: purple colorTo: purple sdk: gradio sdk_version: 5.15.0 app_file: yams/main.py pinned: false license: mit

YAMS

Yet Another Motionsense Service utility

Code | PyPI | 🤗 Demo (UI only)

Quickstart

Pre-compiled version

  • Download the latest release from here

Development

  1. (optional) create a dedicated conda environment
    • conda create -n yams python=3.12
    • conda activate yams
  2. Clone this repository
    • git clone https://github.com/SenSE-Lab-OSU/YAMS.git
    • cd yams
  3. Install dependencies
    • pip install -r requirements.txt
  4. Config liblsl
    • conda install -c conda-forge liblsl
  5. Lauch YAMS
    • python -m yams

(Deprecated) Windows

Python 3.12 or newer is needed

  1. Download setup scripts
  2. Run the installation script
    • Run the script by double-click the install.bat file
    • The script will perform any necessary setup
  3. Start the app
    • by double-click the start_yams.bat file
    • Once the initialization is completed, you will see a messge similar to: * Running on local URL: http://127.0.0.1:7860
  4. Access the application

(Deprecated) MacOS / Linux

  1. Download scripts/unix to a desired location
  2. Run run.sh to install and start the app

General usage

Download onboard data

Refer to Extract onboard data

Extract raw data

Refer to Data Extraction Feature

Emergency stop

Terminating data collection is also available in YAMS web app under bluetooth scanner - collection control - stop

To halt all on-going collection on the MotionSenSE wristbands,

  • On windows, go to your folder where the setup scripts are located as in Quickstart-Windows part
  • Locate and double-click emergency_stop.bat
  • Wait until all operations are completed

Installation

  • pip install -U yams-util
  • python -m yams

Development guide

  • Clone the repository
    • git clone https://github.com/SenSE-Lab-OSU/YAMS.git
  • Install dependencies
    • pip install -r requirements.txt
  • Launch the application
    • python -m yams
  • Visit http://127.0.0.1:7860 (by default, check on-screen prompt)

Build guide

  • Install pyinstaller via pip install pyinstaller
  • Create .spec by pyi-makespec --collect-data=gradio_client --collect-data=gradio --collect-data=safehttpx --collect-data=groovy --onefile app.py
  • Manually add the following in a = analysis ...
    module_collection_mode={
        'gradio': 'py',  # Collect gradio package as source .py files
    },
  • Build the app: pyinstaller app.spec

MacOS

pyi-makespec --collect-data=gradio_client --collect-data=gradio --collect-data=safehttpx --collect-data=groovy --onefile --osx-bundle-identifier 'com.yams' --icon yams/resources/icons/yams.icns app.py

Instructions

(advanced) running data extraction in command line

Run from the project root:

python -m yams.data_extraction -i "data_in" -o "data_out"

All options:

Flag Default Description
-i, --in_dir (required) Directory containing .bin files
-o, --out_dir ./ Output directory
--save_format csv Output format: csv or pickle
--ignore_id off Skip subject/session ID parsing; use raw filenames
--legacy_fs off Use 25 Hz clock for CDCT (uncommon, old devices)
--force_new_format off Force v4.7.0+ binary layout regardless of uuid.txt version
--mode dir dir: single folder of .bin files; batch: folder of .zip archives

Data type detection — the extractor scans the input folder and processes whichever file types are present:

File pattern Sensor Output
[id]ac*.bin IMU (AccX/Y/Z, QuatX/Y/Z, ENMO) [id]ac.csv
[id]ppg*.bin PPG (ir1, ir2, g1, g2) [id]ppg.csv
[id]ecg*.bin MAX30001 ECG (ECG, ETAG, PTAG) [id]ecg.csv

A single run extracts all types present. Missing types are silently skipped.

Examples:

# Wristband (AC + PPG) — firmware auto-detected from uuid.txt
python -m yams.data_extraction -i "data/subject01" -o "out/subject01"

# Wristband on v4.7.0+ firmware (force if uuid.txt is absent or reports wrong version)
python -m yams.data_extraction -i "data/subject01" -o "out/subject01" --force_new_format

# ECG only folder (e.g. data/260708_ecg containing ecg*.bin)
python -m yams.data_extraction -i "data/260708_ecg" -o "out/ecg" --ignore_id

# Mixed folder with both wristband and ECG files
python -m yams.data_extraction -i "data/session01" -o "out/session01" --force_new_format --ignore_id

# Save as pickle, skip ID parsing
python -m yams.data_extraction -i "data/subject01" -o "out/subject01" --save_format pickle --ignore_id

# Batch extract a folder of zip archives
python -m yams.data_extraction -i "data_in" --mode batch

Notes:

  • The device version is read automatically from uuid.txt. If v4.7.0+, the new binary layout (uint32 PPG, quaternion IMU, 32-bit counter at 512 Hz) is used for AC/PPG; otherwise the legacy layout is used. Use --force_new_format to override.
  • ECG binary format (ecg*.bin) is always parsed the same way regardless of firmware version — it uses 12-byte CRC-validated frames with a 512 Hz sequence counter.
  • ECG output columns: ECG (signed 18-bit ADC count), ETAG (0 = valid sample, 2 = leads off), PTAG, Counter, CDCT, Datetime.

Roadmap

  • Device data transfer
  • Device data post processing
    • format conversion
    • visualization
  • simple data collection utilities
  • LSL support
  • Auto reconnect
  • Selected file download
  • Advanced device monitoring [ ] global state: active connection, active outlet, ctl status [ ] BAT monitoring [ ] storage monitoring

Acknowledgement

Metadata

Release files for yams-util 1.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yams-util 1.6.0
File Size Uploaded Provenance Actions
yams_util-1.6.0.tar.gz 55.5 kB With provenance Details for yams_util-1.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for yams-util 1.6.0
File Interpreter ABI Platform Actions
yams_util-1.6.0-py3-none-any.whl Python 3 none any Details for yams_util-1.6.0-py3-none-any.whl

Total release size: 105.8 kB

Release files / yams_util-1.6.0.tar.gz

Download URL yams_util-1.6.0.tar.gz
Size 55.5 kB
Tags Source
SHA-256 checksum
How to use checksums
aeaddc613d17adc034f7941bcfe853e05eb1e699fa98c433e83b527a2c567fc5
BLAKE2b-256 checksum
How to use checksums
be178fc3be6aa6b4f4593a98bb0ecf523e97de60cba5c588f8ea5c6c3c0b66cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / yams_util-1.6.0-py3-none-any.whl

Download URL yams_util-1.6.0-py3-none-any.whl
Size 50.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e99732b79a94c159dc533679755c443851383f02daa5e1e386d637a17fa53a73
BLAKE2b-256 checksum
How to use checksums
972fd6d45faa78e0c378585078adc3670e18acca475ca533ef1e7cd6b5466796
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Security for yams-util 1.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for yams_util-1.6.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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