Skip to main content

Configuration

Screengrabber is configured entirely through environment variables. In Docker Compose these go in the environment block; in a .env file they are picked up automatically.

Environment Variables

VariableDefaultDescription
REDIS_CONNECTIONlocalhost:6379StackExchange.Redis connection string for the screenshot cache.
API_KEYS(empty)Comma-separated list of valid API keys. When empty, authentication is disabled.
SCREENSHOT_CACHE_TTL_HOURS24How long cached screenshots are retained in Redis, in hours.
SCREENSHOT_CONCURRENCY4Maximum number of simultaneous Playwright page captures.

Redis

Screengrabber uses Redis as a read-through cache. If the Redis connection fails at request time, the failure is surfaced as a warning and the screenshot is captured fresh — the service degrades gracefully rather than returning an error.

If you don't need caching, you can still run the service without Redis by pointing REDIS_CONNECTION at a Redis instance that may or may not be available.

API Keys

API_KEYS accepts a comma-separated list. Whitespace around each key is trimmed. To rotate keys, update the list and restart the container — the keys are read once at startup.

API_KEYS=key-one,key-two,key-three

If you leave API_KEYS empty the service accepts all requests without authentication, which is suitable for air-gapped or trusted-network deployments.

Concurrency

SCREENSHOT_CONCURRENCY controls how many browser page contexts can run in parallel. Each concurrent capture uses a separate Playwright page inside a single long-lived Edge browser instance. Increase this for higher throughput at the cost of more memory; the right value depends on your host's available RAM.

Example docker-compose.yml

services:
screengrabber:
image: ghcr.io/homotechsual/screengrabber:latest
restart: unless-stopped
environment:
REDIS_CONNECTION: redis:6379
API_KEYS: ${API_KEYS}
SCREENSHOT_CACHE_TTL_HOURS: 24
SCREENSHOT_CONCURRENCY: 4
depends_on:
- redis

redis:
image: redis:7-alpine
restart: unless-stopped