Skip to content
lexasoft123Public

About

Singing practice app with AI stem separation, vocal removal, synced karaoke lyrics, pitch detection, transposition, and guided vocal training. macOS, Windows, iOS & Android.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Latest commit

 

History

1,246 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SingZ

Latest release App Store — iPhone and iPad Google Play — Android Android — download APK TestFlight — iOS beta Telegram — updates

A practice app for singers. Drop a song, see its timeline, split it into six stems (vocals / drums / bass / guitar / piano / instruments) with AI, and mute any track while it plays — kill the vocals and it's your karaoke machine, kill the guitar and it's your backing band. Build your ear and pitch with guided vocal lessons, seven-day practice goals and a live pitch meter.

SingZ playing a song split into six stems — vocals, drums, bass, guitar, piano and instruments — karaoke mode on

Cross-platform desktop app: Electron + React + TypeScript, Web Audio for sample-locked multitrack playback. Everything runs locally — no cloud, no accounts (an optional Google Drive sync puts your library on your own Drive so the companion phone app can play it). A fresh OS install needs nothing pre-installed: the app downloads its AI splitter pack once through the built-in setup and keeps it updated automatically.

Get SingZ for Android on Google Play or iPhone and iPad on the App Store. Download Mac, Windows and the Android APK from GitHub Releases.

The app supports English, Russian, Hindi, Japanese, Korean, Thai, Indonesian, Vietnamese, Filipino, Malay, Turkish, Latin American Spanish, Brazilian Portuguese, and Simplified and Traditional Chinese. Choose a language on desktop; mobile follows the device or per-app language setting.

What it does

  • Stems — split any song into seven tracks: lead and backing vocals, drums, bass, guitar, piano and the rest; mute, solo and set volume per stem while it plays. Guitar and piano lanes appear only when the song actually has them. Results are cached per file, so a song is only ever split once.
  • Karaoke mode — lyrics in a side panel with live word-by-word highlighting (click a line to jump), count-in dots before entries after instrumental gaps, the vocal melody drawn as labeled note bars on a piano roll, and mic pitch matching with a live score. A "Guide vocals" toggle brings the original voice back at any time.
  • Beat grid & metronome — beats and bars read from the stems, fused with a neural beat model, landing at the tempo the sheet music actually says (verified against published scores — including songs every tracker wants to hear at double or half speed). Odd bars are found automatically: the lone 2/4 before a chorus, a 5/4 nobody warned you about, a piano intro with no drums to follow. Metronome clicks with count-in, the grid drawn over the waveforms — and every bar line is draggable, with a red badge wherever the detector knows it was guessing. Hand-placed bars survive re-detection.
  • Lyrics — fetched from LRCLIB (time-synced, matched by tags + duration) the moment a song loads; a variant picker with manual search handles other recordings. When nothing is found online, Qwen3-ASR — a speech model trained on singing — transcribes the vocals stem on-device, and a forced aligner times every word. "Check & align" listens the same way to lyrics found online, checks the words against what is actually sung and retimes them for word-exact karaoke; "Precise" snaps them tighter still with a multilingual CTC aligner that runs through the splitter pack.
  • Transpose — pitch-shift the whole mix in semitones (Signalsmith Stretch on the master bus): tempo unchanged, stems stay in sync, the melody lane and detected key follow.
  • Song info — detected key, tempo, vocal range and length, all transpose-aware.
  • Zoom — one shared timeline viewport for waveforms and the pitch roll: pinch or ⌘-scroll to zoom (sample-accurate waveforms up close), two-finger scroll to pan, view follows the playhead.
  • Projects — "Save project" copies the song, stems, lyrics and your settings (transpose/mutes/volumes) into ~/Documents/SingZ/<name>/; Open… browses your saved projects inside the app, recent ones sit right on the drop screen, and the pencil next to the title renames a project — folder on disk included.
  • Google Drive sync & phones — one click connects your own Google Drive (drive.file scope: the app can see only the folder it creates); the desktop pushes the library after every save, md5-diffed so a clean sync is four requests and your media never re-uploads. The companion app in mobile/ (React Native, iOS + Android) plays the synced library with the same karaoke lyrics, melody line and beat grid — songs cache on the phone and keep playing offline. iPhone: on the App Store; early builds land first in the TestFlight beta. Android: available on Google Play; the APK is also attached to every GitHub release.
  • Vocal training — guided programs for foundation, developing and advanced ear skills, plus single notes, intervals, chord tones, scales and arpeggios. Hear a note, sing it, and watch your pitch and hold progress. Intervals grow in order and repeat from different starting notes. Track practice by date; repeating a lesson on the same day uses another playable key. Choose piano (the default), electric piano, nylon guitar or organ, with sound and volume settings remembered across exercises.

SingZ vocal training programs and exercises

  • Log window — the Log button shows what the app is doing under the hood (engines, downloads, lyrics search) and saves to a file for bug reports.

