# Dorso: a macOS posture monitor that blurs your screen when you slouch

> Dorso watches your posture through the Mac camera or AirPods motion sensors and blurs the display when you slump. It is a small MIT-licensed Swift app, and its main trade-off is that the default blur path relies on a private CoreGraphics API.

**tldev/dorso** — A macOS app that blurs your screen when you slouch.

- Repository: https://github.com/tldev/dorso
- Stars: 2,558 · Forks: 75
- Language: Swift
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/tldev-dorso

## The problem Dorso targets, and the people it fits

Sitting badly is a behaviour problem, not an information problem. You already know you are hunched. What you lack is a signal at the moment it happens, delivered without opening a dashboard. Dorso's answer is to take the thing you are looking at, the screen, and degrade it. The README describes the loop plainly: the app monitors posture in real time and, on detecting a slouch, progressively blurs the screen, with the blur clearing instantly once posture improves.

The intended user is a Mac owner who works long stretches at a desk and wants the reminder embedded in the machine rather than in a separate wearable or a phone app. Two tracking paths exist so that the app can run without a camera. AirPods mode uses the motion sensors in AirPods Pro, AirPods Max or 3rd generation and newer, requires macOS 14 or later, and pauses automatically when the earbuds come out. Camera mode uses Apple's Vision framework and needs a working camera with adequate lighting and a clear view of your upper body or face. If neither condition holds, the app has nothing to measure.

## How the posture signal becomes a blur

Camera mode runs two detectors. The primary one is body pose detection through the Vision framework, tracking nose and head position. When the full body is not visible, a face detection fallback tracks face position instead. Either way the app reduces the reading to a single number: vertical head position measured against the baseline you set during calibration. Sit up, click Recalibrate, and that position becomes the reference.

AirPods mode reads a different quantity. It tracks the pitch angle of your head from the motion sensors, which is why the app can run with no camera access at all. The two modes are not interchangeable in what they measure, and the README does not claim they produce equivalent results.

Turning that measurement into a visual penalty is where the design gets opinionated. Sensitivity has five levels from Low to Very High, and the Dead Zone has five levels from None to Very Large. The dead zone is the tolerance band before any blur appears, so a large dead zone means small slouches pass unpunished and only pronounced ones trigger the effect. Blur intensity scales with how far past the threshold you are, which is what the README means by progressive. Everything runs locally; the README states that no images or data are sent to external servers.

## Installing Dorso with Homebrew and running a first calibration

The README lists Homebrew as the recommended install path. One command, and the app is on the machine:

```bash
brew install dorso
```

If you would rather not use a package manager, the manual route is to download the latest Dorso-vX.X.X.dmg or .zip from the GitHub Releases page, open the DMG, and drag Dorso.app into Applications. The README notes the app is signed and notarized, so it should launch without Gatekeeper warnings.

On first launch macOS asks for permission. Camera mode needs camera access; AirPods mode needs Motion and Fitness Activity permission and macOS 14 or later. If you denied either by accident, the README points to System Settings, then Privacy and Security, then Camera or Motion and Fitness Activity.

After launch, Dorso lives in the menu bar behind a person icon. The first real task is calibration: sit up straight, open the menu bar item, and choose Recalibrate. That resets your baseline posture, and from then on the app measures against it. The menu bar also carries the Enabled toggle, the Settings window, a status line showing Monitoring, Slouching or Good Posture, and Quit.

## The private API bet and the Compatibility mode escape hatch

By default Dorso blurs the screen through a private CoreGraphics API, which the README describes as efficient and system-level. That is a real trade-off, not a neutral implementation detail. Private APIs are not part of Apple's public contract. They can change or stop working across macOS releases, and an app that depends on one carries a maintenance obligation that a purely public-API app does not.

The project acknowledges this by shipping a fallback. If the blur does not appear on your system, the README says to enable Compatibility mode in Settings, which switches the blur to NSVisualEffectView. That is a public AppKit view, so it is the safer path, but it is also a different rendering mechanism and the README does not claim the two produce identical output. Anyone evaluating Dorso for a managed fleet or a locked-down machine should test the blur on the exact macOS build in use before rolling it out, because the default path is the one most likely to break silently.

## Where Dorso is the wrong tool

The limitations are stated in the README and they are binding. Camera mode needs a working camera, adequate lighting and a clear view of the upper body or face, so it degrades in a dark room, at an angle, or when you are leaning out of frame. AirPods mode needs macOS 14.0 or later plus AirPods Pro, Max or 3rd generation or newer, so an older Mac or a pair of first or second generation AirPods rules that path out entirely.

