Skip to content

Repository files navigation

WakkaQt 🎀

"Because Auto-Tune is expensive and your bathroom acoustics only get you so far."

WakkaQt is a free, open-source karaoke recording and production studio built with Qt6. Load a karaoke video, grab a mic, sing your heart out, and walk away with a finished, mixed, pitch-corrected MP4 β€” complete with a webcam feed, vocal overlay, and a pitch indicator that will mercilessly show the world every flat note you tried to sneak past.

No subscriptions. No cloud. No judgment. (Well, maybe a little judgment from the pitch monitor.)

Current version: 3.0.0


Downloads

Windows binaries β€” ready to run, no setup required: πŸ‘‰ https://gu.pro.br/WakkaQt

Linux users β€” you get to build it yourself, which is a feature, not a bug. See build instructions below.


What It Does

1. Plays Your Karaoke Track

Drop in any MP4, MKV, WebM, AVI, MOV, MP3, WAV, FLAC, or OPUS file. If Qt6 Multimedia can play it, WakkaQt will play it. You can also paste a YouTube URL and download the video directly from inside the app (powered by yt-dlp).

2. Records You Singing It

Select your microphone from a list of all detected devices. Hit 🎀 SING. Optionally capture your webcam at the same time β€” for those who want to remember exactly what they looked like belting out Bohemian Rhapsody at 2 AM.

3. Makes You Sound Better Than You Are

Before rendering, the vocal track runs through a full DSP pipeline:

  • Pitch correction β€” phase-vocoder pitch shifting with adjustable strength (0 = raw humanity, 100 = robot perfection)
  • Scale-aware snapping β€” snap pitch to Major, Minor, Pentatonic, Blues, Dorian, Mixolydian, Lydian, Phrygian, Locrian, Harmonic Minor, Melodic Minor, Whole Tone, Diminished, or plain Chromatic β€” in any of the 12 keys
  • Retune speed β€” 0 ms for that T-Pain effect, up to 300 ms for a natural glide
  • Formant preservation β€” LPC-based envelope re-synthesis keeps your voice sounding human even after aggressive pitch shifting
  • Noise reduction β€” spectral subtraction gate with adaptive noise floor estimation (goodbye, fan noise)
  • Reverb β€” Freeverb-style Schroeder reverb with room size, decay, and wet/dry controls
  • Dynamics β€” compressor, limiter, and harmonic exciter for a polished, loud-enough final mix

All FFTW plans are created once and reused for the entire recording β€” no plan allocation mid-session, no glitches.

4. Lets You Preview and Tweak

A full-featured preview dialog lets you hear the processed vocal, adjust every enhancement parameter in real time, nudge the audio/video sync offset, and preview again β€” as many times as you need before committing to a render.

5. Renders a Professional-Looking Video

Output: a 1920Γ—1080 MP4 with the karaoke video on top and your webcam below. The vocal is mixed in with all enhancements applied. A pitch indicator strip is burned into the webcam frame β€” green when you're in tune, yellow when you're drifting, red when you're… having a moment.

Native FFmpeg integration renders entirely in-process with a real-time progress bar. Falls back gracefully to spawning ffmpeg via a subprocess if the dev libraries weren't present at build time.

6. Generates a Backing Track

Load any song and click 🎡 Backing Track. WakkaQt downloads the UVR-MDX-NET-Inst_HQ_3 ONNX vocal separation model (~80 MB, once) and runs it locally on your machine β€” no internet required after the first download, no cloud service, no privacy leak, no subscription.

The model separates vocals from the instrumental using MDX-Net deep learning, processed through a full STFT/iSTFT pipeline with FFTW3. If the input is a video file, the separated audio is muxed back onto the original video by default β€” so you keep the visuals. You can still save as audio-only (WAV or MP3) by choosing an audio format in the save dialog. Separation can be aborted mid-way with the Abort button.

7. Keeps a Session Library

