Limits

LimitDefault
Renders at once (render.concurrent)2 per organization
Screenshot request body5 MiB, of which html up to 4 MiB
Screenshot viewport320 to 3840 wide, 240 to 2160 high, at dpr 1, 2 or 3
Screenshot variants4 per capture
Video beats100, each with up to 50 steps and 2,000 characters of narration
Video outputUp to 3840 by 2160 at 24, 25, 30, 50 or 60 frames per second
Video request body1 MiB

A request over a limit fails with limit_exceeded or payload_too_large; too many renders at once returns 429 concurrency_limited.

Retention

Screenshots, videos, their artifacts and the raw captures behind restyles are kept for 7 days. An artifact URL works until its url_expires_at; GET /v1/render/artifacts/{artifact_id} returns a fresh URL, valid for 24 hours. After 7 days the artifact is gone and its ID answers 410 artifact_expired.

FAQ

Render captures once the page has loaded and its network has gone quiet for a short window. Content that animates in after that can be caught mid-animation. Wait longer with wait_for_ms, or use wait_until: "networkidle".

Yes. The URLs need no credentials, are served with Content-Security-Policy: sandbox from usercontent.b3os.org, and never set cookies. Each URL expires; store the artifact ID and ask for a fresh URL when you need one.

Yes. Load a vision profile with profile on a screenshot or source.profile on a video.

Set seed and start_time. The recorder runs the page on a virtual clock with seeded randomness and a fixed start date, so a re-render produces the same frames. Sites that change between runs still change.

Yes, restyle it within 7 days: new background, frame, captions, size or formats. Restyling reuses the recorded capture and narration, so no browser runs. Camera moves stay as recorded.

The node's own speech model, through /v1/infer/audio/speech with word timestamps. A video bills only its seconds of output, render.video_s, narration included.

Ask a question... ⌘I