> ## Documentation Index
> Fetch the complete documentation index at: https://tbd-6fc993ce-hypeship-docs-website-deploy-hook.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Scrapybara

[Scrapybara](https://scrapybara.com/) has shut down their virtual desktop and browser service as of **October 15, 2025**. If you were using Scrapybara for browser automation, Kernel is here to help you migrate seamlessly.

## Key Concepts

| Feature           | Scrapybara                                                              | Kernel                                                                                                                                  |
| ----------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Start Browser** | `client.start_browser()`                                                | `kernel.browsers.create()`                                                                                                              |
| **Standby Mode**  | `instance.pause()` / `instance.resume()`                                | Automatic standby mode                                                                                                                  |
| **CDP URL**       | `instance.get_cdp_url().cdp_url`                                        | Returns `cdp_ws_url` in create response                                                                                                 |
| **Live View**     | `instance.get_stream_url().stream_url`                                  | Returns `browser_live_view_url` in create response                                                                                      |
| **Stealth Mode**  | ❌ Not available                                                         | Create browser with `stealth: true`                                                                                                     |
| **Replays**       | ❌ Not available                                                         | `kernel.browsers.replays.start()` and `kernel.browsers.replays.stop()`                                                                  |
| **Save Auth**     | `instance.browser.save_auth(name="default")`                            | Create [Profile](/auth/profiles). Then create browser with `kernel.browsers.create(profile={"name": "profile1", "save_changes": true})` |
| **Click**         | `instance.computer(action="click_mouse", button="left")`                | `kernel.browsers.computer.click_mouse(id=session_id, x=100, y=200)`                                                                     |
| **Drag**          | `instance.computer(action="drag_mouse", path=[[100, 200], [300, 400]])` | `kernel.browsers.computer.drag_mouse(id=session_id, path=[[100, 200], [150, 220], [200, 260]])`                                         |
| **Screenshot**    | `instance.computer(action="take_screenshot").base64_image`              | `kernel.browsers.computer.capture_screenshot(id=session_id)`                                                                            |

## How to migrate

### Basic Browser Creation

**Scrapybara**

```python theme={null}
from scrapybara import Scrapybara
from playwright.async_api import async_playwright

client = Scrapybara(api_key="your_api_key")
instance = client.start_browser(timeout_hours=1)
cdp_url = instance.get_cdp_url().cdp_url

async with async_playwright() as p:
    browser = await p.chromium.connect_over_cdp(cdp_url)
    page = browser.contexts[0].pages[0]
    await page.goto("https://example.com")
    await browser.close()

instance.stop()
```

**Kernel**

```python theme={null}
from kernel import Kernel
from playwright.async_api import async_playwright

kernel = Kernel()
kernel_browser = kernel.browsers.create(timeout_seconds=3600)
cdp_url = kernel_browser.cdp_ws_url

async with async_playwright() as p:
    browser = await p.chromium.connect_over_cdp(cdp_url)
    page = browser.contexts[0].pages[0]
    await page.goto("https://example.com")
    await browser.close()

await kernel.browsers.delete_by_id(kernel_browser.session_id)
```

### Save & Reuse Authentication

**Scrapybara**

```python theme={null}
# First session - save auth
instance = client.start_browser()
# ... login to website via Playwright ...
auth_state = instance.browser.save_auth(name="my-login")
instance.stop()

# Second session - load auth
instance2 = client.start_browser()
instance2.browser.authenticate(auth_state_id=auth_state.auth_state_id)
# ... browser now has saved cookies ...
```

**Kernel**

```python theme={null}
# First session - save auth
profile = await kernel.profiles.create(name="my-login")
kernel_browser = await kernel.browsers.create(
    profile={"name": "my-login", "save_changes": True}
)
# ... login to website via Playwright ...
await kernel.browsers.delete_by_id(kernel_browser.session_id)

# Second session - load auth
kernel_browser2 = await kernel.browsers.create(
    profile={"name": "my-login"}
)
# ... browser now has saved cookies ...
```

### File Download

**Scrapybara**

```python theme={null}
instance = client.start_browser()
# ... trigger download in browser ...
# Then use file operations
downloaded_file = instance.file(command="read", path="/download/path")
```

**Kernel**

```python theme={null}
kernel_browser = await kernel.browsers.create()
# ... trigger download in browser via Playwright ...
# Then read from filesystem
file_response = await kernel.browsers.fs.read_file(
    kernel_browser.session_id,
    path="/tmp/downloads/file.pdf"
)
await file_response.write_to_file("local-file.pdf")
```

### Long-Running Sessions

**Scrapybara**

```python theme={null}
# Pause/resume for long-running sessions
instance = client.start_browser(timeout_hours=24)
# ... do some work ...
instance.pause()  # Pause to save costs
# ... later ...
instance.resume()  # Resume work
```

**Kernel**

```python theme={null}
# Automatic standby mode + extended timeout
kernel_browser = await kernel.browsers.create(
    timeout_seconds=86400
)
# ... do some work ...
# Browser enters standby mode between connections

# Later - reuse the exact browser instance with full state
kernel_browser2 = await kernel.browsers.create(
    timeout_seconds=86400
)
```

### Computer Controls

Both Scrapybara and Kernel provide Computer Controls APIs that allow you to programmatically control the browser environment at the system level - including mouse movements, clicks, keyboard input, and screenshots.

**Scrapybara**

```python theme={null}
instance = client.start_browser()

# Click at specific coordinates
instance.computer(action="click_mouse", button="right", coordinates=[300, 400])

# Drag from one position to another
instance.computer(action="drag_mouse", path=[[100, 200], [300, 400]])

# Type text
instance.computer(action="type_text", text="Hello World")

# Take a screenshot
screenshot = instance.computer(action="take_screenshot").base64_image
```

**Kernel**

```python theme={null}
kernel_browser = await kernel.browsers.create()

# Click at specific coordinates
kernel.browsers.computer.click_mouse(
    id=kernel_browser.session_id,
    x=100,
    y=200
)

# Drag from one position to another
kernel.browsers.computer.drag_mouse(
    id=kernel_browser.session_id,
    path=[[100, 200], [150, 220], [200, 260]],
    button="left",
    delay=0,
    steps_per_segment=10,
    step_delay_ms=50,
    hold_keys=["Shift"]
)

# Type text with optional delay
kernel.browsers.computer.type_text(
    id=kernel_browser.session_id,
    text="Hello World",
    delay=100
)

# Take a full screenshot
with open('screenshot.png', 'wb') as f:
    image_data = kernel.browsers.computer.capture_screenshot(id=kernel_browser.session_id)
    f.write(image_data.read())
```

For a complete reference of all available Computer Controls methods in Kernel, see the [Computer Controls documentation](/browsers/computer-controls).

## Full API Comparison

| Feature                 | Scrapybara                                                                           | Kernel                                                                                                                                  |
| ----------------------- | ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Create Browser**      | `client.start_browser()`                                                             | `kernel.browsers.create()`                                                                                                              |
| **Get CDP URL**         | `instance.get_cdp_url().cdp_url`                                                     | Returns `cdp_ws_url` in create response                                                                                                 |
| **Get Live View**       | `instance.get_stream_url().stream_url`                                               | Returns `browser_live_view_url` in create response                                                                                      |
| **Delete Browser**      | `instance.stop()`                                                                    | `kernel.browsers.delete_by_id(session_id)`                                                                                              |
| **List Browsers**       | `kernel.get_instances()`                                                             | `kernel.browsers.list()`                                                                                                                |
| **Save Auth State**     | `instance.browser.save_auth(name="default")`                                         | Create [Profile](/auth/profiles). Then create browser with `kernel.browsers.create(profile={"name": "profile1", "save_changes": True})` |
| **Load Auth State**     | `instance.browser.authenticate(auth_state_id="xyz")`                                 | `kernel.browsers.create(profile={"name": "profile1"})`                                                                                  |
| **Pause/Resume**        | `instance.pause()` / `instance.resume()`                                             | Automatic standby mode                                                                                                                  |
| **Screenshot**          | `instance.screenshot()`                                                              | Use Playwright or Puppeteer                                                                                                             |
| **Timeout Config**      | `timeout_hours` parameter                                                            | `timeout_seconds` parameter                                                                                                             |
| **Stealth Mode**        | ❌ Not available                                                                      | Create browser with `stealth: true`                                                                                                     |
| **Headless Mode**       | ❌ Not available                                                                      | Create browser with `headless: true`                                                                                                    |
| **Session Persistence** | Auth state only                                                                      | Full browser state via creating browser with extended timeout                                                                           |
| **Video Replays**       | ❌ Not available                                                                      | `kernel.browsers.replays.start()` and `kernel.browsers.replays.stop()`                                                                  |
| **File Upload**         | `instance.upload()`                                                                  | `kernel.browsers.fs.upload()` or Playwright                                                                                             |
| **File Download**       | Via browser, then `instance.file()`                                                  | `kernel.browsers.fs.read_file()`                                                                                                        |
| **Process Control**     | `instance.bash()`                                                                    | `kernel.browsers.process.*`                                                                                                             |
| **Proxy Support**       | ❌ Not available                                                                      | Create [Proxy](/proxies/overview#create-a-proxy). Then create browser with `kernel.browsers.create(proxy_id=proxy.id)`                  |
| **Click Mouse**         | `instance.computer(action="click_mouse", button="left")`                             | `kernel.browsers.computer.click_mouse(id=session_id, x=100, y=200)`                                                                     |
| **Move Mouse**          | `instance.computer(action="move_mouse", coordinates=[100, 200])`                     | `kernel.browsers.computer.move_mouse(id=session_id, x=100, y=200)`                                                                      |
| **Drag Mouse**          | `instance.computer(action="drag_mouse", path=[[100, 200], [300, 400]])`              | `kernel.browsers.computer.drag_mouse(id=session_id, path=[[100, 200], [150, 220], [200, 260]])`                                         |
| **Scroll**              | `instance.computer(action="scroll", coordinates=[100, 100], delta_x=0, delta_y=200)` | `kernel.browsers.computer.scroll(id=session_id, delta_x=0, delta_y=100)`                                                                |
| **Type Text**           | `instance.computer(action="type_text", text="Hello")`                                | `kernel.browsers.computer.type_text(id=session_id, text="Hello")`                                                                       |
| **Press Key**           | `instance.computer(action="press_key", keys=["ctrl", "c"])`                          | `kernel.browsers.computer.press_key(id=session_id, keys=["Ctrl+t"])`                                                                    |
| **Take Screenshot**     | `instance.computer(action="take_screenshot").base64_image`                           | `kernel.browsers.computer.capture_screenshot(id=session_id)`                                                                            |
| **Get Cursor Position** | `instance.computer(action="get_cursor_position").output`                             | Use `move_mouse` with tracking                                                                                                          |

***

## Need Help?

* **Contact Us** on [Discord](https://discord.gg/FBrveQRcud)
* **Sign up** [here](https://dashboard.onkernel.com/sign-up)
* **Check out** our open source repos [here](https://github.com/onkernel/kernel-images)
