Skip to main content
STORE · TRANSFORM · DELIVER

Image infrastructure that fits your application.

Manage originals, reusable variants, metadata, and delivery through one API, with storage and policies that adapt to each image workflow.

# Store an image where your app already knows it belongs
POST /assets/users/123/profile-picture

# Read the current image from the same stable path
GET /assets/users/123/profile-picture/-/content

# Request a reusable transformed variant
GET /assets/users/123/profile-picture/-/content?profile=thumbnail
Replace the image later. Your application keeps the same URL.
Why Konifer

One API for the complete image lifecycle

Konifer brings storage, transformation, metadata, policy, caching, and delivery together behind a consistent HTTP API.

Stable application paths

Address images using paths your application can derive from its own domain model, without persisting separate identifiers for routine requests.

Reusable transformations

Generate variants on demand or from named profiles, then store and reuse them instead of repeating work for every request.

Flexible storage and delivery

Use S3-compatible or filesystem storage, then deliver content through direct responses, object-store links, redirects, or a CDN. Konifer fits into the infrastructure your application already uses.

Reusable variants

Transform once, reuse the result

Request image variants on demand or define named profiles for common outputs. Generated variants are stored and reused, so expensive work does not repeat for every viewer.

JPEGPNGWebPAVIFJPEG XLHEICGIF
Request/assets/products/sku-123/hero/-/content?profile=social-card
Generated once1200 × 630 WebPStored and reused on later requests
Stable paths

Replace an image without changing its URL

Post a new asset to the same path and the default request resolves to the newest entry. Your app can replace an avatar or publish a new hero image without updating the URL it already knows.

Return the asset as content, a link, a redirect, a download, or structured information to match each delivery workflow.

Explore asset delivery
Stable application path/assets/products/sku-123/hero
Initial uploadPOST
ReplacementPOST
Default GETnewest asset
Return format
/-/content/-/link/-/redirect/-/download/-/info
Content-aware upload rules

Reject the wrong image before it becomes an asset

Evaluate uploads with zero-shot image classification before they are stored. Define reusable rules, attach them to path patterns, and give each area of your product its own visual content policy.

Explore Upload Rules
rule-definitions {
"product-photo" {
prompts = [
"a clean catalog image of a product",
"a product photo on a plain background"
]
threshold = 0.66
}
}
paths {
"/catalog/products/**" {
upload-ruleset {
default = reject
accept-rules = [ { rule = "product-photo" } ]
}
}
}
Policy by path

Configure behavior where images belong

Configure behavior by path pattern, then let inheritance do the work. Public avatars, private user content, CMS images, and generated media can share one service while using different storage buckets, upload rulesets, eager variants, preprocessing, redirect strategies, caching, and LQIP behavior.

Read Path Configuration
paths {
"/public/avatars/**" {
transform { eager-variants = [ small, medium, large ] }
return-format.redirect.strategy = template
cache-control.max-age = 31536000
}
"/users/*/profile-picture" {
bucket = "profile-pictures"
allowed-content-types = [ "image/jpeg" ]
}
}
Try Konifer

Run your first image workflow locally

Start Konifer, upload an original image, and request a cached variant in a few steps.