A third of queries (by query hash) search Firecrawl first and the rest Brave, so Firecrawl's free 500 searches a
month and Brave's ~1,000 run out together. Each falls back to the other on an error or no results. Searches that
find nothing serve bad.webp, both providers failing serves donate.webp, and AI images only fill ?i= past a search's
working images. A Firecrawl query's ?i= past 10 serves an AI image without searching.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The AuroraIMG-6M API takes a 32-bit seed, so FNV-1a produces it directly
instead of truncating a SHA-256 digest. It's ~28x faster than
crypto.subtle (0.35us vs 9.7us per seed in workerd) and seeds don't need
a cryptographic hash. Every query gets new AI images; cached ones are
unaffected until they expire.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ai.direct-img.link serves images from the AuroraIMG-6M API on our Dokploy
server (github.com/direct-img/AuroraIMG-6M) instead of searching. It takes
?src= (auroraimg-6m, case-insensitive, the default and only source for now)
and ?i=, where each i gets its own seed derived from the query, so it's a
different image of the same prompt. It has its own daily limit
(AI_DAILY_LIMIT) and AI: cache keys / ai/ R2 prefix. Failed generations
aren't cached, since they're likely temporary.
On direct-img.link and free.direct-img.link, a search that finds nothing (or
fewer than i working images) now serves an AI image of the query instead of
bad.webp. It's kept for 24h like failures were, so a later search can still
find a real image; bad.webp is only served if the AI image fails too. Its ttl
is stored in KV and R2 metadata so cache hits and deduped waiters send a
matching max-age.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>