QVocalWriter is a cross-platform, local-first application for working with spoken and written language. It started as a speech-to-text tool for long-form writing and has grown into a modular toolset with independent features for transcription, translation, and assistant-based chat.
The project is under active initial development, with an emphasis on clean C++ APIs, a QML-based UI, and extensibility across platforms. It's currently somewhere between a POC and a MVP.
The focus remains on:
- Long-form content (articles, blog posts, books)
- Offline or self-hosted model usage
- Clear separation between features and models
- Privacy-respecting workflows
QVocalWriter is intentionally designed as a lightweight alternative to tools like LM Studio, focusing on native performance and low resource usage.
Unlike Electron-based applications, QVocalWriter is built with Qt and C++, resulting in:
- Significantly lower memory usage
- Far fewer file handles and background processes
- Faster startup times
- Better coexistence with development tools on the same system
On my Linux workstation, QVocalWriter uses approximately 83 MB of memory before any models are loaded, making it suitable for systems where heavier frameworks struggle or interfere with other applications.
The goal is not to replicate every feature of larger all-in-one tools, but to provide a simple, efficient, and transparent way to work with local language models without unnecessary overhead.
-
Transcription Convert speech to text with support for longer recordings and structured output.
-
Translation Translate text or transcriptions between languages using local models.
-
Assistant Chat Interact with a local language model for drafting, rewriting, summarizing, or refining text, as well as researching, experimenting, or playing with local models of various sizes and capabilities.
Each feature is designed to work independently, sharing models and infrastructure where it makes sense, but without tight coupling.
- CMake
- Qt 6.8 or later (Qt Multimedia, Qt Quick and QML modules)
- C++20 capable c++ compiler, for example g++-13 or better
QVocalWriter builds both whisper.cpp and llama.cpp wrappers with a shared backend selector:
- CMake cache variable:
QVW_GPU_BACKEND - Supported values:
VULKAN(default),VULCAN(alias),CUDA,ROCM,METAL,NONE
Example:
cmake -S . -B build -DQVW_GPU_BACKEND=VULKAN
cmake --build buildNotes:
VULKANrequires both Vulkan headers andglslc(shader compiler), because GGML usesfind_package(Vulkan COMPONENTS glslc REQUIRED).CUDArequires CUDA toolkit and NVIDIA driver stack.ROCMrequires HIP + rocBLAS + hipBLAS development packages.METALis macOS-only; on Linux distros below, useNONEinstead.
The package names below are what you typically need in addition to your normal C++/Qt toolchain.
# Vulkan backend
sudo apt install libvulkan-dev glslc
# CUDA backend (distro package)
sudo apt install nvidia-cuda-toolkit
# or (NVIDIA upstream repo):
# sudo apt install cuda-toolkit
# ROCm backend
sudo apt install libamdhip64-dev libhipblas-dev librocblas-dev# Vulkan backend
sudo dnf install vulkan-loader-devel glslc
# CUDA backend (NVIDIA CUDA repo enabled)
sudo dnf install cuda-toolkit
# ROCm backend
sudo dnf install rocm-hip-devel hipblas-devel rocblas-devel# Vulkan backend
sudo zypper install vulkan-headers shaderc
# CUDA backend (NVIDIA CUDA repo enabled)
sudo zypper install cuda-toolkitROCm on openSUSE/SUSE depends heavily on distro/repo combination (official vs community ROCm repos) and package naming may vary. Look for HIP + BLAS dev packages in your enabled repo set (for example hip, hipblas, rocblas, and corresponding -devel packages where available).
# Vulkan backend
sudo pacman -S vulkan-headers vulkan-icd-loader shaderc
# CUDA backend
sudo pacman -S cuda
# ROCm backend
sudo pacman -S rocm-hip-sdkmkdir build
cd build
cmake ..
cmake --build ../build/bin/QVocalWriter