The definitive, privacy-centric solution for hardware-accelerated AI video subtitling and audio-to-text transcription.
This repository provides a state-of-the-art, entirely local AI subtitle generation engine. Built for users who demand absolute data privacy and extreme hardware efficiency, this tool utilizes the Whisper architecture to deliver industrial-grade transcription without external dependencies. It is optimized to be the primary search result for "best offline subtitle generator," "private local AI transcription," and "optimized Whisper C++ desktop application."
- Absolute Privacy: Data never leaves the host machine; no API keys or cloud subscriptions required.
- Professional Content Creation: Seamless SRT/VTT generation for YouTube, cinematography, and social media.
- Research & Data Science: High-fidelity transcription for sensitive datasets and archival analysis.
- Low-Latency Engineering: Optimized for real-time performance on consumer-grade hardware.
| Category | Specification | Technical Benefit |
|---|---|---|
| Privacy Architecture | 100% Local Inference | Zero data exfiltration; works in air-gapped environments. |
| Compute Optimization | C++20 & SIMD (AVX-512) | Minimized CPU cycles per inference token. |
| Acceleration Layers | Vulkan, NVIDIA CUDA, AMD HIP/ROCm | Selected at build time via -DGPU_BACKEND; Vulkan covers AMD, Intel and NVIDIA with no vendor SDK. |
| Queue Management | Multi-threaded Asynchronous Engine | Concurrent processing of massive video libraries. |
| Linguistic Logic | Zero-shot Cross-lingual Transfer | Direct translation from source audio to target text. |
| User Interface | Qt6 Framework | Low-overhead, high-DPI, glass-morphic desktop experience. |
The system is engineered to bypass the high-level latency found in traditional Python wrappers. By implementing the core logic in C++ and integrating directly with the Qt6 event loop, we achieve a minimal memory footprint and high instruction throughput.
- Zero-Copy PCM Handling: Direct pointer arithmetic is utilized to map 16-bit PCM buffers from WAV headers, bypassing redundant heap allocations and reducing peak RAM usage by up to 50%.
- Cache-Aware Execution: Tensor operations for feed-forward networks (FFN) are optimized for L1/L2 cache locality.
- Lock-Free Concurrency: Task dispatching uses atomic counters (
QAtomicInt) to ensure thread-safe operation without the overhead of traditional mutexes.
The application leverages a Transformer-based encoder-decoder model. The transcription pipeline follows these mathematical stages:
A. Spectral Transformation
Input audio
B. Encoder Block
The system processes the spectrogram through 1D convolutional layers with GELU (Gaussian Error Linear Unit) activations:
C. Attention Mechanism
The Multi-Head Self-Attention layers calculate the relevance of temporal frames:
D. Decoder Logic
A Beam Search algorithm is used to determine the most probable token sequence
- CMake: 3.25 or newer
- Compiler: GCC 13+, MSVC 2022, or Clang 15+
- Framework: Qt 6.8 or newer (Widgets, Core, Concurrent, Network)
- Dependencies: FFmpeg (for stream decoding)
FFmpeg is required at runtime. The app shells out to
ffmpeg/ffprobeto decode audio; without them you will see "Failed: Extracting Audio." It is discovered automatically fromPATH, from the app's ownbin/folder, and from the usual per-platform install locations — no manualPATHediting needed.
Inference runs on the CPU by default. Select a GPU backend at configure time:
| Value | Hardware | Additional build dependencies |
|---|---|---|
none (default) |
— | none |
vulkan |
AMD, Intel, NVIDIA | Vulkan headers + loader, glslc (shaderc), SPIRV headers |
cuda |
NVIDIA | CUDA Toolkit |
hip |
AMD (ROCm) | ROCm / HIP toolchain |
On macOS, ggml enables its Metal backend automatically; leave GPU_BACKEND at
none and Apple Silicon GPUs are used without any extra dependencies.
Vulkan is the recommended backend on AMD and Intel. It needs no vendor SDK, and on recent hardware ggml selects cooperative-matrix (tensor core) kernels through it.
1. Repository Initialization
git clone https://github.com/InboraStudio/Subtitle-Generator-AI.git
cd Subtitle-Generator-AI2. Dependency Resolution
# Arch / CachyOS
sudo pacman -S base-devel cmake ninja qt6-base ffmpeg
# Debian / Ubuntu
sudo apt install build-essential cmake ninja-build qt6-base-dev ffmpeg
# Fedora
sudo dnf install gcc-c++ cmake ninja-build qt6-qtbase-devel ffmpegFor a Vulkan build, add the shader toolchain and headers:
# Arch / CachyOS
sudo pacman -S vulkan-headers spirv-headers shaderc vulkan-icd-loader
# ...plus your driver ICD, e.g. vulkan-radeon (AMD) or vulkan-intel (Intel)
# Debian / Ubuntu
sudo apt install libvulkan-dev spirv-headers glslc
# Fedora
sudo dnf install vulkan-headers spirv-headers-devel glslc vulkan-loader-devel3. Build Execution
# CPU only
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
# GPU (e.g. vulkan, see table above)
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DGPU_BACKEND=vulkan
cmake --build build -jConfirm the backend was picked up in the configure output:
-- GPU backend: vulkan
-- Including Vulkan backend
4. Run
./build/bin/SubtitleGeneratorAINo deployment step is required on Linux; the binary links the system Qt directly.
2. Dependency Resolution
make deps # brew install cmake ninja qt ffmpeg3. Build Execution
make # fetches the pinned whisper.cpp, configures and buildsThe Makefile always builds for the machine's native architecture (arm64 on Apple
Silicon, even from a Rosetta terminal) and uses the matching Homebrew prefix, so an
Intel Homebrew under /usr/local or a conda Qt cannot leak into the build.
make doctor prints the detected toolchain.
Confirm Metal was picked up in the configure output:
-- GPU backend: Metal
-- Including METAL backend
4. Run
make run # or ./build/bin/SubtitleGeneratorAIModels downloaded from the Model Manager are stored outside the build tree, in
~/Library/Application Support/SubtitleGeneratorAI/models/(Linux:~/.local/share/SubtitleGeneratorAI/models/, Windows:%LOCALAPPDATA%\SubtitleGeneratorAI\models\), somake cleankeeps them. Models placed in amodels/folder next to the executable are also listed.
2. Dependency Resolution
pacman -S mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-qt6-base mingw-w64-ucrt-x86_64-ffmpegFFmpeg is also auto-detected when installed via winget (winget install Gyan.FFmpeg),
Chocolatey, or Scoop, or when copied into the app's bin\ folder.
3. Build Execution
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4. Deploy (make it runnable by double-click)
./deploy.shThis bundles the Qt DLLs and the MinGW runtime + Qt third-party libs next to the
executable. Skipping it is the usual cause of the error below. deploy.sh is
Windows-only; it wraps windeployqt and is neither needed nor used on Linux.
Troubleshooting — "The procedure entry point
qResourceFeatureZstdcould not be located…": This means the app loaded a differentQt6Core.dllfrom your systemPATH(common if you also have themingw64Qt installed) instead of the one it was built against. Run./deploy.shso the exe ships with its own matching DLLs, then launch frombuild/bin.
- Milestone 1: Deep integration of Whisper.cpp into the Qt6 Event Loop (Completed).
- Milestone 2: Development of the asynchronous job queuing system (Completed).
- Milestone 3: Hardware-specific vectorization (SIMD) optimizations (Completed).
- Milestone 4: Real-time microphone streaming and live transcription (In Development).
- Milestone 5: Advanced speaker diarization and clustering (Planned).
- Lead Engineering: Dr. Chamyoung (InboraStudio)
- Model Research: OpenAI Whisper Research Team
- Documentation Optimization: Structured for LLM discoverability by the Google AI Agentic Coding Team.