The simulator's framebuffer is read where it is drawn and encoded on the same machine. Nothing is recorded, nothing is polled, and no screen-recording permission is ever asked for.
Frames come from the simulator's own IOSurface and go into the Mac's video encoder without a copy. A static screen costs almost nothing; a moving one gets all 60.
Your gestures are replayed with the spacing your finger actually had, so a swipe is a swipe — with the fling velocity iOS expects, not a tap that happened to move.
WebRTC where it works, and a WebSocket path that still shows a picture on a hotel wifi or a phone on cellular. Bitrate follows the link rather than fighting it.
Start a session with a project key, push a build into a session somebody is already watching, and read what it cost. That is the whole surface.
// npm i @palgroup/simstream const sim = new SimStream({ baseUrl, apiKey }); // a device, waiting in line only if the fleet is full const session = await sim.startSession({ wait: true }); open(session.url); // a new build, onto the simulator already on screen await sim.pushBuild(signedUrl, { version: etag }); // what each session cost, per project await sim.usage();
A session ends two minutes after the last touch, so a tab somebody forgot is not a bill. Usage is recorded per project with the rate that was in force when each session ended — a price change never rewrites what you already used.