> ## Documentation Index
> Fetch the complete documentation index at: https://docs.beta.b3os.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Render limits and FAQ

Concurrency and size limits for screenshots and videos in the beta, retention of artifacts, and answers to common questions about render.

## Limits

| Limit | Default |
|---|---|
| Renders at once (`render.concurrent`) | 2 per organization |
| Screenshot request body | 5 MiB, of which `html` up to 4 MiB |
| Screenshot viewport | 320 to 3840 wide, 240 to 2160 high, at `dpr` 1, 2 or 3 |
| Screenshot variants | 4 per capture |
| Video beats | 100, each with up to 50 steps and 2,000 characters of narration |
| Video output | Up to 3840 by 2160 at 24, 25, 30, 50 or 60 frames per second |
| Video request body | 1 MiB |

A request over a limit fails with [`limit_exceeded`](/errors#limit_exceeded) or [`payload_too_large`](/errors#payload_too_large); too many renders at once returns [`429 concurrency_limited`](/errors#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`](/errors#artifact_expired).

## FAQ

**Why is part of my page missing from the screenshot?**

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"`.
  **Can I embed artifact URLs in my app or docs?**

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.
  **Can I capture pages behind a login?**

Yes. Load a vision [profile](/vision/profiles) with `profile` on a screenshot or `source.profile` on a video.
  **Will the same script give the same 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.
  **Can I change the look of a video without recording again?**

Yes, [restyle](/render/videos#restyle-a-video) 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.
  **Where does the narration come from?**

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