Skip to main content
Simkl returns image paths (not full URLs) inside 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

Image URL anatomy: category, image path, size, extension
PartExampleNotes
Proxy + domainhttps://wsrv.nl/?url=https://simkl.inAlways start with this.
Category/posters/One of /posters/, /fanart/, /episodes/, /avatars/.
Image path74/74415673dcdc9cddThe value from the API field (poster, fanart, etc.).
Size suffix_wDetermines pixel size — see each section below.
Extension.webpAlways .webp for posters, episodes, and every fanart size except _d. Two exceptions: fanart _d is .jpg only (details), avatars are .jpg only (details).
Quality&q=90Quality parameter for the wsrv proxy. &q=90 matches origin quality (default &q=80 reduces quality and filesize). Setting &q= above 90 is rarely useful — sizes balloon past origin without visible quality gain.
Use .webp for posters, episodes, and fanart.Two .jpg exceptions:
  • Fanart _d — original-resolution, darker tone, smaller filesize than _medium.webp. JPG only.
  • Avatars — small enough that the format doesn’t matter; served as JPG without the wsrv.nl proxy.

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.
Single helper covering all four kinds, with null-safe fallback for posters.
const SIMKL_IMG_BASE = 'https://wsrv.nl/?url=https://simkl.in';

function imageUrl(path, kind = 'posters', size = '_w', ext = '.webp') {
  if (!path) {
    if (kind !== 'posters') return null; // hide fanart/episode/avatar — no placeholder
    const ph = size === '_s' ? '_s' : '_c';
    return `${SIMKL_IMG_BASE}/poster_no_pic${ph}.png`;
  }
  return `${SIMKL_IMG_BASE}/${kind}/${path}${size}${ext}&q=90`;
}

imageUrl('74/74415673dcdc9cdd', 'posters', '_w');
// → https://wsrv.nl/?url=https://simkl.in/posters/74/74415673dcdc9cdd_w.webp&q=90

imageUrl(null, 'posters', '_c');
// → https://wsrv.nl/?url=https://simkl.in/poster_no_pic_c.png

Posters

Six sizes, ranging from cinematic landscape (_w) down to a 40-pixel sliver (_s).
_w_w — 600 × 338, landscape, cropped
_m_m — 340 × *, medium portrait
_ca_ca — 190 × 279 (or 285), card aspect
_c_c — 170 × 250 (or 256), compact card
_cm_cm — 84 × 124, card mini
_s_s — 40 × 57, smallest thumbnail

Fanart

Wide background art — the cinematic still you typically use behind the title on a detail screen.
_medium
_mobile
_w
_d
_s48

Episodes

_w
_c
_m

Avatars

_24_24 — 24 × 24
_100_100 — 100 × 100
default(none) — 200 × 200
_256_256 — 256 × 256
_512_512 — 512 × 512
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 a poster, 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:
default placeholder
_c placeholder
_c grey placeholder
_s placeholder
URLUse forFile sizeExample
https://wsrv.nl/?url=https://simkl.in/poster_no_pic.pngDefault — full-size missing-poster~25 KBView
https://wsrv.nl/?url=https://simkl.in/poster_no_pic_c.pngMatch _c posters (170 × 250)~9 KBView
https://wsrv.nl/?url=https://simkl.in/poster_no_pic_c_grey.pngMatch _c with a softer grey tone~24 KBView
https://wsrv.nl/?url=https://simkl.in/poster_no_pic_s.pngMatch _s posters (40 × 57)~1.7 KBView
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.

Caching

Cache images by URL forever. The image at a given URL never changes — once you’ve downloaded it, don’t fetch it again. Re-downloading wastes your users’ bandwidth and ours.