poster, fanart, episode, and avatar fields. You build the final URL by combining a domain prefix, a category prefix, the image path, a size suffix, and a file extension.
We strongly recommend serving images through wsrv.nl, a free image proxy that caches, resizes, and converts on the fly. This minimizes load on Simkl’s servers and gives you free image transformations.
All examples below append &q=90 to the wsrv URL — this matches origin image quality. Without it, wsrv’s default &q=80 re-encodes images at noticeably smaller filesize and lower quality. Setting &q= above 90 is rarely useful — sizes balloon past origin without visible quality gain.
Anatomy of a URL
Code samples
Each tab covers a different real-world scenario. All samples handle missing/null paths by falling back to the wsrv-proxied placeholders documented in Fallback when images are missing.- Basic builder
- Responsive HTML
- React
- Blur-up loading
- iOS — SDWebImage / Kingfisher
- Android — Coil
Single helper covering all four kinds, with null-safe fallback for posters.
Posters
Six sizes, ranging from cinematic landscape (_w) down to a 40-pixel sliver (_s).
- Previews
- Reference table
Choosing a size for high-DPI screens
The Notes column above suggests a size by layout slot. That assumes a 1x display. Phones run at 2x or 3x, and most laptop screens are 2x, so a_c poster in a 170px slot gets upscaled by the browser and looks soft.
The rule: multiply your CSS slot width by the device pixel ratio, then pick the smallest suffix whose width is greater than or equal to that number.
Poster widths are _s 40, _cm 84, _c 170, _ca 190, _m 340.
The practical takeaway: any poster rendered at up to roughly 170 CSS pixels should use
_m on a high-DPI screen, not _c.
_m at 340px covers a 113px slot at 3x and a 170px slot at 2x. That covers the common phone case, so _m is a sensible default for mobile poster art. It is also the largest portrait poster, so above those widths you are already at the ceiling. _w is not an alternative here, it is a 600 × 338 landscape crop for banners.
Let users cap image quality on mobile
Defaulting to_m on phones triples the bytes per poster versus _c. On a metered connection that is a real cost, so make it a user choice rather than a hard default.
Ship a setting with three options: full quality, reduce on cellular only, and always reduce. “Reduce” means step down one suffix, so _m becomes _c and _c becomes _cm. Default to reducing on cellular.
Also respect the OS-level signal, which users set once and expect every app to honour:
Cache each size under its own key so toggling the setting does not evict the images the user already has. See Caching.
Fanart
Wide background art — the cinematic still you typically use behind the title on a detail screen.- Previews
- Reference table
Episodes
Avatars
- Previews
- Reference table
Avatars are JPG-only and served directly from
simkl.in (no wsrv.nl proxy needed for these — they’re already small).Fallback when images are missing
When aposter, fanart, or episode field is null (or the path is empty), use these built-in placeholders. They live at the root of simkl.in and are served through wsrv.nl just like the other images:
Fanart has no dedicated placeholder. When
fanart is null, hide the fanart element rather than showing a broken/empty image — most apps render a solid color or use the poster’s blurred-up _s48 thumbnail behind a tint instead.
















