# Unroll > Unroll a carbonized Herculaneum papyrus (PHerc. 139) in the browser: 37 traced windings in 3D with > X-ray and ink layers, a close-up viewer, Destroy toys, and "Open your own" for other scrolls. > Everything a person can do in the page, an agent can do through window.unroll or the URL. ## Docs - [AGENTS.md](/AGENTS.md): how to drive the page as an agent, with examples - [api.json](/api.json): machine-readable API (every method, parameter, event, URL parameter, key) and the scroll manifest JSON schema - [Adding a scroll](/docs/ADDING_A_SCROLL.md): the manifest format and the precompute pipeline - [EMBED.md](/docs/EMBED.md): embedding in an iframe and the postMessage API - [oembed.json](/oembed.json): oEmbed - [CHANGELOG.md](/CHANGELOG.md): versions; the current one is in /version.json ## Quick start - Open the page, then `await unroll.waitFor('ready')`. - `await unroll.getState()` returns the whole state as JSON; `await unroll.describe()` returns it in words. - `await unroll.schema()` lists every method with its parameters. - Every call returns a Promise of `{ ok: true, ... }` or `{ ok: false, error, code }`. Nothing throws. - Batch with `unroll.run([['setLayer', 'xray'], ['setUnroll', 0.5]])`. ## URL parameters (query string or hash) scroll (s), t (0..1), layer (l: xray, ink, overlay), focus (winding id), view (main, overlay, compare), compare (0..1), panel (about, help, open, why), destroy=1, tool (tear, crush, burn, water), sandbox=1, cam=px,py,pz,tx,ty,tz. Example: /?scroll=PHerc0139&t=0.6&layer=overlay&focus=w047&compare=0.3 `await unroll.deepLink(true)` returns the link for the current view. ## Optional - [README](/README.md): the data, the layers and how they were made