For scripts and AI agents

Capture link

Any Estanza share link can be opened by a headless browser and screenshotted. Add view options to the link, add capture=1, wait for the page to say it is ready, then take the picture. No API key and no sign-in: the link is the permission, the same link a person would open.

The recipe

With Playwright, in three steps after opening the page:

const page = await browser.newPage({ viewport: { width: 1600, height: 1000 } });
await page.goto('https://app.estanza.casa/share/SHARE_ID?capture=1&view=3d&camera=south-east&time=day');
await page.waitForSelector('html[data-ready="true"]', { timeout: 60_000 });
await page.screenshot({ path: 'home.png' });

The picture is the size of the browser window. Set the viewport to the size you want; 1600 by 1000 is a good default for a model to read.

Parameters

Every option is optional. A value the viewer does not know is ignored and the default is used, so a typo gives you the plain view rather than an error.

capture=1

1 or true. Default: off.

Hides every control, the floor chips and the Estanza mark, frames the home, freezes the quality tier and turns on the ready signal. Room names stay, because they are part of the drawing.

view

3d, 2d. Default: 3d.

Opens the 3D model or the flat floor plan.

floor

a floor id, or its place in the floor list counting from 1. Default: every floor in 3D, the main floor in 2D.

Shows one floor.

room

a room id or slug. Default: none.

Frames one room and opens its floor. It wins over floor when the two disagree.

time

day, night. Default: day.

Lights the 3D model for day or night. The flat plan has no night.

camera

overview, north, north-east, east, south-east, south, south-west, west, north-west. Default: overview.

Where the camera stands, by the compass of the plan. A compass camera looks down at 35 degrees; overview is the angle the viewer opens with.

yaw

degrees, 0 is north and 90 is east. Default: from camera.

Turns the camera around the home. It wins over camera.

pitch

degrees, 5 to 85. Default: from camera.

How far the camera looks down. Values outside the range are held at its ends.

zoom

0.25 to 4. Default: 1.

Above 1 comes closer than the fit, below 1 steps back.

quality

saver, balanced, sharp, full. Default: full on a capture link.

The rendering tier. A capture link never changes tier while it draws.

labels

1 or true, 0 or false. Default: 1.

Room names and areas. In 3D they show only when one floor is on screen.

cables

1 or true, 0 or false. Default: 0.

Cable runs and the sockets, racks and access points they connect, in their cable colours, with the length of each run on the plan. They are drawn where they really are, so in 3D a wall or a sofa can hide them; the flat plan shows them all.

furniture

1 or true, 0 or false. Default: 1.

Furniture, appliances, plants and every other placed item. The framing stays the same with it off.

lights

1 or true, 0 or false. Default: 1.

Light fittings and their plan symbols. With it off the rooms stay lit as before; only the fittings go.

notes

1 or true, 0 or false. Default: 1.

The notes the owner wrote on the plan.

The ready signal

On a capture link the page sets data-ready="false" on its html element and switches it to "true" once the frame is final, which means all of these hold:

  • The home has loaded, with every furniture model and texture it asked for.
  • The camera has framed the home or the room.
  • The fonts the page uses have loaded.
  • At least one frame has been drawn after the last of those, and nothing has been drawn for half a second since.

If anything on screen changes after that, for example the window is resized, it goes back to "false" until the new frame is final. A share link that was revoked never turns ready, so always wait with a timeout.

The page draws only when something changes, so a capture tab left open costs nothing once it is ready.