cdpfleet Pre-launch Get early access

cdpfleet / Live view

Watch or take control

Watch it. Take the wheel.

Any running session can be watched or taken over — by you, a teammate or a person solving a captcha — while your code keeps running. VNC for headful browsers, a screencast for headless Chromium.

  • 2modes: view, control
  • 4viewers per session
  • $0extra to watch

From the dashboard or a link

  • Dashboard: every running session has Watch and Take control.
  • API: ask the router that carries the session (the host of its wsUrl) for a live link — POST /admin/session/live with {"session_id", "mode": "view" | "control"} — and open it in any page.
  • Headful sessions (the default) stream the whole browser window over VNC; open them with noVNC.
  • Headless Chromium-based sessions launched with "live_view": true stream JPEG frames ("screencast"), with mouse, keyboard and navigation messages in control mode.

Control is real input

  • Pages receive trusted mouse and keyboard events, and they count as activity for the idle timeout.
  • Links are single-use and expire after 5 minutes; ask again to reconnect. At most 4 viewers per session.
  • Watching never ends the session and isn't billed; the session ending closes its viewers.
  • WebKit shows and takes keyboard input but ignores clicks.

Frames to your own code

To show the page inside your own tool, stream it: Playwright 1.60's page.screencast sends a JPEG frame to your code every time the page changes, over the session's own connection.

Stream the page's frames to your code
// npm install [email protected]
// Browsers run on cdpfleet, so no `npx playwright install` is needed.
import { chromium } from 'playwright';

const KEY = process.env.CDPFLEET_API_KEY;

// 1. Launch the browser
const res = await fetch('https://starter.cdpfleet.com/chromium/session', {
  method: 'POST',
  headers: { 'x-api-key': KEY, 'content-type': 'application/json' },
  body: JSON.stringify({
    proxy: 'http://user:[email protected]:8080',
    headless: 'new',
  }),
});
if (!res.ok) throw new Error(`launch failed: ${res.status} ${await res.text()}`);
const { wsUrl } = await res.json();

// 2. Connect and drive it
const browser = await chromium.connect(wsUrl, { headers: { 'x-api-key': KEY } });
const page = await browser.newPage();
// Live view: JPEG frames whenever the page changes (Playwright 1.60+)
await page.screencast.start({ quality: 60, onFrame: ({ data }) => {
  console.log(`frame: ${data.length} bytes`); // send it to your UI, a websocket, a file…
} });
await page.goto('https://example.com');
console.log(await page.title());
await page.screencast.stop();
await browser.close(); // ends the session and stops billing

Start from live view

Launch interactive opens a browser on a start page straight into a live view you control — no code at all — and recordings replay what a session showed afterwards.