Generated renders (thumbnails, sizes, crops) are served in one of two modes. The mode is an operator setting; as an API client you consume whatever render URLs the API hands you — both shapes always work.
direct (default)
Render URLs point straight at the public bucket or its custom domain, e.g.
https://img.peinture.gumeniuk.com/r/{id}/{crop}.{ext}?v={spec_version}
The app is not in the data path — the CDN/bucket serves the bytes.
proxy
Render URLs point back at the app, which streams the bytes from the public store:
https://peinture.gumeniuk.com/i/{id}/{crop}.{ext}
The GET /i/{id}/{file} route always exists, even in direct mode, as a fallback. It serves only public renders — never originals.
Cache-busting
Every render URL carries a ?v={spec_version} query parameter. When an image is regenerated (new preset set, or image.regenerate), the version changes, so a browser or CDN never serves a stale render under the same URL.
You do not choose the mode per request; image.get and image.list return URLs already in the active shape.