AI engines & models

The installer ships the two lyrics engines — llama.cpp's llama-server, which runs the recogniser, and CrispASR's crispasr, which runs its word aligner (~40 MB together); the splitter arrives as one self-contained pack per platform, downloaded by the first-run setup (htdemucs_6s model embedded — no further downloads to split):

Platform Engine Size
macOS Apple Silicon demucs on PyTorch/MPS (GPU — a song splits in seconds) 208 MB
Windows x64 demucs-onnx with TensorRT-RTX on supported NVIDIA GPUs, CPU fallback See release assets
macOS Intel demucs-onnx on CPU 177 MB

Packs are versioned: when an update ships, the app notices and re-downloads automatically. Machines whose GPU can't run the model are remembered after one attempt and start on CPU instantly from then on. The lyrics speech model (Qwen3-ASR 1.7B, its audio encoder and the 0.6B forced aligner — 3.5 GB, one tile, one download) arrives only when a song first needs transcribing or aligning, with consent. It replaced whisper, and hears sung words markedly better (over a 23-song catalog: WER 0.167 against whisper's 0.278 on songs with no online lyrics, and no invented phrases where whisper made up 55); a machine that already had a whisper model is offered it once at launch, and the old model is deleted once the new one is in — never before. A system-wide demucs install (pipx) is detected and preferred when present. Engine resolution can be steered with SINGZ_DEMUCS, SINGZ_LLAMA_SERVER, SINGZ_CRISPASR, SINGZ_MODELS_DIR; SINGZ_NO_SYSTEM_ENGINES=1 simulates a clean machine. The header's "splitter" chip opens the model manager at any time (with a Reinstall button if an install ever misbehaves).

Develop

npm install
npm run dev

The lyrics engines are vendored binaries; they and the splitter packs are built by scripts:

scripts/vendor-llama.sh                # llama-server, the recogniser's engine (needs cmake)
scripts/vendor-crispasr.sh             # crispasr, the word aligner's engine (needs cmake)
scripts/build-gpu-pack.sh              # torch/MPS pack (Apple Silicon)
scripts/build-onnx-pack.sh win32-x64   # demucs-onnx packs (also darwin-x64)

In dev, a system demucs (pipx) works out of the box — no pack needed.

Keyboard: space play/pause, ←/→ seek ±5 s, Esc closes karaoke.

Build & releases

npm run build      # bundles main/preload/renderer into out/
npm run typecheck
npm run dist       # package an installer for the current platform

CI (.github/workflows/build.yml) builds macOS (arm64 + x64 dmg) and Windows (x64 NSIS) on every v* tag, compiles the two lyrics engines and all three splitter packs, and attaches everything to the GitHub Release (a build missing either engine goes red — after the packs are attached, so the fleet's splitter never waits on it):

git tag v0.2.0 && git push origin v0.2.0

The in-app pack downloads point at the latest release assets, so releases must be publicly reachable (or set SINGZ_GPU_PACK_URL).

macOS builds are Developer ID-signed and notarized by Apple. Download the dmg, drag SingZ across, open it — no "Apple could not verify…" dialog, and nothing to approve in System Settings. (v0.19.1 is the first signed release; on an earlier download macOS still shows that dialog — approve it once under System Settings → Privacy & Security.)

Windows is still unsigned and shows a SmartScreen prompt — More info → Run anyway. The packs bundle their own MSVC runtime, so nothing else needs installing. Clearing that prompt needs an Authenticode certificate; the options are Azure Trusted Signing or SignPath's OSS tier (see docs/DEVELOPMENT.md).

Contributor docs: docs/ARCHITECTURE.md · docs/DEVELOPMENT.md · AGENTS.md · product/platform rules

How it works

  • Main process (src/main) — engine resolution (system demucs → the platform's splitter pack), model manager with versioned pack downloads, Qwen3-ASR transcription + LRCLIB client + word alignment, project library, stems cache by content hash, in-app diagnostic log, allowlisted file access over IPC.
  • Preload (src/preload) — small typed bridge (window.singz).
  • Renderer (src/renderer) — React UI. MultitrackEngine schedules all stems on one AudioContext clock (sample-sync) with gain-ramp mute/solo and a Signalsmith Stretch node for transpose; melody extraction (probabilistic YIN with Viterbi decoding) runs in a worker; waveforms render from peak envelopes or raw samples depending on zoom; playback progress drives a single CSS variable so it costs no redraws.

Shared audio foundation

SingZ and LoopZ share zCore, an independently maintained native audio foundation. This checkout pins it as a Git submodule at third_party/zcore. Builds verify the parent gitlink and clean child checkout without fetching a floating branch. Initialize it with git submodule update --init -- third_party/zcore. See the development workflow for updating the pinned dependency.

About

Singing practice app with AI stem separation, vocal removal, synced karaoke lyrics, pitch detection, transposition, and guided vocal training. macOS, Windows, iOS & Android.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages