Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Blindtest multijoueur en ligne, gratuit et sans compte : jusqu'à 12 joueurs avec leurs playlists Spotify, Deezer ou Apple Music. Next.js, Socket.io.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗🇬🇧 English | 🇫🇷 Français
Museek is a free online multiplayer music quiz (blind test), no account needed, for up to 12 players, using your own Spotify, Deezer or Apple Music playlists. Everyone brings a playlist, Museek shuffles the tracks together, and every player who recognises the artist or the title scores points.
🌐 Play online: https://museek.xiao-web.com/
📝 Technical write-up: Building a multiplayer music quiz where everyone brings their own playlist (Next.js + Socket.io)
| Lobby: settings and playlist | Round: type the artist and the title |
|---|---|
| Autocomplete | Answer reveal |
|---|---|
| Results |
|---|
The project is a monorepo:
music-blender/
├── backend/ # Node.js / Socket.io server
│ ├── scripts/ # Track extraction (Spotify, Deezer, Apple) and transliteration
│ ├── types/ # Game and socket event types
│ ├── tests/ # Tests (see "Tests" below)
│ ├── servor.ts # Main backend server entry point
│ └── package.json
├── frontend/ # Next.js application
│ ├── src/
│ │ ├── app/ # Next.js config (App Router): home `/`, `/mentions-et-politiques` page, sitemap, robots
│ │ ├── components/ # UI components (stepper, autocomplete, PWA, etc.)
│ │ ├── context/ # Contexts: game (GameContext) and language (LanguageContext)
│ │ ├── locales/ # Translation files (FR/EN)
│ │ ├── types/ # Client-side game types
│ │ ├── views/ # App views (Home, Lobby, Game, Results)
│ │ └── utils/ # Shared socket, game clock (gameClock), local storage
│ └── package.json
├── package.json # Global scripts
└── README.md # This file
backend/.env with process.loadEnvFile)Install the root dependencies first, then the frontend and backend ones:
# Install global dependencies (concurrently)
npm install
# Install backend dependencies
npm install --prefix backend
# Install frontend dependencies
npm install --prefix frontend
Create a .env file in the backend/ folder:
# backend/.env
PORT=4000
SPOTIFY_CLIENT_ID=your_spotify_client_id # optional (Spotify albums)
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret # optional (Spotify albums)
GROQ_API_KEY=your_groq_key # optional (romanisation)
GROQ_MODEL=qwen/qwen3.8-27b # optional, Groq model used
TRUST_PROXY=1 # optional, enable behind a reverse proxy
Per-IP limits (per minute, adjustable, default values): RATE_LIMIT_ROOMS=20 room creations, RATE_LIMIT_PLAYLISTS=60 playlist loads, RATE_LIMIT_BAD_JOINS=30 non-existent room codes tried, MAX_SOCKETS_PER_IP=50 simultaneous connections. Behind a reverse proxy (hosts such as Render, Hostinger…), set TRUST_PROXY=1: the server then reads the client address from X-Forwarded-For. Without it, all players share the proxy's address and therefore the same limits.
Note: to get your Spotify credentials, create an application on the Spotify Developer Dashboard.
By default the frontend connects to http://localhost:4000 in development mode. For production, you can create a .env.local file in the frontend/ folder:
# frontend/.env.local
NEXT_PUBLIC_SOCKET_URL=https://your-backend-server.com
From the project root, run:
npm run dev
This starts simultaneously:
Then open http://localhost:3000 in your browser to play!
The (backend) tests start their own server on port 4100, play games with real Socket.IO clients, then stop it:
npm test --prefix backend # all tests
npm test --prefix backend -- reset answers # only files whose name contains these words
SKIP_NETWORK=1 npm test --prefix backend # without the games that load a real Deezer playlist
They cover answers and scores, host rights and settings limits, player identity (no leak of the reconnection ID), disconnections and reconnections (including coming back from another app on mobile), game reset, the game clock functions, playlists mixing several scripts (Japanese, Chinese, Korean, Cyrillic…: international version of names and answer correction, with a real Spotify playlist in an end-to-end test), the allowed playlist links (protection against the server calling arbitrary addresses) and per-IP limits. The test server shortens the grace period from 5 minutes to 3 seconds (GRACE_PERIOD_MS). Frontend lint: npm run lint --prefix frontend.
The project follows a privacy-by-default principle:
/mentions-et-politiques).This game is an independent project and is neither affiliated with, sponsored by, nor endorsed by Spotify, Deezer or Apple Music. The associated titles, artists and visuals remain the exclusive property of their respective owners.
Code released under the ISC license. The trademarks and visuals of Spotify, Deezer and Apple Music, as well as the audio previews, remain the property of their respective owners and are not covered by this license. Third-party fonts and components: see THIRD_PARTY_NOTICES.md.