Stream your Mac desktop to Snap Spectacles — multi-monitor, virtual displays, low latency.
Demo: https://youtu.be/ucbPuiMp8xM?t=59
Website: https://spec-desk.com
Download (macOS DMG): Latest Release
SpecDesk lets you use your Spectacles as extra monitors for your Mac. It streams your desktop displays in real-time using WebRTC (LiveKit), with ~200-500ms latency.
There are two ways to stream:
- Website (any OS) — Open spec-desk.com in Chrome/Edge, create a room, share your screen. Works on Mac, Windows, and Linux.
- Mac app — A native macOS app with multi-monitor support, built-in virtual display creation, and hardware-accelerated capture via ScreenCaptureKit.
- Multi-monitor streaming — Stream multiple displays at once, positioned correctly in AR based on your display arrangement
- Virtual display creation (Mac app) — Create extra screens directly from the app using native macOS APIs
- Low latency — WebRTC streaming via LiveKit instead of screenshots or RTSP
- Easy pairing — Room codes (ABCD-1234) or QR code scanning. No tunnels, no port forwarding
- Browser fallback — No Mac? Share your screen from any modern browser
┌─────────────────────┐ ┌─────────────────┐ ┌──────────────┐
│ SpecDesk Mac App │ │ LiveKit Cloud │ │ Spectacles │
│ (ScreenCaptureKit) │─────▶│ (WebRTC SFU) │─────▶│ Lens │
│ │ │ │ │ (WebView) │
│ Alt: Browser at │ │ │ │ │
│ spec-desk.com │─────▶│ │─────▶│ │
└─────────────────────┘ └─────────────────┘ └──────────────┘
- SpecDesk Mac app (or the website) captures your displays and publishes video tracks to LiveKit Cloud
- Spectacles Lens loads a WebView that connects to the same LiveKit room and displays the video streams
- For multi-monitor setups, display layout metadata is sent so the Lens positions each screen correctly in 3D space
- Download the DMG from Releases
- Open SpecDesk, create a room
- Enter the room code on your Spectacles Lens
- Select displays and start streaming
- Open spec-desk.com/share in Chrome/Edge
- Create a room and click "Share Screen"
- Enter the room code on your Spectacles Lens
SpecDesk/
├── lens/ # Spectacles Lens (Lens Studio project)
├── webapp/ # Next.js web application
│ └── .env.example # Environment variable template
├── mac-app/ # SpecDesk macOS app (Swift/SwiftUI)
├── edge-functions/ # Snap Cloud (Supabase) Edge Functions
│ ├── get-room/ # Room lookup proxy
│ ├── get-livekit-token/ # LiveKit token generator
│ ├── upload-qr-frame/ # QR camera frame upload to Storage
│ └── decode-qr/ # QR code decoder
├── database/ # SQL migrations for Snap Cloud
│ └── migrations/
├── SETUP.md # Full self-hosting setup guide
└── LICENSE
Want to run your own instance? See SETUP.md for step-by-step instructions covering:
- Snap Cloud (Supabase) — Database + Edge Functions
- LiveKit Cloud — WebRTC streaming
- Vercel — Webapp hosting
- Lens Studio — Configuring the Lens
- macOS app — Building from source
| Component | Technology |
|---|---|
| Spectacles Lens | TypeScript, Lens Studio, WebView, SpectaclesInteractionKit |
| Webapp | Next.js 14, React, LiveKit Client SDK, Supabase |
| Mac app | Swift/SwiftUI, ScreenCaptureKit, LiveKit Swift SDK, CGVirtualDisplay |
| Streaming | LiveKit Cloud (WebRTC SFU) |
| Database | Snap Cloud (Supabase) — PostgreSQL + Edge Functions |
| Hosting | Vercel |
- Spectacles: Snap Spectacles (5th Gen)
- Mac app: macOS 12.3 (Monterey) or later
- Website: Chrome, Edge, or any WebRTC-capable browser
Contributions are welcome! Feel free to open issues or submit pull requests.
MIT — see LICENSE