Stable application paths
Address images using paths your application can derive from its own domain model, without persisting separate identifiers for routine requests.
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=thumbnailKonifer brings storage, transformation, metadata, policy, caching, and delivery together behind a consistent HTTP API.
Address images using paths your application can derive from its own domain model, without persisting separate identifiers for routine requests.
Generate variants on demand or from named profiles, then store and reuse them instead of repeating work for every request.
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.
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.
/assets/products/sku-123/hero/-/content?profile=social-cardPost 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/assets/products/sku-123/heroPOSTPOST/-/content/-/link/-/redirect/-/download/-/infoEvaluate 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 Rulesrule-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" } ] } }}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 Configurationpaths { "/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" ] }}Start Konifer, upload an original image, and request a cached variant in a few steps.