Two sources, both handled by packages/seed and driven by services/worker
CLIs (or small batches from /admin/seed-batches).
importUnsplashBatch({ query, count, orientation }):
- Searches Unsplash (
content_filter=high), imports photo metadata, URLs, blur hash, colour, and photographer attribution intomedia+unsplash_photos. - Truth label
not_ai, confidenceseeded, statusapproved. - Tags: category slug +
photorealistic+human-made(spoiler) +image. - Triggers the Unsplash
download_locationendpoint per API guidelines.
pnpm --filter @aiornot/worker seed:unsplash 100 20 # total, per-categorygenerateAiVariantsBatch({ count }):
- Picks recent Unsplash seeds as inspiration parents (
source_parent_media_id). - Builds a reveal-safe prompt (
packages/seed/src/prompts.ts) that keeps the category but changes ≥3 creative details — photorealistic, not a copy. - Generates with
AI_IMAGE_MODEL(defaultgpt-image-1), uploads the PNG to R2, stores truth labelai,ai_prompt_summary,ai_model. - Requires
OPENAI_API_KEYandR2_*storage.
pnpm --filter @aiornot/worker seed:ai-variants 100 10 # total, batch size- Launch: 100 real + 100 AI (200 total).
- Full: 500 real + 500 AI (1,000 total).
pnpm seed:demo inserts 12 media with picsum.photos placeholders and simulated
crowd stats so the app is fully browsable offline.