Download free

Beltr didn’t come from nowhere

The people

Beltr exists because people kept telling me what was wrong with it.

Thank you to r/karaoke, where this started as a half-finished idea and got taken seriously anyway. Thank you to everyone in the Beltr Discord who files the bug reports nobody wants to write, argues about lyric timing at one in the morning, and posts photos of their living rooms mid-party.

The r/karaoke Discord is also a room full of people building their own karaoke and audio tools, which is rarer than it sounds. Ideas get thrown back and forth in there until one of them turns out to be worth building, and a fair few of the ones in Beltr started as somebody else's. Beltr now imports stems straight from StemDeck and other separator apps, which is one of those ideas.

Beltr was developed with the assistance of AI coding tools. All product decisions, testing, and final code are reviewed and directed by its developer.

Built on

Beltr is a small app standing on decades of other people's work. These are the projects doing the heavy lifting.

Licenses

The complete list of third-party components Beltr ships, downloads, talks to, or reads the output of, and the license each is used under.

Bundled with Beltr

ComponentLicense
FFmpegDecodes, converts and mixes every audio and video file Beltr touchesLGPL-2.1-or-later
FluidSynthTurns imported MIDI and .kar karaoke files into real audioLGPL-2.1-or-later
GeneralUser GS (S. Christian Collins)Provides the instruments those MIDI files are played throughCC-BY-4.0

Machine-learning models

ComponentLicense
UVR-MDX-NET Inst HQ 3 (Anjok07 & aufr33, MDX-Net by kuielab)Splits a song into a vocal track and an instrumental oneMIT
wav2vec2 base 960h (Meta)Lines each word of the lyrics up with the moment it is sungMIT
Parakeet-TDT 0.6B v2 (NVIDIA; ONNX export by Igor Stupakov)Transcribes lyrics from scratch when no synced words can be foundCC-BY-4.0
Silero VAD (Silero Team)Finds where the singing actually is inside a trackMIT
Qwen3-ForcedAligner-0.6B (Alibaba Qwen team)Times each word on Japanese, Korean and Chinese songs, once the word-timing pack is installedApache-2.0
UniDic Lite (The UniDic Consortium, NINJAL)Supplies the Japanese dictionary fugashi reads for the romanized line, once the Japanese dictionary pack is installedBSD-3-Clause

Python libraries

ComponentLicense
ONNX RuntimeRuns every model Beltr uses, on CPU or GPUMIT
FastAPIRuns the server behind the TV, the phones and the dashboardMIT
UvicornServes itBSD-3-Clause
onnx-asr (Igor Stupakov)Drives the Parakeet transcription modelMIT
SwiftF0Hears which note you are singing, in real timeMIT
ONNX Runtime WebRuns the SwiftF0 live pitch model on the TV page (opt-in, issue #751)MIT
MidoReads MIDI and .kar karaoke filesMIT
librosaPowers the audio analysis throughout the preparation pipelineISC
SoundFileReads and writes the stem filesBSD-3-Clause
NumPyHolds the arrays all of the audio work happens inBSD-3-Clause
PillowHandles artworkMIT-CMU
PydanticValidates everything crossing the APIMIT
tinytagReads tags out of your music filesMIT
python-zeroconfLets TV apps find your Beltr on the networkLGPL-2.1-or-later
watchdogNotices new files in your watched foldersApache-2.0
HTTPXMakes every outbound request Beltr sendsBSD-3-Clause
aiofilesKeeps file work off the event loopApache-2.0
python-multipartHandles file uploadsApache-2.0
bcryptHashes the host PINApache-2.0
truststoreUses your operating system's certificates, so Beltr still works behind a corporate TLS proxyMIT
PyYAMLParses configurationMIT
PyThaiNLPRomanizes Thai lyrics for the line under the wordsApache-2.0
cutletRomanizes Japanese lyrics for the line under the wordsMIT
fugashiSplits Japanese lyrics into words for cutletMIT AND BSD-3-Clause
pypinyinRomanizes Chinese lyrics for the line under the wordsMIT
tokenizersReads the word-timing pack's text model once it is installedApache-2.0

Desktop app

ComponentLicense
ElectronWraps Beltr into the desktop appMIT
Node.jsRuns ElectronMIT
electron-builderBuilds the installersMIT
electron-updaterDelivers updatesMIT
electron-storeRemembers your settings between launchesMIT

Installed on request

ComponentLicense
yt-dlpFetches music videos to play behind the lyricsUnlicense
DenoRuns the sandboxed JavaScript yt-dlp needsMIT
cloudflaredOpens an optional tunnel, for phones joining from outside your homeApache-2.0

Services Beltr talks to

ComponentLicense
LRCLIBSupplies the synced lyrics Beltr looks for first, every timeOpen API, CC0 lyrics data
MusicBrainzFills in missing album, year and genre tagsOpen data (CC0 / CC-BY-NC-SA)
Apple iTunes Search APILooks up artwork and metadataPublic API
fanart.tvSupplies artist artworkPublic API, key required
DiscogsSupplies album artwork when nothing else has itPublic API, token required
Last.fmSupplies artist biographies and tagsPublic API, key required

Tools Beltr works with

ComponentLicense
StemDeckSplits a song into stems Beltr imports directlyApache-2.0

About the LGPL components

FFmpeg, FluidSynth and python-zeroconf are licensed under the GNU Lesser General Public License. Beltr ships FFmpeg and FluidSynth as unmodified binaries and runs them only as separate processes; it never links against them. python-zeroconf is included unmodified as an installed Python package.

You are entitled to the complete source for these components, and to replace them with builds of your own. The sources are available from each project's own site, linked above. If you would rather have them from us, email support@beltr.app and we will send you the exact sources used to build the binaries we ship, for at least three years from the date you received this software.