Every recording is saved to ~/.WakkaQt/library/ with a UUID folder, all source files, and JSON metadata. The library dialog lists everything with timestamps. You can rename, delete, or re-render any session β€” with updated enhancement settings β€” at any time.


Feature Overview

Feature Status
MP4/MKV/WebM/MP3/WAV/FLAC playback βœ…
Microphone recording (selectable device) βœ…
Webcam recording βœ…
Audio-only recording (no webcam required) βœ…
Real-time pitch monitor (YIN, always visible) βœ…
Real-time waveform visualizer βœ…
Pitch correction (phase vocoder) βœ…
Scale/key-aware pitch snapping βœ…
Formant preservation (LPC) βœ…
Noise reduction (spectral subtraction) βœ…
Reverb (Freeverb/Schroeder) βœ…
Compressor + limiter + harmonic exciter βœ…
Preview dialog with live tweak βœ…
Native FFmpeg rendering (in-process) βœ…
Pitch overlay on rendered video βœ…
Live webcam video preview (synced) βœ…
Video effects (Vertigo, Technicolor, ...) βœ…
Session library (save/rename/delete/re-render) βœ…
YouTube download (via yt-dlp) βœ…
YouTube karaoke browser (search + preview) βœ…
AI vocal separation β†’ backing track (ONNX) βœ…
Backing track: video-preserving output βœ…
Hardware-accelerated H.264 (VAAPI / NVENC) βœ…
Abort render / abort separation βœ…
Cross-platform (Linux / Windows) βœ…
Subscription required ❌
Phone home to a server ❌
Judgment about your singing mostly ❌

Building on Linux

Prerequisites

Install the required development packages (Debian/Ubuntu):

sudo apt install \
    build-essential cmake ninja-build \
    qt6-base-dev qt6-multimedia-dev \
    libqt6multimedia6 libqt6multimediawidgets6 \
    libfftw3-dev \
    libavformat-dev libavcodec-dev libavfilter-dev \
    libavutil-dev libswresample-dev libswscale-dev \
    libglib2.0-dev \
    pkg-config

H264 recording support (strongly recommended)

The standard libavcodec package on Ubuntu/Debian is built without H264 encoding. Install the extra-codecs variant so WakkaQt can record webcam footage in H264 (the preferred codec):

sudo apt install libavcodec-extra

This replaces libavcodec with a version that has H264 (and other patent-encumbered codecs) compiled in. Without it, WakkaQt falls back to MotionJPEG for recording, which gives lower quality at the same bitrate.

On Fedora / RHEL, the ffmpeg-free package in the standard repos also lacks H264 encoding. Enable RPM Fusion and swap in the full FFmpeg build:

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf swap ffmpeg-free ffmpeg --allowerasing

For the AI backing-track feature, also install the ONNX Runtime development package.

Debian/Ubuntu:

sudo apt install libonnxruntime-dev

Fedora / RHEL (not in standard repos β€” install from the official release):

ORT_VERSION=1.20.1
wget https://github.com/microsoft/onnxruntime/releases/download/v${ORT_VERSION}/onnxruntime-linux-x64-${ORT_VERSION}.tgz
tar -xzf onnxruntime-linux-x64-${ORT_VERSION}.tgz
sudo cp -r onnxruntime-linux-x64-${ORT_VERSION}/include/onnxruntime /usr/local/include/
sudo cp onnxruntime-linux-x64-${ORT_VERSION}/lib/libonnxruntime.so* /usr/local/lib/
sudo ldconfig

Windows (MinGW / MSVC):

  1. Download onnxruntime-win-x64-*.zip from the ONNX Runtime releases page.
  2. Extract and copy the contents to C:\Program Files (x86)\onnxruntime\.
  3. Inside that folder, create the subfolder include\onnxruntime\ and move all header files from include\ into it. The final structure must be:
    C:\Program Files (x86)\onnxruntime\
      include\
        onnxruntime\
          onnxruntime_cxx_api.h
          onnxruntime_c_api.h
          ... (all other .h files)
      lib\
        onnxruntime.lib
        onnxruntime.dll
    
  4. Copy onnxruntime.dll next to WakkaQt.exe in your build/install folder β€” Windows needs the DLL at runtime.

