free & open source / pip install batesposture

Real-time posture
monitoring for your desktop

BatesPosture uses your webcam and MediaPipe to score your posture every second — entirely on your machine. No cloud, no subscriptions, no tracking. Install in seconds with pip.

install with pip view on github
pip install batesposture  &&  batesposture
latest: checking...
poor posture — alert fired
fair — corrections needed
excellent — streak running

Everything you need, nothing you don't

A focused tool that stays out of your way until your posture needs attention.

score

Live 0-100 posture score

Seven weighted metrics — head tilt, neck angle, shoulder balance, spine alignment — combined into a single colour-coded score in your tray icon.

dashboard

Session dashboard

Sparkline history, session average, min/max, best streak, and duration — all in a floating window that remembers your history between sessions.

alerts

Smart notifications

Native desktop alerts with configurable threshold and cooldown. Focus mode silences reminders when you need to concentrate.

schedule

Interval scheduling

Track continuously or on a schedule. A built-in break reminder prompts you to stand up after 50 minutes of sitting.

logging

Local data logging

Optional SQLite logging of every session with CSV export. All data lives on your machine — nothing is sent anywhere.

performance

Adaptive performance

Automatically reduces camera resolution on low-end hardware. GPU acceleration toggle for faster MediaPipe inference on supported devices.

Simple by design

No complicated setup. Just your webcam and 30 seconds to calibrate.

1

Launch & calibrate

A short onboarding wizard captures a 6-second baseline of your natural posture so alerts are tuned to you, not a generic threshold.

2

Start tracking

Click "Start Tracking" from the tray icon. The icon turns green when posture is good and red when it degrades — no need to look at the app.

3

Receive alerts

When your score drops below the threshold, a native notification prompts you to sit up straight. A configurable cooldown prevents alert fatigue.

4

Review your session

Open the dashboard at any time to see your live camera feed, score history, streaks, and session stats.

Get started in seconds

Distributed via PyPI — no unsigned binaries, no SmartScreen warnings. Requires Python 3.10+ and pip.

  1. 1Install: pip install batesposture
  2. 2Run: batesposture
  3. 3Grant camera permission when prompted.
  4. 4BatesPosture appears in your system tray. Complete the 6-second calibration on first launch.
  5. 5Linux / GNOME: may need the AppIndicator extension for tray support.
  1. 1Clone: git clone https://github.com/wtbates99/batesposture.git && cd batesposture
  2. 2Install uv, then: uv sync
  3. 3Run: uv run python -m batesposture

What you need

A webcam and a reasonably modern machine — that's it.

Windows

  • Windows 10 or 11 (64-bit)
  • Python 3.10+
  • Built-in or USB webcam
  • Camera permission granted

Linux

  • Ubuntu 20.04+ or equivalent
  • Python 3.10+
  • X11 or Wayland desktop
  • Built-in or USB webcam

Runs entirely on your machine

Your camera feed never leaves your computer.

zero data transmission

100% local processing

All pose detection runs locally using MediaPipe. No video frames, no pose data, and no personal information is ever sent to a server. Session data is stored in a local SQLite database on your machine — and only when you explicitly enable logging.