Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Configuration

zimgx reads all configuration from environment variables prefixed with ZIMGX_. Every variable is optional and has a sensible default.

Server

VariableTypeDefaultDescription
ZIMGX_SERVER_PORTu168080TCP port to listen on
ZIMGX_SERVER_HOSTstring0.0.0.0IP address to bind to. Set to 127.0.0.1 to restrict to localhost.
ZIMGX_SERVER_REQUEST_TIMEOUT_MSu3230000Maximum time (ms) to wait for a complete request
ZIMGX_SERVER_MAX_REQUEST_SIZEusize52428800 (50 MiB)Maximum request/response body size in bytes

Origin

VariableTypeDefaultDescription
ZIMGX_ORIGIN_TYPEstringhttphttp fetches from ZIMGX_ORIGIN_BASE_URL. r2 fetches from an R2 bucket.
ZIMGX_ORIGIN_BASE_URLstringhttp://localhost:9000Base URL for the HTTP origin. The image path is appended to this value.
ZIMGX_ORIGIN_TIMEOUT_MSu3210000Timeout (ms) for origin fetch requests
ZIMGX_ORIGIN_MAX_RETRIESu82Retry attempts for failed origin fetches
ZIMGX_ORIGIN_PATH_PREFIXstring""Path prefix to strip from image paths before fetching from origin. When set, requests for /<prefix>/<key> resolve to origin key <key>. Useful for Cloudflare Images migration where URLs include the account ID.

R2/S3

Required when ZIMGX_ORIGIN_TYPE=r2. All fields must be non-empty.

VariableTypeDefaultDescription
ZIMGX_R2_ENDPOINTstring""R2/S3-compatible endpoint URL
ZIMGX_R2_ACCESS_KEY_IDstring""Access key ID
ZIMGX_R2_SECRET_ACCESS_KEYstring""Secret access key
ZIMGX_R2_BUCKET_ORIGINALSstringoriginalsBucket for source images
ZIMGX_R2_BUCKET_VARIANTSstringvariantsBucket for cached transformed variants (L2 cache)

Transform limits

VariableTypeDefaultDescription
ZIMGX_TRANSFORM_MAX_WIDTHu328192Maximum output width in pixels
ZIMGX_TRANSFORM_MAX_HEIGHTu328192Maximum output height in pixels
ZIMGX_TRANSFORM_DEFAULT_QUALITYu880Default JPEG/WebP/AVIF quality when q is not specified
ZIMGX_TRANSFORM_MAX_PIXELSu6471000000Maximum total pixel count (width x height). Images exceeding this are rejected.
ZIMGX_TRANSFORM_STRIP_METADATAbooltrueStrip EXIF and other metadata from output. Accepts true/1 or false/0.
ZIMGX_TRANSFORM_MAX_FRAMESu32100Maximum frames to load from animated images. Excess frames are truncated.
ZIMGX_TRANSFORM_MAX_ANIMATED_PIXELSu6450000000Maximum total pixels across all frames. Animated images exceeding this budget are served as a static first frame.

Cache

VariableTypeDefaultDescription
ZIMGX_CACHE_ENABLEDbooltrueEnable the in-memory L1 cache. When disabled, every request fetches from origin.
ZIMGX_CACHE_MAX_SIZE_BYTESusize536870912 (512 MiB)Maximum memory for the L1 cache. Entries are evicted using LRU when exceeded.
ZIMGX_CACHE_DEFAULT_TTL_SECONDSu323600TTL for Cache-Control: public, max-age= headers on image responses

Validation

zimgx validates configuration at startup and refuses to start if:

  • ZIMGX_SERVER_PORT is 0
  • ZIMGX_SERVER_REQUEST_TIMEOUT_MS or ZIMGX_ORIGIN_TIMEOUT_MS is 0
  • ZIMGX_TRANSFORM_MAX_WIDTH or ZIMGX_TRANSFORM_MAX_HEIGHT is 0
  • ZIMGX_TRANSFORM_DEFAULT_QUALITY is outside 1–100
  • ZIMGX_ORIGIN_TYPE=http and ZIMGX_ORIGIN_BASE_URL is empty
  • ZIMGX_ORIGIN_TYPE=r2 and any R2 field is empty

Example .env file

# Origin
ZIMGX_ORIGIN_TYPE=r2
 
# R2
ZIMGX_R2_ENDPOINT=https://0bc82bff4439c556f9dc1b054d2de6d7.r2.cloudflarestorage.com
ZIMGX_R2_ACCESS_KEY_ID=your-access-key
ZIMGX_R2_SECRET_ACCESS_KEY=your-secret-key
ZIMGX_R2_BUCKET_ORIGINALS=originals
ZIMGX_R2_BUCKET_VARIANTS=variants
 
# Server
ZIMGX_SERVER_PORT=8080
ZIMGX_SERVER_HOST=0.0.0.0
 
# Cache
ZIMGX_CACHE_ENABLED=true
ZIMGX_CACHE_MAX_SIZE_BYTES=536870912
ZIMGX_CACHE_DEFAULT_TTL_SECONDS=3600
 
# Transform limits
ZIMGX_TRANSFORM_DEFAULT_QUALITY=80
ZIMGX_TRANSFORM_STRIP_METADATA=true
ZIMGX_TRANSFORM_MAX_FRAMES=100
ZIMGX_TRANSFORM_MAX_ANIMATED_PIXELS=50000000