A MacBook with the lid half closed. The screen content folds away, blurred and darkened towards the far edge.

MacDuo

Close the lid. The screen stays where it was.

Download for Mac DMG Source on GitHub Apple Silicon MacBook · macOS 14+ · signed & notarized · lives in the menu bar

Try the fold

100°

lid open · watching
trigger 100° · full fold
blur 0 px · fade 0 %

On a real MacBook this is driven by the lid angle sensor, and the picture is the live screen, not a screenshot. This sketch runs the same projection in WebGL — the shader is ported from the Three.js recreation of the iPhone Duo fold.

What it does

The picture doesn't rotate with the lid. It stays put in the room.

Every MacBook since 2019 hides a lid angle sensor. MacDuo reads it, captures the built-in display live, and re-projects the picture every frame so that, from where you sit, it looks like the screen is still standing where it was while the glass folds through it. The far edge blurs and fades to black; the hinge edge stays sharp. Open the lid and it unfolds.

The sensor

A hidden HID device (usage page 0x20, usage 0x8A) answers a feature report with the lid angle in whole degrees. No permission needed. A critically damped spring filter turns the 1° steps into motion that follows your hand.

Live, not a screenshot

A ScreenCaptureKit stream of the built-in display feeds IOSurface frames straight into the effect, with MacDuo's own windows excluded so it never captures itself. Cursor, video, animations — all still moving while folded. 120 fps on ProMotion.

Not a rotation — a homography

A central projection from your eye between two planes sharing the hinge: the lid where it was, and the lid where it is now. It's a planar homography that Core Animation renders exactly.

x₁ = K·x₀ / (K − b·y₀)
y₁ = c·y₀ / (K − b·y₀)
b = sin δ · c = −D · K = b(H/2 + e) − D cos δ
MacDuo status window: live lid angle gauge, permission checks, and tuning sliders

In the box

A menu bar app that checks itself.

Open it once. The status window shows the lid angle live, confirms the sensor, the Screen Recording permission and the built-in display, and lets you tune the feel.

  • Trigger angle, projection strength, blur and eye height — saved between launches
  • A demo that sweeps the lid without touching it
  • Only the built-in display is ever captured or covered
  • Built with plain swiftc, no Xcode project; signed and notarized DMG