OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
AI와 실제를 구별할 수 있나요? 이미지·영상·게시물에 투표하거나 API·RSS로 군중 판단을 받아보는 AI 탐지 게임
Can you tell AI from real? Play the crowd-sourced AI-detection game — vote on images, videos & posts, or get the crowd's verdict by API and RSS.
게임TypeScript · CSSGitHub @profullstack온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A photorealistic image/video guessing game. Verified users decide whether media is AI-generated or real, track a personal history, compete on leaderboards, and subscribe to every list by RSS.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A photorealistic image/video guessing game. Verified users decide whether media is AI-generated or real, track a personal history, compete on leaderboards, and subscribe to every list by RSS.
Built on the ProFullstack stack with Postgres (via @profullstack/libsql-pg) + Drizzle schema, Next.js 15, custom email/password auth (Argon2id), S3/R2 object storage, and seeded from Unsplash (real photos) + OpenAI image generation (AI variants). Deploys to Railway.
apps/web Next.js app: public pages, auth, guessing, RSS, admin
packages/db Drizzle schema, SQL migrations (SQLite + Postgres editions), database client, seeders
packages/seed Unsplash import + OpenAI variant generation (shared)
services/worker CLI jobs: seed:unsplash, seed:ai-variants, recalc, warm-feeds
docs/ PRD, API, RSS, seed-data notes
bun install
cp .env.example .env # local defaults use a file: SQLite db at repo root
bun run migrate # apply schema
bun run seed:tags # 22 default tags
bun run seed:demo # 12 demo media (placeholder images) + admin user
bun run dev # http://localhost:3000
The demo seed creates media with picsum.photos placeholders so the app renders
immediately. Email verification links are printed to the server console when
RESEND_API_KEY is unset. Sign up with the address in ADMIN_EMAILS
([email protected] by default) to get an admin account.
See .env.example. Nothing secret is committed. For
production set DATABASE_URL (postgres://...), SESSION_SECRET,
RESEND_API_KEY, the R2_* bucket vars, and (for seeding) UNSPLASH_ACCESS_KEY
OPENAI_API_KEY.# Real photos from Unsplash (needs UNSPLASH_ACCESS_KEY)
bun --filter @aiornot/worker seed:unsplash 100
# Photorealistic AI variants (needs OPENAI_API_KEY + R2_* storage)
bun --filter @aiornot/worker seed:ai-variants 100
# Recompute leaderboard/media stats from raw guesses (cron-safe)
bun --filter @aiornot/worker recalc:leaderboards
Admins can also trigger small seed batches from /admin/seed-batches.
/library)A paid repository of licensed photos, separate from the game's media table (library rows show provenance in the open; the game hides it until you guess).
library_pass is a CoinPay purpose like the others. It costs
PRICE_LIBRARY_PASS_USD (default 9) for LIBRARY_PASS_DAYS (default 30) of
full-resolution downloads, capped at LIBRARY_DAILY_DOWNLOADS (default 100) a
day. Buying again stacks the days. Promo codes with applies_to = 'library_pass' work./submit
(uploaded JPEG/PNG/WebP, claimed not-AI). A moderator approves it, labels it
not_ai, then clicks Add to library in /admin/media. Listing takes the
item out of game scoring. The archive is public-domain (CC0) photographs from
The Met's Open Access API.LIBRARY_STORAGE_DIR (default
$MEDIA_STORAGE_DIR/../.library-originals, so /data/.library-originals in
prod), which /media never serves. Pass holders get them from
/api/library/<id>/download. Public previews are 960px watermarked WebP.# Seed the archive with public-domain photographs from The Met
bun --filter @aiornot/worker seed:library 500
Every merge to master deploys to dev2 (.github/workflows/deploy-dev2.yml),
which builds .nixpacks/Dockerfile (a hand-written Bun image; the path is the
one dev2's compose names). One container runs the migrations and seeds, then the
media daemon (services/worker) in the background and the web app in front.
The runtime is Bun: bun install, bun run build, and bun <file>.ts for the
CLIs (no tsx).
/m/:slug, /i/:slug → 308 redirect), tag pages,
search with sort/filter, /play arena mode.<link> tags and a /feeds directory.robots.txt,
sitemap.xml, search pages noindex to avoid crawl traps.See docs/ for the full PRD and API/RSS/seed references.