v1.3.0

jo-inc/camofox-browserv1.3.0Feb 22, 2026by skyfallsin

AI Summary

Ports YouTube transcripts, snapshot screenshots with image capture, and large page pagination from production.

Key Highlights

  • YouTube Transcript Extraction endpoint fetches captions using yt-dlp without an API key.
  • Snapshot Screenshots return both ARIA trees and base64 PNGs in a single call.
  • Large Page Pagination truncates snapshots to 50,000 characters to fit LLM context windows.
  • Reliability fixes include click timeout handling and tab recycling logic.

New Features

  • YouTube transcripts
  • Snapshot screenshots
  • Large page pagination
  • Reliability fixes

Full Release Notes

Three new capabilities ported from [askjo.ai](https://askjo.ai)'s production deployment, battle-tested over ~2 weeks on Fly.io handling real AI agent traffic.

### YouTube Transcript Extraction

`POST /youtube/transcript` fetches captions from any YouTube video. Uses [yt-dlp](https://github.com/yt-dlp/yt-dlp) under the hood — no YouTube API key, no browser playback, no ads. ~5 seconds per video.

```bash
curl -X POST http://localhost:9377/youtube/transcript \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'
```

Falls back to a browser-based intercept method if yt-dlp isn't installed — this works but is slower (must wait through ads).

**Dockerfile now includes `python3-minimal` + `yt-dlp`.** For local dev, `pip install yt-dlp` or `brew install yt-dlp`.

### Snapshot Screenshots

`GET /tabs/:id/snapshot?includeScreenshot=true` returns a base64-encoded PNG alongside the ARIA accessibility tree in a single call. LLM agents get both the structured text and the visual layout without a separate round-trip.

9 new e2e tests including pixel-level PNG validation.

### Large Page Pagination

Snapshots of large pages (product listings, search results) were returning 200KB+ ARIA trees that blew out LLM context windows. Now automatically truncated to 50,000 chars with offset-based pagination:

- Truncated responses include `hasMore: true` and `nextOffset`
- Agents paginate with `?offset=50000`
- Cached full snapshot avoids re-rendering on subsequent chunks
- Cache invalidates on navigation or click

6 e2e + 15 unit tests.

### Reliability Fixes

- **Click timeout** — Playwright throws `"Timeout"` (capital T) but the catch checked for lowercase. Clicks on slow elements silently failed instead of retrying with CSS fallback.
- **buildRefs timeout** — 12 second cap (was unbounded, hung forever on pages with infinite iframes)
- **Tab recycling** — when global tab limit is hit, closes the oldest idle tab instead of returning 429
- **Health probe** — periodic lightweight navigation to detect zombie browser processes
- **refsAvailable flag** — navigate response tells agents whether element refs were successfully built

### Tests

17 suites, 151 tests passing (+30 new since v1.2.0).