Appearance
Fresh 🌱
Replays ​
Record and view browser sessions as mp4 videos
Replays capture browser sessions as video recordings that you can view or download later. You have full control over when replays start and stop, allowing you to capture specific interactions or workflows.
Starting and stopping recordings ​
To start recording a browser session, use the replays API on an active browser:
typescript
import Kernel from '@onkernel/sdk';
const kernel = new Kernel();
const kernelBrowser = await kernel.browsers.create();
const replay = await kernel.browsers.replays.start(kernelBrowser.session_id);
console.log(`Recording started with ID: ${replay.replay_id}`);
// Perform some automation...
await kernel.browsers.replays.stop(replay.replay_id, { id: kernelBrowser.session_id });
console.log('Recording stopped and processing');python
from kernel import Kernel
kernel = Kernel()
kernel_browser = kernel.browsers.create()
replay = kernel.browsers.replays.start(kernel_browser.session_id)
print(f"Recording started with ID: {replay.replay_id}")
# Perform some automation...
kernel.browsers.replays.stop(replay_id=replay.replay_id, id=kernel_browser.session_id)
print("Recording stopped and processing")Multiple recordings per session ​
You can create multiple replay recordings for a single browser session. Each recording gets a unique replay_id and can be started and stopped independently:
typescript
const replay1 = await kernel.browsers.replays.start(kernelBrowser.session_id);
// Perform some automation...
await kernel.browsers.replays.stop(replay1.replay_id, { id: kernelBrowser.session_id });
const replay2 = await kernel.browsers.replays.start(kernelBrowser.session_id);
// Perform different automation...
await kernel.browsers.replays.stop(replay2.replay_id, { id: kernelBrowser.session_id });python
replay1 = kernel.browsers.replays.start(kernel_browser.session_id)
# Perform some automation...
kernel.browsers.replays.stop(replay_id=replay1.replay_id, id=kernel_browser.session_id)
replay2 = kernel.browsers.replays.start(kernel_browser.session_id)
# Perform different automation...
kernel.browsers.replays.stop(replay_id=replay2.replay_id, id=kernel_browser.session_id)Downloading all replays ​
To access all replays for a browser session, list and access them via url or as downloads:
typescript
import fs from 'fs';
import { Buffer } from 'buffer';
const replays = await kernel.browsers.replays.list(kernelBrowser.session_id);
for (const replay of replays) {
console.log(`Replay ID: ${replay.replay_id}`);
console.log(`View URL: ${replay.replay_view_url}`);
const videoData = await kernel.browsers.replays.download(
replay.replay_id,
{ id: kernelBrowser.session_id }
);
const content = await videoData.blob();
const buffer = Buffer.from(await content.arrayBuffer());
const filename = `replay-${replay.replay_id}-${kernelBrowser.session_id}.mp4`;
fs.writeFileSync(filename, buffer);
}python
import aiofiles
replays = kernel.browsers.replays.list(kernel_browser.session_id)
for replay in replays:
print(f"Replay ID: {replay.replay_id}")
print(f"View URL: {replay.replay_view_url}")
video_data = kernel.browsers.replays.download(
replay_id=replay.replay_id,
id=kernel_browser.session_id
)
content = video_data.read()
filename = f"replay-{replay.replay_id}-{kernel_browser.session_id}.mp4"
async with aiofiles.open(filename, 'wb') as f:
await f.write(content)
print(f"Saved replay to {filename}")