First launch
- macOS asks for Screen Recording. Allow Spectate in System Settings › Privacy & Security › Screen & System Audio Recording, then quit and reopen Spectate.
- macOS 15 and later may also ask for Local Network access. Allow it; that is how the
spectate.localname is published.
Sharing your screen
- Menu › Source: pick a display, a single window, or an app. Switching while sharing restarts the stream on the new source.
- A display shares everything on it. A window shares that one window and nothing else, so an app’s floating panels (Lightroom’s Masks panel, for one) stay hidden. An app entry, marked
(app), shares every window that app shows, panels included, and none of the desktop behind them. - Some apps hide their floating panels from window and app capture even so; if a panel goes missing from the stream, share the display instead.
- Start Sharing (⌘S). The first line of the menu shows what is shared and how many people are watching.
- Tell the room to open
http://spectate.local/. The menu also shows an address with the Mac’s IP; give that one to anyone whose machine can’t resolve the name (some Windows laptops). - Before you start sharing, and while the stream reconnects, viewers see the idle screen. While you share they see only your screen.
Participant uploads
- Menu › Uploads turns the upload page on. It is off every time Spectate starts.
- Participants open
http://spectate.local/upload/(the menu has a copy item), type their name once, and drop their photos. Phones work too. - Files land in the upload folder (Menu › Upload Folder; the default is
~/Pictures/Spectate Uploads/<date>) namedSam-DSC_1234.NEF. One Folder per Participant puts them inSam/DSC_1234.NEFinstead. A repeated name gets-2,-3; nothing is overwritten, and a file only appears once it has fully arrived. - The menu shows the running count and the last participant who finished, so you can say “got yours, Sam”. Reveal in Finder opens the folder when review starts.
- Turn Uploads off when everyone is done. While off, the page tells participants to ask you.
The stream line
While sharing, the menu shows a line like Wi-Fi · 8 fps · 12 viewers · 96 Mbps.
- Wi-Fi or Ethernet: how this Mac reaches the network.
- fps: the rate viewers get while your screen is changing. Nothing is sent while the screen is still, so an image sitting on screen costs nothing. Half a second after you stop moving, one full-quality frame goes out.
- Mbps: what the stream is using right now, measured. Every viewer receives their own copy.
Spectate picks the motion rate each second from a bandwidth budget (300 Mbps by default, meant for a room where viewers sit near the router). More viewers means a lower rate, never below 4; a single viewer on Ethernet gets 20.
Network tips
- Plug this Mac into the router with a USB-C Ethernet adapter when you can. On Wi-Fi every frame crosses the air twice (up from this Mac, down to each viewer); on Ethernet only once, so the room gets roughly double the frame rate.
- Keep viewers on the same Wi-Fi network as this Mac, close to the router. Guest networks that isolate clients will block the address.
- If someone can’t reach
http://spectate.local/, try the IP address from the menu first; if that fails too, they are on a different network.
Updates
Spectate looks for a new version once a day and when it launches, and never while you are sharing. When one is ready you see a dialog with what changed and an Install button; nothing installs until you say so. To look right now, choose Check for Updates… from the menu.
The config file
Optional, at ~/Library/Application Support/Spectate/config.json. Changes take effect after a relaunch. Every key is optional.
{
"port": 80,
"hostname": "spectate",
"scale": 2.0,
"jpegQuality": 0.92,
"motionQuality": 0.7,
"fps": 20,
"budgetMbps": 300,
"motionFps": 12
}
hostname: the name viewers type, published as<hostname>.local. Letters, digits, hyphens. An empty string turns the name off.scale: 2.0 captures Retina pixels (sharp text), 1.0 captures at point size.jpegQuality: the settled, full-size frame.motionQuality: frames sent while the screen moves (they go out at half size).fps: capture ceiling.motionFps: pin the motion rate instead of letting the budget decide.budgetMbps: the airtime the stream may use in the room; 150 for a poor room.port: 80 unless something else on this Mac already uses it.
Branding the idle screen
A brand block in the config file puts a logo or name and your own message on the idle screen, the tab title, and this page. Nothing is drawn while the screen is shared.
"brand": {
"name": "Muench Workshops",
"waiting": "Waiting for your Pro to start sharing",
"disconnected": "Reconnecting to your Pro’s screen",
"image": "~/Library/Application Support/Spectate/brand/logo.png",
"font": "~/Library/Application Support/Spectate/brand/Lato-Regular.woff2",
"color": "#E2791B"
}
image (png, jpg, gif, webp, svg) and font (woff2, woff, ttf, otf) are files on this Mac; Spectate serves them to viewers itself, so they work with no internet. Without an image, the name is shown in color.
A vendor build of Spectate carries its own hostname and branding built in. This config file still applies on top of it, key by key: a config with only {"port": 8080} keeps the vendor’s hostname and branding, and setting "brand": null removes the vendor’s branding entirely.