There is also no Windows or Linux build. This is a Swift app built with AppKit, AVFoundation, Vision and CoreImage frameworks, and the build script targets macOS 13.0 Ventura or later. If your team is mixed-platform, Dorso covers only the Macs.

A subtler failure mode is the incentive itself. Blurring the screen punishes the whole display, including whatever you are reading. Some people will disable the app within a day rather than tolerate a blurred document. The README offers an out for one specific case, a Pause on the go option that auto-pauses when the laptop display becomes the only screen, which suggests the authors expect the app to be unhelpful in mobile settings.

## How Dorso differs from a wearable posture trainer

The obvious alternative is a hardware posture trainer, a clip or band worn on the upper back that vibrates when you slump. The difference in approach is where the feedback lands and what it costs to run. A wearable measures spinal curvature directly with an accelerometer and delivers a private physical buzz; it works away from the desk and does not need the Mac at all. Dorso measures head position or head pitch through the Mac's own sensors and delivers a public visual penalty on the screen.

That makes Dorso cheaper in hardware terms if you already own compatible AirPods, and it avoids a device you have to remember to put on. It also means the reminder only exists while you are at the Mac, and it is visible to anyone looking over your shoulder. A wearable does not care which computer you use. Dorso does not care whether you remembered to charge a clip. Neither is strictly better; they fail in opposite directions.

## Maintenance, licensing and the file-based command interface

Dorso is MIT licensed, which permits commercial and private use, modification and redistribution provided the copyright notice and permission notice are included. That is a permissive arrangement with no copyleft obligation. It is not legal advice, and anyone embedding the code in a product should read the LICENSE file in the repository rather than rely on a summary.

The repository was last pushed on 2026-08-25 and is not archived, so the codebase has seen recent activity. Release tags cluster on 2026-07-19, with v1.15.1, v1.15.0 and v1.14.2 all dated that day, which suggests a burst of releases rather than a steady cadence. There is a CHANGELOG.md and an appcast.xml at the top level, so update metadata is maintained in-repo.

For scripted control, the README documents a file-based interface. Commands are written to /tmp/dorso-command and responses appear in /tmp/dorso-response. Three commands are listed: capture takes a photo and analyzes pose, blur <0-64> sets the blur level manually, and quit exits the application. That interface is the only programmatic surface the README documents, and it is a plain file drop rather than a socket or an HTTP endpoint. Building from source requires macOS 13.0 or later and Xcode Command Line Tools, installed via xcode-select --install, after which ./build.sh produces build/Dorso.app.

## Conclusion

Dorso suits Mac users on macOS 13 or later who want a passive posture reminder and already own AirPods Pro, Max or 3rd generation or newer, or who accept camera access. Skip it if you need Windows or Linux support, or if you cannot grant camera or Motion and Fitness Activity permission, since both tracking modes depend on one of them. Before adopting, check that the blur actually renders on your display, because the default path uses a private CoreGraphics API and the README's fallback is the Compatibility mode toggle that switches to NSVisualEffectView.

## FAQ

### What is Dorso and which Macs does it run on?

Dorso is a macOS app that monitors your posture and blurs the screen when you slouch. The README lists macOS 13.0 Ventura or later as the system requirement, with AirPods tracking needing macOS 14.0 or later.

### How do I install Dorso?

The README recommends Homebrew with brew install dorso, or you can download the latest DMG or ZIP from the GitHub Releases page and drag Dorso.app into Applications.

### Does Dorso send my camera feed anywhere?

No. The README states that all video data is processed locally on your Mac and that no images or data are ever sent to external servers.

### What do I do if the screen blur does not appear?

The README says to enable Compatibility mode in Settings, which switches the blur from the default private CoreGraphics API to NSVisualEffectView.

### Which AirPods work with Dorso's motion tracking?

AirPods Pro, AirPods Max, or 3rd generation and newer, on macOS 14 or later. The README notes the app pauses automatically when the AirPods are removed from your ears.

## Sources

- [Issues](https://github.com/tldev/dorso/issues)
- [License: MIT](https://github.com/tldev/dorso/blob/main/LICENSE)
- [README](https://github.com/tldev/dorso/blob/main/README.md)
- [Releases](https://github.com/tldev/dorso/releases)
- [tldev/dorso on GitHub](https://github.com/tldev/dorso)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/tldev-dorso
