GitHub - tldev/dorso: A macOS app that blurs your screen when you slouch. · GitHub

Source: original

Dorso

A macOS app that blurs your screen when you slouch.

Dorso monitors your posture in real-time using either your Mac's camera or AirPods motion sensors. When it detects that you're slouching, it progressively blurs your screen to remind you to sit up straight. Maintain good posture, and the blur clears instantly.

Download on the App Store

Download Latest Release Discord

Join our Discord to share feedback, get help, suggest features, and connect with other Dorso users!

dorso-preview.mp4

Screenshots

Onboarding - Choose Tracking Method Settings

Menu Bar

Features

Installation

Homebrew (Recommended)

brew install dorso

Manual Download

  1. Download the latest Dorso-vX.X.X.dmg or .zip from the Releases page
  2. Open the DMG and drag Dorso.app to your Applications folder
  3. Launch normally - no Gatekeeper warnings (app is signed and notarized)

Permissions

Camera Mode: Requires camera access. When you first launch the app, macOS will ask for permission.

AirPods Mode: Requires Motion & Fitness Activity permission (macOS 14+). This allows the app to read head motion data from your AirPods.

If you accidentally denied permission, you can grant it later in System Settings > Privacy & Security > Camera or Motion & Fitness Activity.

Usage

Once launched, Dorso appears in your menu bar with a person icon. The app continuously monitors your posture and applies screen blur when slouching is detected.

Menu Bar Controls

Click the menu bar icon to access:

Settings Window

The Settings window (accessible from the menu bar) provides:

Tips for Best Results

How It Works

Dorso offers two tracking methods:

Camera Mode

Uses Apple's Vision framework to detect body pose landmarks:

AirPods Mode

Uses motion sensors in compatible AirPods (Pro, Max, 3rd gen+):

The screen blur uses macOS's private CoreGraphics API by default for efficient, system-level blur. If the blur doesn't appear on your system, enable Compatibility Mode from settings to use NSVisualEffectView instead.

Building from Source

Requirements

Build

git clone https://github.com/tldev/dorso.git cd dorso ./build.sh

The built app will be in build/Dorso.app.

Build Options

Standard build

./build.sh

Build with release archive (.zip)

./build.sh --release

Manual Build

swiftc -O \ -framework AppKit \ -framework AVFoundation \ -framework Vision \ -framework CoreImage \ -o Dorso \ Sources/*.swift

Known Limitations

Command Interface

Dorso exposes a file-based command interface for external control:

Command | Description

capture | Take a photo and analyze pose blur <0-64> | Set blur level manually quit | Exit the application

Write commands to /tmp/dorso-command. Responses appear in /tmp/dorso-response.

System Requirements

Privacy

Dorso processes all video data locally on your Mac. No images or data are ever sent to external servers. The camera feed is used solely for posture detection and is never stored or transmitted.

License

MIT License - see LICENSE for details.

Project Structure

dorso/ ├── Sources/ │ ├── main.swift # App entry point │ ├── AppDelegate.swift # Main app coordinator and state machine │ ├── PostureDetector.swift # Protocol for posture detection methods │ ├── CameraPostureDetector.swift # Camera-based detection (Vision framework) │ ├── AirPodsPostureDetector.swift # AirPods motion-based detection │ ├── Models.swift # Shared types (settings keys, profile data, app state) │ ├── Persistence.swift # Settings and profile storage │ ├── DisplayManager.swift # Display detection and configuration │ ├── MenuBar.swift # Menu bar setup and management │ ├── SettingsWindow.swift # SwiftUI settings window │ ├── OnboardingWindow.swift # Tracking method selection UI │ ├── CalibrationWindow.swift # Calibration UI │ └── BlurOverlay.swift # Screen blur overlay management ├── build.sh # Build script ├── release.sh # Release automation └── AppIcon.icns # App icon

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Acknowledgments

Linux version

Want this on Linux? See postured or dorso-linux.

Contributors