Need help with url2img?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

482 Stars 24 Forks GNU General Public License v3.0 27 Commits 2 Opened issues


HTTP server with API for capturing screenshots of websites

Services available


Need anything else?

Contributors list


url2img is HTTP server with API for capturing screenshots of websites.

Example (command line):

$ curl -s http://localhost:55888/? > google.jpg

Example (web browser):




Type Default Description
url string Target URL (required), http(s):// prefix is optional
output string raw Output format (raw, base64, html)
format string jpg Image format (jpg, png)
ua string User-Agent string
quality int 85 Image quality
delay int 0 Delay screenshot after page is loaded (milliseconds)
width int 1600 Viewport width
height int 1200 Viewport height
zoom float 1.0 Zoom factor
full bool false Capture full page height


Usage of url2img:

-bind-addr string Bind address (default ":55888") -cache-dir string Path to cache directory, if empty caching is disabled -htpasswd-file string Path to htpasswd file, if empty auth is disabled -log-file string Path to log file, if empty logs to stdout -max-age int Cache maximum age (seconds) (default 86400) -read-timeout int Read timeout (seconds) (default 5) -write-timeout int Write timeout (seconds) (default 15)


If server is started with -htpasswd-file it will be protected with HTTP Basic Auth. Supports MD5, SHA1 and BCrypt (


$ htpasswd -c .htpasswd username
$ url2img -htpasswd-file .htpasswd

$ curl -I 'http://localhost:55888/?'

HTTP/1.1 401 Unauthorized Content-Type: text/plain; charset=utf-8 Www-Authenticate: Basic realm="url2img/1.0" X-Content-Type-Options: nosniff Date: Wed, 09 Nov 2016 17:50:33 GMT Content-Length: 17

$ curl -u username:password -s http://localhost:55888/? > google.jpg $ curl -s http://username:[email protected]:55888/? > google.jpg $ curl --netrc-file my-password-file http://localhost:55888/? > google.jpg


If server is started with -cache-dir it will cache HTTP responses to disk according to RFC7234 ( You can use -max-age to control maximum age of cache file, default is 86400 seconds (1 day).


$ curl -I 'http://localhost:55888/?url='

HTTP/1.1 200 OK Accept-Ranges: bytes Age: 21 Cache-Control: public,max-age=86400 Content-Length: 21107 Content-Type: image/jpeg Last-Modified: Wed, 09 Nov 2016 18:25:26 GMT Proxy-Date: Wed, 09 Nov 2016 17:25:26 GMT Server: url2img/1.0 Via: 1.1 httpcache X-Cache: HIT Date: Wed, 09 Nov 2016 17:25:47 GMT

If you want uncached response you can request it via Cache-Control header:

$ curl -H 'Cache-Control: no-cache' 'http://localhost:55888/?url='

Or you can send POST request with json body, POST requests are never cached:

$ curl -X POST -d '{"url": "", "format": "png"}' http://localhost:55888


To reload server (e.g. when .htpasswd is changed or log file is rotated) send SIGHUP signal to process. If you use one of the provided init scripts just do a reload.


Binary is compiled fully static with musl toolchain. It should work on all systems without any additional dependencies. Systemd and OpenRC init scripts are included in dist/.

Alternative: run in Docker container

An alternative is to run everything in a container. Change to the

directory and:
# Build container: `docker build -t url2img .`
# Then run container: `docker run -p 55888:55888 url2img`

Output should be like this:

$ docker run -p 55888:55888 url2img
running server on port 55888


Install Qt bindings ( with WebKit (see

Install url2img to $GOPATH/bin:

$ go get -d
$ go generate
$ qtminimal linux $GOPATH/src/
$ go install -tags minimal


url2img is free/libre software released under the terms of the GNU GPL license, see the 'COPYING' file for details.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.