Skip to main content

Image management for backend teams.

Use Konifer to upload, validate, and manage images through a self-hosted API. Organize them by user or listing, replace a photo at the same URL, and choose how you store and serve it.

Asset API
# Upload a profile picture
POST /assets/users/123/profile-picture

# Get metadata or an image link
GET  /assets/users/123/profile-picture/-/info
GET  /assets/users/123/profile-picture/-/link

# Delete the images under this user's path
DELETE /assets/users/123/-/recursive

Organize images around your application.

Choose paths that match your application, such as a user's profile picture or a listing's gallery. You can use an imageId as the path if you prefer.

/assets/users/123/profile-picture/assets/listings/ca-90210/gallery/assets/claims/456/evidence/assets/358e0754-0c12-4541-891a-3e135c3b49c5

Configure storage, validation, preprocessing, and delivery by path. Set shared defaults on a parent path and override individual settings on more specific paths. In this example, you cap user uploads at 20 MB and 15 megapixels, then restrict profile pictures to JPEG and PNG in a dedicated bucket.

Read about path configuration
konifer.conf
paths {
"/users/**" {
limits {
max-bytes = 20MB
max-pixels = 15MP
}
}
"/users/*/profile-picture" {
bucket = "profile-pictures"
allowed-content-types = [
"image/jpeg",
"image/png"
]
}
}

Manage images from upload to deletion.

Use the asset API to manage uploads and their metadata. You can keep earlier profile pictures after a replacement, retrieve a specific entry, or delete a user's images in one request.

Explore the asset model
  1. 01

    Upload

    Upload images as multipart requests or fetch them from domains you allow.

  2. 02

    Validate

    Set limits on file size, dimensions, and pixel count. Restrict content types or add content-classification rules.

  3. 03

    Store

    Store originals and generated variants with metadata and a history of uploads at each path.

  4. 04

    Update

    Upload a replacement at the same path and retrieve earlier entries by ID. Edit metadata without uploading another image.

  5. 05

    Delete

    Delete a single entry, the images at a path, or a path and its children.

Choose your storage and CDN.

Store image files on a filesystem or in S3-compatible object storage, and keep asset records in PostgreSQL.

Serve images through your CDN, redirect requests to object storage, or return image content from the API. Configure delivery for each path to suit your application.

Image files
S3-compatible object storage or a filesystem
Asset records
PostgreSQL for paths, metadata, and variant state
Delivery
Image links, redirects, or image content, with optional CDN delivery

Run Konifer in one container.

Use in-memory mode to try the API on your machine. Add PostgreSQL and persistent image storage for deployment.

docker run -e IN_MEMORY=true -p 8080:8080 ghcr.io/dmaiken/konifer:latest