Speediance Gym Monster

Other

Read completed workouts (summaries and full per-set detail), browse and export the exercise catalog, push custom training programs to your Speediance (Gym Monster) smart cable machine via its cloud API, and optionally sync sessions into local Markdown week sheets. Authenticates with your account credentials, caches a session token to a local file (.token.json), and makes outbound HTTPS requests to the Speediance cloud API.

Install

openclaw skills install speediance

Speediance — Gym Monster CLI Skill

Talk to your Speediance (Gym Monster) smart cable machine from any agent. Read completed workouts and push custom programs that appear on the machine ready to run — no app navigation mid-session.

Unofficial — reverse-engineered from the Android app. Personal use, your own account only. Built on the MIT-licensed UnofficialSpeedianceWorkoutManager (hbui3) and speediance-influx (gavinmcfall).

Tested on Gym Monster v1 (SPEEDIANCE_DEVICE_TYPE=1). GM2 is untested.

Setup (one time)

Install the CLI:

pip install git+https://github.com/stozo04/speediance-cli
speediance-cli login   # authenticates and caches a token

Or clone and run as a module (no install needed):

git clone https://github.com/stozo04/speediance-cli && cd speediance-cli
pip install -r requirements.txt
python -m speediance login

Once installed, speediance-cli and python -m speediance are interchangeable.

Credentials

Set as environment variables — the CLI reads them automatically:

VariableRequiredDefaultNotes
SPEEDIANCE_EMAILAccount email
SPEEDIANCE_PASSWORDAccount password
SPEEDIANCE_REGIONGlobalGlobal or EU
SPEEDIANCE_DEVICE_TYPE11 = Gym Monster v1

Alternatively, write a config.json in the working directory (gitignored by the repo):

{
  "email": "you@example.com",
  "password": "yourpassword",
  "region": "Global"
}

Commands

Read workouts

speediance-cli workouts --days 7 --json      # recent sessions (summaries)
speediance-cli session <training_id> --json  # full per-set detail for one session

Sample workouts --json output:

[
  {
    "training_id": 123456,
    "title": "Upper Body",
    "date": "2025-06-15",
    "duration_secs": 2700,
    "calories": 320,
    "volume": 4200.0,
    "type": "Strength"
  }
]

Sample session <id> --json output:

{
  "training_id": 123456,
  "completion_rate": 0.95,
  "exercises": [
    {
      "name": "Seated Dual-Handle Lat Pulldown",
      "sets": [
        {"set": 1, "reps": 12, "target_reps": 12, "weight": 20.0, "max_hr": 148, "left_right": 0}
      ]
    }
  ]
}

"Free Lift" (freestyle) sessions return totals only — no per-set detail. Sessions started from a program return full set data.

Browse the exercise catalog

speediance-cli library --search "chest" --json   # filter by name or muscle
speediance-cli library                           # save full catalog to library.json

Returns [{id, name, muscle, tab}]. The id is required for plan JSON. A committed library.json snapshot ships with the repo (Gym Monster v1) for offline browsing — regenerate with speediance-cli library to get the freshest catalog or a different device's exercises.

Create a training program

Author a plan JSON, then push it — the program appears on the machine immediately:

speediance-cli push plan.json --dry-run   # preview payload, no network write
speediance-cli push plan.json             # create it on the account

Plan JSON format:

{
  "name": "Pull Day",
  "exercises": [
    {
      "id": 434,
      "title": "Seated Dual-Handle Lat Pulldown",
      "sets": [
        {"reps": 12, "weight": 20, "mode": 1, "rest": 75},
        {"reps": 10, "weight": 22, "mode": 1, "rest": 75},
        {"reps": 8,  "weight": 25, "mode": 1, "rest": 90}
      ]
    },
    {
      "id": 291,
      "title": "Seated Row",
      "sets": [
        {"reps": 12, "weight": 18, "mode": 1, "rest": 60}
      ]
    }
  ]
}
FieldTypeNotes
idintFrom speediance-cli library — IDs differ per account/device
weightfloatKilograms
modeint1=Standard, 2=Eccentric, 3=Isokinetic, 4=Constant, 5=Spotter
restintSeconds between sets

Optional: Markdown week-sheet sync

If you keep workout logs as WEEKS/Week-XX.md Markdown checklists, sync writes a completed session into the matching file automatically:

speediance-cli sync --weeks-dir /path/to/WEEKS --date today
speediance-cli sync --weeks-dir /path/to/WEEKS --date 2025-06-10

This is entirely opt-in — ignore it if you don't use that convention. Core commands (login, workouts, session, library, push) never need a sheets folder.

Full command reference

CommandWhat it does--json
loginAuthenticate and cache a token in .token.json
workouts [--days N]List recent completed sessions
session <training_id>Full per-set detail for one session
library [--search X] [--out FILE]Dump or search exercise catalog
push <plan.json> [--dry-run]Create a training program on the account
sync [--date DATE] [--weeks-dir DIR](Optional) Write session into Markdown sheet

Conventions

  • stdout is parseable with --json; all human-readable hints go to stderr.
  • Secrets: config.json, .token.json, .env are gitignored — never commit them.
  • Token caching: after the first login, the token is cached in .token.json and refreshed automatically on expiry.
  • Dry-run first: always use --dry-run before push when authoring new programs to confirm exercise IDs resolved correctly.
  • If an endpoint breaks after a Speediance app update, speediance/client.py is where all API calls live.