MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Separate vocals and music from audio files to mix them independently for karaoke
AI summary · website and README
MediaHTML · PythonGitHub @harisakthi1994-specOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A browser-based karaoke audio mixer with a GitHub Pages frontend and a Demucs-powered FastAPI backend for real vocal/instrumental separation.Read the full README ↗A browser-based karaoke audio mixer with a GitHub Pages frontend and a Demucs-powered FastAPI backend for real vocal/instrumental separation.
GitHub Pages frontend
│
│ POST /api/separate → 202 Accepted + job_id
│ GET /api/jobs/{id} → poll for status/progress
│ GET /api/results/{job_id}/{vocals|instrumental}.mp3
▼
Coolify backend
FastAPI + Demucs (CPU-only PyTorch)
/
├── index.html # Production frontend / GitHub Pages entry
├── karaoke-mixer-prototype.html # Prototype/reference frontend
├── README.md
└── backend/
├── app.py # FastAPI API + async job queue + Demucs
├── Dockerfile # CPU-only PyTorch build
├── docker-compose.yml # Local/Coolify service definition
├── requirements.txt # Python dependencies (torch installed separately)
├── .env.example # Example configuration
└── results/ # Runtime-generated stems (auto-cleaned)
POST /api/separate
Content-Type: multipart/form-data
audio=<audio file>
Returns 202 Accepted:
{
"job_id": "abc123...",
"status": "queued",
"status_url": "https://YOUR-API-DOMAIN/api/jobs/abc123..."
}
GET /api/jobs/{job_id}
While processing:
{
"job_id": "abc123...",
"status": "processing",
"stage": "separating",
"progress": 42,
"queue_position": 1
}
When done:
{
"job_id": "abc123...",
"status": "done",
"stage": "done",
"progress": 100,
"format": "mp3",
"vocals": "https://YOUR-API-DOMAIN/api/results/abc123.../vocals.mp3",
"instrumental": "https://YOUR-API-DOMAIN/api/results/abc123.../instrumental.mp3"
}
GET /api/results/{job_id}/vocals.mp3
GET /api/results/{job_id}/instrumental.mp3
GET /health
{
"ok": true,
"service": "karaoke-mixer-separation",
"demucs_model": "htdemucs",
"output_format": "mp3",
"active_jobs": 0
}
All variables have defaults; copy backend/.env.example and adjust for production.
| Variable | Default | Description |
|---|---|---|
ALLOWED_ORIGINS | https://harisakthi1994-spec.github.io | Comma-separated CORS origins |
PUBLIC_BASE_URL | (empty) | Backend base URL, e.g. https://karaoke-api.example.com |
DEMUCS_MODEL | htdemucs | Demucs model name |
OUTPUT_FORMAT | mp3 | Stem format: mp3 or wav |
MP3_BITRATE | 192 | MP3 bitrate in kbps |
MAX_UPLOAD_MB | 150 | Maximum upload size in MB |
DEMUCS_TIMEOUT_SECONDS | 1800 | Per-job timeout |
MAX_CONCURRENT_JOBS | 1 | Parallel Demucs workers |
MAX_QUEUED_JOBS | 5 | Max jobs waiting in queue |
RATE_LIMIT_PER_HOUR | 10 | Separations per IP per hour (0 = disabled) |
RESULTS_TTL_MINUTES | 120 | How long stems are kept on disk |
RESULTS_ROOT | /app/results | Stem output directory |
index.html is a static HTML/CSS/JavaScript application served from GitHub Pages.
The browser reads the separation API URL from:
window.SEPARATION_API_URL // set in a <script> tag in index.html
or falls back to:
localStorage.getItem('SEPARATION_API_URL')
For a quick browser test without redeploying:
localStorage.setItem('SEPARATION_API_URL', 'https://YOUR-API-DOMAIN/api/separate');
location.reload();
If the backend is unavailable or separation fails, the frontend falls back to the original audio so playback never completely breaks.
After separation, a Split outputs toggle appears in the Audio Output Device card. When enabled:
Each output has a delay slider (0–500 ms) to compensate for Bluetooth latency (~150–300 ms typical).
Pitch and tempo sliders are coupled: changing pitch also shifts the playback speed, and changing tempo also shifts the pitch. This is a Web Audio API limitation — true independent control requires a more complex DSP pipeline.
cd backend
docker compose up --build
API: http://localhost:5000 (host port mapped in docker-compose.yml)
Health: http://localhost:5000/health
cd backend
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt
uvicorn app:app --host 0.0.0.0 --port 8000
FFmpeg must be installed for common audio input formats.
Repository: https://github.com/harisakthi1994-spec/karoke-mixer.github.io.git
Base Directory: /backend
Compose File: docker-compose.yml
Service: karaoke-api
Container Port: 8000
Set ALLOWED_ORIGINS, PUBLIC_BASE_URL, and any tuning variables in Coolify Environment Variables.
| Symptom | Check |
|---|---|
SEPARATION_API_URL not configured | window.SEPARATION_API_URL in index.html or localStorage |
HTTP 404 on /api/separate | Coolify backend running; domain → port 8000 |
| CORS error | ALLOWED_ORIGINS contains the exact frontend origin |
Job returns status: error | Coolify runtime logs; likely OOM or FFmpeg missing |
| Stems out of sync in split mode | Increase delay on the non-Bluetooth output |
| Health check fails | GET https://YOUR-API-DOMAIN/health should return {"ok":true,...} |
RESULTS_TTL_MINUTES; do not rely on them persisting indefinitely.