Free & Open Source

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 release: checking…
Poor posture — alert sent
Fair — minor corrections
Excellent — streak running

Everything you need, nothing you don't

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

📊

Live 0–100 posture score

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

📈

Session dashboard

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

🔔

Smart notifications

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

⏱️

Interval scheduling

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

🗄️

Local data logging

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

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

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.