1
0
Fork 0
mirror of https://github.com/Yueby/music-together.git synced 2026-04-25 10:55:59 +03:00
No description
Find a file
2026-04-22 18:48:17 +08:00
.agent feat: 可重置设置工厂、房间密码显示、设置面板重组 2026-02-27 00:52:09 +08:00
.cursor feat: QQ 音乐完整支持 + 认证策略模式重构 2026-02-26 04:14:33 +08:00
.github/workflows fix: Docker 镜像 tag 强制小写,修复 GHCR 推送失败 2026-02-15 05:12:25 +08:00
docs fix: improve CORS and cookie handling for LAN/NAS deployment (issue #21) 2026-04-17 11:53:44 +08:00
packages fix(player): prevent double-load on reconnect via recoveredTrackIdRef 2026-04-22 18:48:17 +08:00
public feat: 酷狗 KRC 逐字歌词 + 腾讯音乐认证 + Logo 调整 2026-02-20 02:23:51 +08:00
screenshots feat: 酷狗 KRC 逐字歌词 + 腾讯音乐认证 + Logo 调整 2026-02-20 02:23:51 +08:00
.dockerignore feat: 角色宽限期、后端架构优化、Docker 部署与开源准备 2026-02-15 05:06:17 +08:00
.env.example fix: improve CORS and cookie handling for LAN/NAS deployment (issue #21) 2026-04-17 11:53:44 +08:00
.gitattributes fix: 服务端身份认证 + 密码安全隔离 + rejoin token + 架构文档拆分 2026-03-02 23:22:48 +08:00
.gitignore fix: resolve .gitignore merge conflict 2026-04-14 00:11:04 +08:00
.prettierrc feat: 酷狗 KRC 逐字歌词 + 腾讯音乐认证 + Logo 调整 2026-02-20 02:23:51 +08:00
Dockerfile fix: 修复 Docker 镜像 shared 包未编译导致启动崩溃 2026-02-15 05:43:24 +08:00
LICENSE feat: 角色宽限期、后端架构优化、Docker 部署与开源准备 2026-02-15 05:06:17 +08:00
package.json fix: improve CORS and cookie handling for LAN/NAS deployment (issue #21) 2026-04-17 11:53:44 +08:00
pnpm-lock.yaml fix: upgrade @meting/core to v1.6.1 to fix QQ Music search 2026-03-25 19:54:47 +08:00
pnpm-workspace.yaml feat: 酷狗 KRC 逐字歌词 + 腾讯音乐认证 + Logo 调整 2026-02-20 02:23:51 +08:00
README.en.md docs: fix docker deployment instructions 2026-04-19 00:25:28 +08:00
README.md docs: fix docker deployment instructions 2026-04-19 00:25:28 +08:00

Music Together

Music Together

A real-time collaborative music listening platform — create a room, invite friends, and listen to the same song perfectly synchronized.

简体中文

Stars Forks Issues License

React Vite Tailwind CSS Socket.IO Express Docker

Screenshots

Desktop

Home Search Player Chat
Home Search Player Chat

Mobile

Home Search Player Chat
Home Search Player Chat

Lyrics Display Comparison

Desktop Lyrics Portrait Default (Cover) Portrait Lyrics Mode
Desktop Lyrics Portrait Default Portrait Lyrics

Features

  • Real-time sync -- NTP clock synchronization + scheduled execution for minimal latency
  • Multi-platform music sources -- NetEase Cloud Music, QQ Music
  • Apple Music-style lyrics -- Word-by-word animated lyrics, responsive on desktop and mobile
  • VIP song support -- Room-scoped cookie pool via NetEase QR login
  • RBAC permissions -- Host > Admin > Member with fine-grained access control
  • Voting system -- Members vote to control playback actions
  • Play modes -- Sequential, single loop, list loop, shuffle
  • Real-time chat -- In-room text messaging with system messages
  • Role grace period -- Privileged users retain roles for 30s after disconnect
  • Mobile responsive -- Adaptive layout with orientation-based switching

Quick Start

Prerequisites

  • Node.js >= 22
  • pnpm >= 10

Install & Develop

git clone https://github.com/Yueby/music-together.git
cd music-together
pnpm install
pnpm dev

Frontend: http://localhost:5173 | Backend: http://localhost:3001

Deploy

Single-image Docker deployment:

docker run -d --name music-together --restart unless-stopped \
  -p 3001:3001 \
  ghcr.io/yueby/music-together:latest

If host port 3001 is already in use, change the left side of -p <host-port>:<container-port>, for example -p 8080:3001.

In default auto mode, the frontend connects back to the current origin automatically; the server allows all origins and decides whether to set the cookie Secure flag based on the incoming request protocol.

Set CLIENT_URL only when you need an explicit origin whitelist:

docker run -d --name music-together --restart unless-stopped \
  -p 3001:3001 \
  -e CLIENT_URL=https://music.example.com \
  ghcr.io/yueby/music-together:latest

CLIENT_URL is mainly for explicit whitelist mode or separated frontend/backend deployments. In default auto mode, you usually do not need to set it manually.

If you expose HTTPS through Nginx / Caddy / 1Panel / Lucky, make sure the proxy forwards X-Forwarded-Proto, or the server cannot auto-detect whether it should issue Secure cookies.

Push to main triggers GitHub Actions to build and push the image. See Architecture Docs for details.

Project Structure

packages/
  client/   -- Frontend React application
  server/   -- Backend Node.js service
  shared/   -- Shared types, constants, and permission definitions

Acknowledgements

Library Description
Howler.js Web audio playback
Apple Music-like Lyrics Lyrics component (GPL-3.0)
Meting Multi-platform music API
NeteaseCloudMusicApi Enhanced NetEase Cloud Music API
CASL Permission management
Zustand State management
shadcn/ui UI component library
Motion Animation library

License

AGPL-3.0