testing-web-capture

An end-to-end test guide for StreamKit's web-capture gateway demo, which captures or casts rendered web pages through a native Servo plugin. It covers setup, service startup, timeouts, and endpoint checks.

In plain words
What is it for?
Use it to verify clip and cast endpoints, Servo page rendering, timeout settings, plugin freshness, and isolation between browser sessions.
Why use it?
It helps detect stale native plugins, white frames, cross-session rendering leaks, failed page loads, and incorrect gateway responses.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/streamer45/streamkit/testing-web-capture
Any agent
npx skills add streamer45/streamkit --skill testing-web-capture
Clone the repo
git clone --depth 1 https://github.com/streamer45/streamkit

Made for: Claude Code, Codex.

Per session 48 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,676 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00048 $0.01676
Opus 5 $0.00024 $0.00838
Sonnet 5 $0.00010 $0.00335
Haiku 4.5 $0.00005 $0.00168

Measured 2d ago against content hash de2bd9e68d3f, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

testing-web-capture scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

- Live cast: `http://127.0.0.1:8080/cast/<target-url>` → WebM (vp9-sw). curl with `-H 'Accept: video/webm'` to grab raw stream.
.agents/skills/testing-web-capture/SKILL.md · 73 lines

How it starts

The opening of the file, as written. The whole thing — 73 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Testing the web-capture gateway demo

Setup

  1. Go toolchain is required for the gateway (/usr/local/go/bin/go); install from go.dev tarball if missing.
  2. Build + deploy the servo plugin: just build-plugin-native-servo && just copy-plugins-native.
    • Verify freshness: md5sum target/plugins/release/libservo_web.so .plugins/native/servo/libservo_web.so must match and have a recent timestamp. Stale .so files are a known source of white frames / cross-request corruption.
    • skit loads plugins only at startup — restart just skit after copying.
  3. Start backend: just skit (127.0.0.1:4545; auth Auto disables auth on loopback, no token needed locally).
  4. Start gateway: cd examples/web-capture && go run ./cmd/gateway --listen :8080 --skit-url http://127.0.0.1:4545.
    • --load-timeout-secs N / GATEWAY_LOAD_TIMEOUT_SECS (default 5) sets servo's load_timeout_secs in both pipeline templates. It must stay below the gateway's hard-coded 8s mseReadyTimeout, or cast viewers 503.
    • To test a non-default value, run a second gateway on another port (e.g. --listen :8081 --load-timeout-secs 2); both can share one skit.

Endpoints

  • Finite clip: http://127.0.0.1:8080/clip/dur=20s,res=1280x720/<target-url> → MP4 (h264-sw).
  • Live cast: http://127.0.0.1:8080/cast/<target-url> → WebM (vp9-sw). curl with -H 'Accept: video/webm' to grab raw stream.
  • SSRF guard blocks loopback/private targets — use public sites (streamkit.dev is dark-themed, example.com light-themed: a good high-contrast pair for leak checks).

Verifying frames (don't trust playback alone)

  • Extract frames: ffmpeg -i clip.mp4 -vf "select='eq(n,30)+eq(n,300)'" -vsync 0 f_%d.png
  • Live cast WebM files have no cues — ffmpeg -ss/-sseof seeking silently returns the first frame. Extract frames with select='eq(n,N)' full decodes instead, and beware lexicographic sorting of %d-numbered frame files.
  • Pixel stats with PIL: min/max grey and dark-pixel fraction distinguish blank white (min≈255), blank black/pre-paint (max≈0), and real content.
  • Since the first-load gate (plugin >= 0.2.2), clips/casts should show page content from frame 0 (the node holds emission until the page is ready, capped by load_timeout_secs, default 30s). Pre-0.2.2 builds may show all-black cold-start clips or blank lead-ins.
  • Since plugin >= 0.2.3, "ready" is load-complete OR ~2s after first paint — ad-heavy pages that never fire their load event no longer stall the full timeout. The gateway also caps load_timeout_secs at 5s (GATEWAY_LOAD_TIMEOUT_SECS), so worst-case time-to-first-byte through the gateway is ~5s plus one GOP (~1s).
  • Some pages (e.g. streamkit.dev) may still show a single white first frame — the page's own pre-theme paint, not a gate failure.
  • Testing the load-timeout expiry path via the gateway is hard: SSRF blocks local hanging servers and public "slow" endpoints (httpstat.us sleep, closed ports) fail fast rather than hang. In practice pages release via load-complete or the post-paint branch, so the expiry warn may never fire — say so rather than claiming that branch was covered.
  • The gate branch that fired is visible in the skit log (plugin logs, grep emission /tmp/skit.log): Initial page loaded; starting frame emission (load-complete), Initial page painted but load still pending after 2s; … (the >=0.2.3 post-paint branch — expect this on ad-heavy pages like cnn.com/theverge.com, ~2.2s after servo init), or Page did not finish loading within Ns; … (timeout cap).

Read the full file on GitHub · 73 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 73 lines · 48 tokens per session scan A de2bd9e68d3f

Subscribe to this mod's changes

testing-web-capture is a skill published in the GitHub repository streamer45/streamkit (21 stars, last pushed 9d ago), licensed MPL-2.0. It adds 48 tokens to every session and 1,676 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

moq

Build live video, audio, and real-time data apps with Media over QUIC (MoQ). Use when adding live streaming, conferencing, voice AI, or real-time pub/sub to an app; when integrating the @moq/ npm packages, moq- Rust crates, or the Python/Kotlin/Swift/Go/C bindings; or when running a moq-relay server or a gateway…

moq-dev/moq · 104 tokens

qa-testing

Verify your work by actually operating the app or website you changed, instead of assuming it works. Strongly recommended whenever you build, modify, or debug a web app, website, or desktop GUI app. Drive real browsers with the agent-browser CLI and native desktop apps with the cua-driver CLI. These are installed on…

openinterpreter/openinterpreter · 77 tokens

webapp-testing

Start/reuse a local app, wait for readiness, inspect rendered state/console/network, act from observed selectors, and verify with evidence.

Hmbown/CodeWhale · 32 tokens

p5js

Production pipeline for interactive and generative visual art using p5.js. Creates browser-based sketches, generative art, data visualizations, interactive experiences, 3D scenes, audio-reactive visuals, and motion graphics — exported as HTML, PNG, GIF, MP4, or SVG. Covers: 2D/3D rendering, noise and particle systems…

moltis-org/moltis · 152 tokens

verify

Drive an engine app headlessly in a pty, record a video of the whole verification, and open a summary page (video + timeline + checks) with pixel open.

zenbu-labs/terminal-browser · 37 tokens

moli-webfetch

Fetch, inspect, crawl, and capture live, JavaScript-rendered websites with Moli. Use when Codex needs current web content, web research, fact lookup, link following, a bounded crawl, client-rendered or response-gated content, network diagnostics, or a standalone HTML, Markdown, JSON, semantic-tree, viewport or…

lexmount/moli · 90 tokens