CMake will find the library automatically in Program Files (x86)\onnxruntime during configure.

ONNX Runtime is entirely optional β€” if it is not found at configure time, WakkaQt builds and runs normally without it and the backing-track button simply won't appear.

On Fedora/RHEL-based systems:

sudo dnf install \
    cmake ninja-build gcc-c++ \
    qt6-qtbase-devel qt6-qtmultimedia-devel \
    fftw-devel \
    ffmpeg-free-devel \
    glib2-devel \
    pkgconf

You also need ffmpeg and yt-dlp installed as runtime tools:

sudo apt install ffmpeg yt-dlp   # Debian/Ubuntu
sudo dnf install ffmpeg yt-dlp   # Fedora

or even better, use the nightly yt-dlp so you get early fixes:

mkdir -p ~/.local/bin

curl -L \
  https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \
  -o ~/.local/bin/yt-dlp

chmod +x ~/.local/bin/yt-dlp

Configure and Build

git clone https://github.com/guprobr/WakkaQt.git
cd WakkaQt
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel

Debug build:

cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build --parallel

Run

./build/WakkaQt

Install System-Wide (optional)

sudo cmake --install build

Installs to /usr/bin/WakkaQt, with an icon at /usr/share/icons/hicolor/256x256/apps/WakkaQt.png and a .desktop launcher in /usr/share/applications/.


Runtime Dependencies

Tool Purpose
ffmpeg Render fallback when FFmpeg dev libs were absent at build time
yt-dlp In-app video download from YouTube and other sites

Both must be on $PATH at runtime. The ONNX model (~80 MB) is downloaded automatically on first use of the backing-track feature and cached in ~/.WakkaQt/models/.

Video Effects (optional β€” frei0r plugins)

Most effects on the PreviewDialog's "✨ Effects" tab are plain libavfilter chains and always work. A few (currently πŸŒ€ Vertigo) are backed by frei0r plugins instead, which ffmpeg loads dynamically at runtime β€” not a build-time dependency, and entirely optional: if a frei0r plugin isn't found, WakkaQt just hides that effect from the list instead of erroring.

WakkaQt looks for the plugins in a few common locations automatically (see main.cpp's FREI0R_PATH setup), in this order:

Linux:

sudo apt install frei0r-plugins   # Debian/Ubuntu
sudo dnf install frei0r-plugins   # Fedora/RHEL

Auto-detected from the standard per-distro paths (/usr/lib/x86_64-linux-gnu/frei0r-1, /usr/lib64/frei0r-1, /usr/lib/frei0r-1, /usr/local/lib/frei0r-1) β€” no extra setup needed once the package is installed.

Windows: There's no single official frei0r installer. Pick one:

  1. Bundle it with the app (recommended for distributing a prebuilt binary) β€” drop a frei0r-1 folder containing the plugin DLLs next to WakkaQt.exe. This is the first location WakkaQt checks.
  2. Install via MSYS2: pacman -S mingw-w64-x86_64-frei0r-plugins, then copy mingw64/lib/frei0r-1 to Program Files\frei0r-1 or Program Files (x86)\frei0r-1.
  3. Reuse an existing Shotcut install β€” Shotcut bundles frei0r plugins, and WakkaQt will find them at Program Files\Shotcut\lib\frei0r-1 if that's present.

macOS:

brew install frei0r

Auto-detected from Homebrew's install path (/opt/homebrew/lib/frei0r-1 on Apple Silicon, /usr/local/lib/frei0r-1 on Intel), a bundled frei0r-1 folder next to the app binary, or an existing Shotcut.app install.


License

See LICENSE for details.

About

A multiplatform Qt6 karaoke recorder written in C++

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages