โ† All guides

๐Ÿ“ก Is loremflickr.com down right now? We check it (and dozens of other classic mock/placeholder APIs) with a plain GET every 30 minutes โ€” see the live status page or subscribe to its outage Atom feed. This guide was written during a real LoremFlickr outage; the status page always shows current reality.

loremflickr.com is down โ€” and it broke half of faker.js's image URLs

LoremFlickr is the placeholder service with a party trick nobody else has: keyword images. loremflickr.com/320/240/dog returns an actual photo of a dog, pulled from Creative-Commons Flickr photos by tag. That made it the go-to for seeded demo data that should look right โ€” and it's what faker.js emits by default.

And right now its image paths are hard down. Since September 14, 2026, ~16:31 UTC (confirmed by our tracker's consecutive 30-minute checks), every image URL answers HTTP 500 with an empty body โ€” verified live while writing this:

curl -s -o /dev/null -w "%{http_code}\n" https://loremflickr.com/320/240
# โ†’ 500                              (empty body โ€” nothing to render)

curl -s -o /dev/null -w "%{http_code}\n" https://loremflickr.com/320/240/cat
# โ†’ 500
curl -s -o /dev/null -w "%{http_code}\n" "https://loremflickr.com/640/480/cat?lock=12345"
# โ†’ 500                              (the exact URL shape faker.js generates)

curl -s -o /dev/null -w "%{http_code}\n" https://loremflickr.com/
# โ†’ 200                              (the homepage is fine โ€” uptime checks that
#                                     only poke the homepage think all is well)

Why your faker.js images broke

This outage has a blast radius beyond hand-written <img> tags. In current @faker-js/faker (verified against the published v9.9.0 source), faker.image.url() picks randomly between LoremFlickr and Picsum for every URL it generates, and faker.image.urlLoremFlickr() is all LoremFlickr:

// @faker-js/faker v9.9.0 โ€” image module (paraphrased from dist)
url({ width, height }) {
  return this.faker.helpers.arrayElement([
    this.urlLoremFlickr,                      // โ† https://loremflickr.com/W/H?lock=N
    (โ€ฆ) => this.urlPicsumPhotos({ โ€ฆ })        // โ† https://picsum.photos/seed/โ€ฆ/W/H
  ])({ width, height });
}

So while this outage lasts: roughly half of every faker.image.url() call โ€” and 100% of faker.image.urlLoremFlickr() calls โ€” returns a URL that 500s. If your seed script ran faker and stored the URLs, your demo, your Storybook fixtures, and your CI screenshots are now speckled with broken-image icons, and nothing in your code changed.

Two-line fix on the faker side โ€” stop generating LoremFlickr URLs until it recovers:

// Option A: only generate Picsum URLs (real photos, currently up)
const imageUrl = () => faker.image.urlPicsumPhotos({ width: 640, height: 480 });

// Option B: point at a host you can rely on staying up with your mock data โ€”
// deterministic, so re-running the seed doesn't churn every image
const imageUrl = (w = 640, h = 480) =>
  `https://mockbird.mockbird.workers.dev/m/demo/img/${w}/${h}?seed=${faker.string.alphanumeric(8)}`;

The 10-second replacement for existing URLs

Mockbird's /img endpoint accepts LoremFlickr's exact URL shapes โ€” the size paths, the trailing tags, the /g/ grayscale prefix, even ?lock= โ€” so for URLs already in your codebase or database, the swap is a host replace, nothing else:

# drop-in: replace the host โ€” paths and params unchanged
grep -rl 'loremflickr.com' src/ | xargs sed -i \
  's#https://loremflickr.com#https://mockbird.mockbird.workers.dev/m/demo/img#g'

No signup, no key, CORS on, served from the shared demo project. Your tags become the image's label and its deterministic seed โ€” a /dog URL renders a stable "dog" placeholder card, not a broken icon:

<img src="https://mockbird.mockbird.workers.dev/m/demo/img/320/240">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/320/240/dog">          <!-- tag โ†’ label + seed -->
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/g/320/240/paris">      <!-- /g/ grayscale, like theirs -->
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/640/480/cat?lock=7">   <!-- ?lock= determinism, like theirs -->

Live, rendered right here: 120x80 placeholder dog-tagged placeholder grayscale paris placeholder locked cat placeholder

LoremFlickr URL โ†’ Mockbird translation

On loremflickr.comOn Mockbird
/320/240 โ€” width/height/m/demo/img/320/240 โ€” same path (/img/320x240 works too)
/320/240/dog โ€” keyword photo/m/demo/img/320/240/dog โ€” same path; the tag renders as the card's label and fixes its palette. A labeled flat card, not a photo of a dog โ€” that difference is real, see the honest table below
/320/240/paris,girl (+ optional /all)same path โ€” comma tags and the /all suffix are accepted
/g/320/240/paris โ€” grayscale/m/demo/img/g/320/240/paris โ€” same path (picsum-style ?grayscale works too)
?lock=42 โ€” pin a stable imagesame param โ€” same lock, same bytes, forever. Without lock, LoremFlickr returns a random photo per request; our tagged URLs are deterministic either way (your snapshot tests will prefer that)
.jpg raster bytes.png/.jpg suffix (or ?format=png) returns PNG bytes; SVG by default
โ€”things LoremFlickr doesn't do: ?text= overlays, ?round=1 avatars, ?bg=/&fg= hex colors, ?blur=1-10, and a whole mock REST API at the same base URL

Why placeholders at your mock API's base URL

Placeholder images are rarely the whole job โ€” usually the fake products need fake photos and the fake users need fake avatars next to fake data. Every Mockbird project gets its own /img endpoint, and seeded image/avatar fields point at it automatically, so one outage on someone else's image host never again takes down your demo:

curl -s https://mockbird.mockbird.workers.dev/m/demo/products/1 | python3 -m json.tool
# "image": "https://mockbird.mockbird.workers.dev/m/demo/img/640x480?seed=โ€ฆ"

The full placeholder-image guide covers every parameter; the interactive URL builder previews them live; this link creates a seeded e-commerce backend โ€” products with working image URLs โ€” in one click, no signup.

Honest comparison โ€” including where LoremFlickr wins

loremflickrpicsum.photosplacehold.coMockbird /img
Real photographsโœ” (Flickr, CC)โœ”โœ˜โœ˜ โ€” flat SVG + text
Keyword/tag imagesโœ” โ€” its unique trickโœ˜โœ˜partial โ€” tag becomes a text label, not a photo
Up right now (verified Sep 15, 2026)โœ˜ โ€” empty-body 500sโœ”โœ”โœ” (we track them all live)
Deterministic by URLonly with ?lock=โœ” via /seed/โœ”โœ” (byte-identical)
Grayscaleโœ” /g/โœ” ?grayscaleโœ˜โœ” โ€” both syntaxes
Avatars / initials / textโœ˜โœ˜partial (text)โœ” ?round=1&text=AL, avatar styles
Comes with a mock data APIโœ˜โœ˜โœ˜โœ” โ€” same base URL
Signupnonenonenonenone

Written by the Mockbird maker โ€” bias disclosed. When LoremFlickr is up, a real photo of a dog beats a flat card that says "dog" in any demo a human looks at โ€” use it there, and use Picsum (up, real photos, no keywords) meanwhile. Outage facts verified by direct request on September 15, 2026 during the incident, and the faker.js behavior against the published @faker-js/faker 9.9.0 source; the live status page (checked every 30 minutes) always shows whether they still hold. If LoremFlickr recovers, everything here keeps working โ€” these URL shapes aren't going anywhere.

Full API reference in the docs. More guides: picsum.photos alternative ยท free placeholder image API ยท lorempixel / placeimg alternative ยท source.unsplash.com alternative ยท placekitten alternative ยท fake e-commerce API. Create your API โ†’

โšก Skip the terminal: this link creates a live, seeded e-commerce backend (products, orders, customers, reviews) in the dashboard โ€” every product record ships with a working image URL. Real URL, data browser already open, no signup.