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.
# 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/-/recursiveOrganize 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-3e135c3b49c5Configure 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 configurationpaths { "/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- 01
Upload
Upload images as multipart requests or fetch them from domains you allow.
- 02
Validate
Set limits on file size, dimensions, and pixel count. Restrict content types or add content-classification rules.
- 03
Store
Store originals and generated variants with metadata and a history of uploads at each path.
- 04
Update
Upload a replacement at the same path and retrieve earlier entries by ID. Edit metadata without uploading another image.
- 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