lorempixel is down (and placeimg is gone) โ€” alternatives for every URL shape

lorempixel.com/400/200/sports was the original category placeholder: a real photo, any size, thirteen themed categories, even a text overlay if you asked. It's still pasted all over Bootstrap-era templates, jQuery course exercises, and old Stack Overflow answers. And it has stopped serving images:

curl -si http://lorempixel.com/400/200 | head -1
# HTTP/1.1 429 Too Many Requests   โ† an HTML "Site Unavailable" page, for everyone

curl -si http://lorempixel.com/400/200/sports | head -1
# HTTP/1.1 429                     โ† categories too
curl -si http://lorempixel.com/g/400/200 | head -1
# HTTP/1.1 429                     โ† grayscale too โ€” even the homepage answers 429

That's not a rate limit you can wait out โ€” every path, on HTTP and HTTPS, answers the same hosting "Site Unavailable" page. Verified by direct request on September 10, 2026, and Mockbird re-checks it hourly on the lorempixel live-status page. Its sibling placeimg.com is further gone: the domain no longer resolves at all (curl: Could not resolve host โ€” tracked here). Every <img> pointing at either renders a broken-image icon.

If you want the category photos back

Being honest first: Mockbird does not serve photos. If the point was a real picture of food/sports/cats, these work today โ€” all verified alive September 10, 2026 with a plain GET returning a real image:

ServiceURL shapeNotes
loremflickr.comloremflickr.com/400/200/sportsThe closest drop-in โ€” same /W/H/category path shape, but the "category" is any Flickr tag, not a fixed list of 13. Grayscale works too: /g/400/200/sports.
picsum.photospicsum.photos/400/200Random high-quality photos (no categories). ?grayscale, and /seed/3/400/200 for a photo that never changes โ€” the job lorempixel's numbered /400/200/cats/3 URLs did.
placehold.co / dummyimage.complacehold.co/400x200?text=HelloNot photos โ€” generated rectangles with text, like lorempixel's text overlay. Both alive.
<!-- the smallest fix for category URLs: swap the hostname -->
<img src="https://loremflickr.com/400/200/sports">

Translation table โ€” every lorempixel/placeimg URL shape

Old URLWorking replacement
lorempixel.com/400/200picsum.photos/400/200 (random photo) ยท โ€ฆ/m/demo/img/400/200 (deterministic SVG)
lorempixel.com/400/200/sportsloremflickr.com/400/200/sports โ€” same path shape, tag-based
lorempixel.com/g/400/200 (grayscale)picsum.photos/400/200?grayscale ยท loremflickr.com/g/400/200/sports
lorempixel.com/400/200/cats/3 (image #3, stable)picsum.photos/seed/3/400/200 โ€” deterministic photo per seed ยท โ€ฆ/m/demo/img/400/200?seed=3
lorempixel.com/400/200/sports/Dummy-Text (text overlay)โ€ฆ/m/demo/img/400x200?text=Dummy+Text ยท placehold.co/400x200?text=Dummy+Text
placeimg.com/640/480/anypicsum.photos/640/480
placeimg.com/640/480/animals (categories: animals/arch/nature/people/tech)loremflickr.com/640/480/animals โ€” richer tags than placeimg's five
placeimg.com/640/480/nature/grayscale (also /sepia)picsum.photos/640/480?grayscale; no mainstream host does sepia โ€” use CSS filter: sepia(1)

If what you actually needed was "an image at that size, reliably"

Most lorempixel URLs weren't really about the sports photo โ€” they were about filling an image slot while building a UI. For that job a random photo host is the wrong tool twice: it's a third-party dependency that can die (this page is exhibit A and B), and the bytes change between requests, which makes screenshot tests flake.

Mockbird serves deterministic SVG placeholders with the same slash-path shape lorempixel used:

<img src="https://mockbird.mockbird.workers.dev/m/demo/img/400/200">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/400/200?text=sports&seed=sports">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/128?round=1&text=PA">

Rendered live from the API as you read this: 400ร—200 placeholder placeholder labeled sports round initials avatar

No signup, no key, CORS *, cached a day, any size 1โ€“2000 px, same URL โ†’ same bytes forever. ?text=, ?bg=/?fg= hex colors, ?seed= stable palette pick, ?round=1 circle avatars. Full reference in the docs.

The reason it lives under /m/demo/

Mockbird is a hosted mock REST API โ€” you describe resources (or import an OpenAPI spec / db.json / CSV) and get a live fake backend at a URL. The placeholder endpoint exists so that seeded fake data ships with images that render: every seeded image and avatar field already points at the project's own /img:

curl -s -X POST https://mockbird.mockbird.workers.dev/api/projects \
  -H 'content-type: application/json' -d '{"preset":"ecommerce"}'
# โ†’ 30 fake products whose image URLs work, users with initial-avatars,
#   full CRUD, filters, OpenAPI export โ€” one origin, one curl, no signup

Prefer clicking: create the same project in one click. If you reached this page because an old template's product grid went blank โ€” the durable fix isn't just swapping the image host, it's letting the fake backend and its fake images live at the same base URL, where an image-host obituary can never take out your demo again.

Honest comparison

LoremFlickrPicsumMockbird /img
Real photosโœ… any tagโœ… (no categories)โ€” (SVG rectangles/circles)
Deterministic bytes (same URL โ†’ same image)โŒ random per cacheโœ… with /seed/โ€ฆ (JPEG re-encode may vary)โœ… always
Custom text / colors / round avatarsโ€”โ€”โœ…
Same origin as your mock API dataโ€”โ€”โœ… seeded data pre-wired
FormatsJPEGJPEG/WebPSVG + PNG (.png/.jpg suffix or ?format=png)

Written by the Mockbird maker โ€” bias disclosed. If you want the photo, use LoremFlickr for categories or Picsum for pretty randoms โ€” both do that job well. Use Mockbird's /img when the image is standing in for real product photos or avatars in a UI you're building against mock data โ€” deterministic bytes, no third-party host, and the rest of the fake backend lives at the same URL. Statuses above verified by direct request on September 10, 2026; lorempixel and placeimg are tracked hourly.

FAQ

Is lorempixel.com coming back? Unknown. The 429 comes with a hosting-provider "Site Unavailable" page rather than the app itself, on every path including the homepage โ€” it looks suspended, not overloaded. The live status page re-checks every hour and will show a recovery before this page does.

What happened to placeimg.com? It announced its shutdown and went dark in 2022; today the domain doesn't even resolve to a website. Any placeimg.com/W/H/category URL in a tutorial is unfixable except by pointing elsewhere โ€” see the translation table above.

My tests assert on image bytes/snapshots โ€” what should I use? Exactly the case for deterministic placeholders: a Mockbird /img URL always returns identical bytes, so screenshot diffs can't flake because a different sports photo loaded. See deterministic test data.

Do I need an account? No โ€” /m/demo/img/โ€ฆ works bare (shared demo project, 50,000 req/day quota). One curl creates your own anonymous project with its own /img and a 10,000/day quota.

Related: free placeholder image API (all the dead classics) ยท picsum.photos alternative ยท placekitten alternative ยท source.unsplash.com alternative ยท avatar placeholder API ยท fake ecommerce API. Create your API โ†’