Grammar reference
Everything on this page is generated at build time from the compiled
contract module (BcImageUrl) that the edge itself runs — the reference
cannot drift from production behavior.
URL shape
Section titled “URL shape”https://img.brandcenter.io/i/{brand}/{fileId}/{rev}/{ops}.{ext}Ops are comma-separated key:value pairs in fixed canonical order:
p | c , w , h , fit , q , dpr , fx… , sHard rules
Section titled “Hard rules”- Grammar is lowercase-only. An uppercased copy of a URL would cache and sign differently, so it is invalid rather than equivalent.
- Exactly one sizing intent: a
ppreset or aw/h/ccombination. wandhaccept any integer 1–7200; ladder sizes resolve onto pre-generated renditions (the fast path), others render on demand.fxis the only repeatable op;s(when present) is always last.- Aspect ratio is never broken implicitly — a single dimension derives the
other, and only an explicit
fit:fillstretches. - Unknown ops, out-of-range sizes, and out-of-order ops are rejected.
Size ladder
The pre-generated rendition sizes — w requests at these
values are straight cache hits with no render (other sizes render on
demand; everything clamps to the source's largest generated size):
1282564008001600240048007200
Output formats
The extension is always explicit:
.webp .jpg .png .avif
Quality tiers
q | @1x | @2x (dpr:2) |
|---|---|---|
eco | 60 | 45 |
std (default) | 85 | 60 |
hi | 92 | 75 |
Quality descends as DPR ascends: high-density screens hide compression, so
a 2x render at lower quality looks identical and ships fewer bytes.
std@1x matches the pre-generated ladder's own encode quality —
a default render and a ladder artifact are byte-consistent.
Effects
fx name | Arguments | Example |
|---|---|---|
blur | 1 | fx:blur:20 |
brightness | 1 | fx:brightness:20 |
contrast | 1 | fx:contrast:20 |
flip | 0 | fx:flip |
flop | 0 | fx:flop |
gamma | 1 | fx:gamma:20 |
grayscale | 0 | fx:grayscale |
rotate | 1 | fx:rotate:20 |
saturation | 1 | fx:saturation:20 |
sharpen | 1 | fx:sharpen:20 |