Boring
Dimension-labelled grey placeholder. ?text= ?bg= ?fg=
In TRON, things rez in — they resolve into existence on the Grid. A placeholder is just content that hasn't rezzed yet. rez hands you a stable URL now and renders the real asset into it — and rez doubles as resolution, which is all a placeholder really is: a box at W×H.
These images are loaded from the running service in real time. Same URL → byte-identical SVG, every time.
Dimension-labelled grey placeholder. ?text= ?bg= ?fg=
Override the centred label.
Solid fill from a hex code. /color/{hex}/{w}x{h}
Linear or radial. ?from= ?to= ?angle= ?type=radial
Deterministic, stable variation from any seed string.
Wireframe icon. ?as=avatar|photo|video|product|map|document
Same route, different wireframe.
Great for empty states & mockups.
POST a prompt and you get a stable URL back instantly. The <ai-img> web component polls the job in the background and swaps in the final image when it's ready — no manual reload, and the raw URL works on its own too.
Framework-agnostic custom element. Renders a placeholder, then fills in.
<script type="module">
import { registerAiImg } from '/components/ai-img.js'
registerAiImg()
</script>
<ai-img
prompt="a red fox in snow, cinematic"
w="512" h="512"
api-key="YOUR_KEY">
</ai-img>POST returns a stable URL; the same URL serves a placeholder, then the final PNG.
POST /ai (API key required)
{ "prompt": "...", "w": 512, "h": 512 }
→ { "id": "…",
"url": "/ai/512x512/{id}.png",
"status_url": "/ai/{id}/status" }
GET /ai/512x512/{id}.png # placeholder → final
GET /ai/{id}/status # pending → readyTwo cleanly separated cost profiles.
boring · color · gradient · seed · glyph. Pure functions of the URL, rendered as SVG in the Worker with zero deps. Cached immutable forever. Free and instant.
A job pipeline behind an API key. Submitting a prompt returns a stable URL immediately; the image fills in later via a provider webhook. The only stateful, costly path.