Get started API reference What it can picture Plans and limits Using the picture When a feed fails Paying
What it can and cannot picture
The limits, in one place. Everything here is what the service does today.
Sizes
You choose a canvas: 1920x1080 and 1080x1920 (1080p, landscape and portrait) or 3840x2160 and 2160x3840 (4K, landscape and portrait). 1080p is in every plan; 4K is on Standard and Pro (Plans and limits). Camera and push feeds can also use native.
| feed | what you get |
|---|---|
| page | The page is drawn in a browser window exactly as big as the canvas, and you get that window's picture. A page taller than the window is cut off at the bottom: nothing scrolls. The background colour is not used. |
| camera or push, with a canvas | A picture bigger than the canvas is shrunk to fit, keeping its shape. A smaller one is never enlarged: it sits in the middle of the canvas on the background colour you chose. The result is exactly the canvas size. |
camera or push, native | The picture keeps its own size. Only a picture bigger than 4K (3840 by 2160, or 2160 by 3840 for a portrait picture) is shrunk to fit. |
Background colour: black (#000000) unless you choose another with background.
Format: png or jpg. A page in jpg is saved at quality 85. A pushed picture or a camera frame is always drawn again by Stillframe, so its hidden details (a phone's location, the camera model) are not passed on.
Ports
An address may use port 80, 443, and 1024 to 65535. If the address has no port, the scheme decides: 80 for http, 443 for https. An RTSP camera may use port 554, and 1024 to 65535; with no port it is 554.
This is checked when you make or change a feed, and again for every connection a picture takes, including the ones a page makes for its own scripts and images and any redirect it follows. A page that sends the browser to a port outside that list fails with blocked_egress. Only the number is checked, not whether it suits the scheme: http://example.com:443 is allowed.
Private addresses
Stillframe refuses anything that is not plainly on the public internet:
- private ranges (
10.,172.16.to172.31.,192.168.), loopback (127.,::1), link-local (169.254.), carrier-grade (100.64.to100.127.), multicast and reserved ranges, and the IPv6 equivalents; - the addresses of the Stillframe machine itself;
- an address written in an odd way that means one of those (
0x7f000001,2130706433,127.1); - a name that points to one of them. If a name has several addresses and any one is private, the whole name is refused;
- a fixed list of names Chromium contacts on its own (Google update and sign-in services).
So a dashboard that only works inside your network cannot be photographed by Stillframe. Take the picture there and push it. The refusal shows as blocked_address when you make the feed and blocked_egress when a picture is taken.
Pages behind a login
A page feed has no field for a user name, a password or a cookie, and the browser starts fresh each time with nothing remembered. A page that needs you to sign in shows its sign-in page, and that is the picture you get. For a dashboard that needs a login, push the picture from where you are signed in.
Sites that refuse us
Stillframe visits from a data centre. Some sites answer that with an error (http_403, http_429); the feed then fails and says so, and the address keeps serving the last good picture. Some sites answer with a normal page that asks whether you are a person. That is a page like any other to Stillframe, and it is what gets photographed. We do not get around these checks.
How long we wait
- A page gets 30 seconds to answer. A render is cut off after 44 seconds in all.
- Stillframe does not take the picture on a fixed delay. It waits until the page has made no network requests for 1 second (a request that has been open for 4 seconds, such as a page waiting for news from its server, stops counting), for up to 15 seconds, then waits your
wait_s(0 to 20 seconds, 1 if you set nothing) for charts that animate. - If the page never goes quiet, or never finishes loading, the picture is taken anyway and marked
partial. - A page that draws nothing (every pixel one colour) fails as
blank, unless the feed hasallow_blankset totrue. - One render may make at most 300 requests and download 50 MB. Past either limit, the requests that follow are refused, and so is anything a page asks for at a private address or on a port that is not allowed. The render does not fail and nothing tells you: the picture is taken without those pieces (a missing image, a chart that never got its data). Only when the page itself, or a redirect it follows, is refused does the feed fail, as
blocked_egressoregress_cap. A heavy page can therefore come out looking incomplete while the feed reportsok. - A camera gets 15 seconds to open its stream. A frame can be at most 12 MB.
Which camera streams work
| stream | works? |
|---|---|
RTSP, such as rtsp://user:password@host:554/path | Yes, over TCP. RTSP over UDP is not used. rtsps:// is not accepted. |
MJPEG over http:// or https:// | Yes. |
HLS (.m3u8) over http or https | Not tested. It goes through the same code as MJPEG and may work. Do not rely on it. |
| An address on a private network | No. See above. |
One frame is taken each time, then drawn again for your canvas and format.
What is hidden in the answers you get back: for a camera, the user name and password (rtsp://***@host/path) and every value after a ? (?user=***&channel=***); a part with no = in it, such as ?hunter2, counts as a value and is hidden whole; the names stay, so you can tell which parameters you set. Stillframe does not guess which ones are secret. The same hiding applies in the dashboard and in Stillframe's own logs and error messages. The full address is kept, and is what the camera is given. What is not hidden: anything in the path of the address (rtsp://host/user/password/stream), and the address of a page feed, where only a password before the @ is hidden.
The try-out on the home page
The box on the home page takes one picture of one address, with no account. It follows every rule a page feed does: only http and https, no user name or password in the address, only the ports we fetch from, no private or local address, no page that needs you to sign in, and the same refusals for a site that will not talk to us. The picture is 1920 by 1080, has a band across the top that says it is a try-out, and is deleted 10 minutes after it is taken.
The limits are: 3 pictures an hour from one visitor, 6 pictures an hour for any one site, 60 an hour and 300 a day for everyone, one at a time per visitor, and at most 5 waiting. When a limit stops you the answer says which, and how long to wait.