Add whisper.cpp engine with Vulkan GPU support (AMD/Intel/NVIDIA)
- meetrec.py: engine layer with a common transcribe() contract; WhisperCppEngine shells out to whisper-cli, GGML + Silero VAD models auto-download to ~/.cache/meetrec; faster-whisper import now lazy; new --engine CLI option - meetrec_gui.py: Engine dropdown; Device/Compute greyed out for whisper-cpp; model reload keyed on (engine, model, device, compute) - install.sh: --whisper-cpp builds whisper.cpp with -DWHISPER_VULKAN=ON, installs whisper-cli into the prefix and wires WHISPER_CPP_BIN via a generated whisper-cpp.env; build failures degrade to a warning - launchers source whisper-cpp.env; README documents engines - Recorder.stop() is now idempotent (GUI close path called it twice)
This commit is contained in:
@@ -48,11 +48,14 @@ Options:
|
||||
|
||||
```sh
|
||||
./install.sh --model base # pre-download a different model (tiny/base/small/medium/large-v3)
|
||||
./install.sh --whisper-cpp # also build whisper.cpp with its Vulkan GPU backend
|
||||
./install.sh --no-model # skip the model pre-download
|
||||
./install.sh --uninstall # remove everything the installer created
|
||||
PREFIX=/opt/meetrec ./install.sh # install into a different prefix
|
||||
```
|
||||
|
||||
On an **AMD GPU** (e.g. Ryzen AI 300 laptops with a Radeon iGPU), use `--whisper-cpp` and select the `whisper-cpp` engine — see [Engines](#engines) below. The build needs `git`, `cmake`, `g++`, and Vulkan headers (`sudo pacman -S vulkan-headers` on Arch).
|
||||
|
||||
### Manual install (venv)
|
||||
|
||||
```sh
|
||||
@@ -79,6 +82,7 @@ Pick a microphone (or type a name substring), model, language, and compute devic
|
||||
meetrec-cli --list-sources # find your input devices
|
||||
meetrec-cli -s "Conference Mic" --model small --live 8 -o meeting
|
||||
meetrec-cli -s monitor --model base --language en # record system audio
|
||||
meetrec-cli --engine whisper-cpp -o meeting # transcribe on the GPU (Vulkan)
|
||||
python meetrec.py --help # all options
|
||||
```
|
||||
|
||||
@@ -86,13 +90,14 @@ Key options:
|
||||
|
||||
| Option | Meaning |
|
||||
| --------------- | ---------------------------------------------------------------- |
|
||||
| `--engine` | transcription backend: `faster-whisper` (default) or `whisper-cpp` |
|
||||
| `-s, --source` | `default` or a substring of a device name (`--list-sources`) |
|
||||
| `-m, --model` | `tiny` / `base` / `small` / `medium` / `large-v3` (default `small`) |
|
||||
| `-o, --output` | output file stem (default `meeting`) |
|
||||
| `--live SEC` | live-transcription interval in seconds; `0` disables (default 8) |
|
||||
| `--language` | force a language code, e.g. `en`, `de` (default: autodetect) |
|
||||
| `--device` | `auto` / `cpu` / `cuda` (default `auto`) |
|
||||
| `--compute-type`| `int8` / `int8_float16` / `float16` / `float32` (default `int8`) |
|
||||
| `--device` | `auto` / `cpu` / `cuda` (default `auto`); faster-whisper only |
|
||||
| `--compute-type`| `int8` / `int8_float16` / `float16` / `float32` (default `int8`); faster-whisper only |
|
||||
|
||||
`Ctrl+C` stops recording and runs the final transcription.
|
||||
|
||||
@@ -100,7 +105,26 @@ Key options:
|
||||
|
||||
- **Record system audio**: sink monitors appear as `<sink name>.monitor`; use `-s monitor` (or a matching substring).
|
||||
- **Model size vs. speed/accuracy**: `tiny`/`base` are fast and rough, `small` is a good default, `medium`/`large-v3` are most accurate but much slower on CPU.
|
||||
- Models are cached in `~/.cache/huggingface` and shared between the CLI and the GUI.
|
||||
- Models are cached in `~/.cache/huggingface` (faster-whisper) and `~/.cache/meetrec/whisper-cpp` (whisper.cpp) and shared between the CLI and the GUI.
|
||||
|
||||
## Engines
|
||||
|
||||
Meetrec supports two interchangeable transcription backends — `--engine` on the CLI, the **Engine** dropdown in the GUI:
|
||||
|
||||
| Engine | Backend | GPU support |
|
||||
| ------ | ------- | ----------- |
|
||||
| `faster-whisper` (default) | CTranslate2 | NVIDIA CUDA (`--device cuda`); otherwise CPU |
|
||||
| `whisper-cpp` | [whisper.cpp](https://github.com/ggml-org/whisper.cpp) | **AMD / Intel / NVIDIA via Vulkan**; falls back to CPU |
|
||||
|
||||
On AMD hardware (e.g. the Radeon iGPU in Ryzen AI 300 laptops) the `faster-whisper` path is CPU-only — use the `whisper-cpp` engine there, which runs on the GPU when whisper.cpp is built with `-DWHISPER_VULKAN=ON` (`./install.sh --whisper-cpp` does this for you).
|
||||
|
||||
Notes on `whisper-cpp`:
|
||||
|
||||
- The `whisper-cli` binary is looked up in `WHISPER_CPP_BIN`, then `PATH`, then `~/.local/share/meetrec/whisper-cpp/bin/whisper-cli` (where `install.sh --whisper-cpp` puts it).
|
||||
- GGML models (`ggml-*.bin`) download automatically to `~/.cache/meetrec/whisper-cpp` on first use.
|
||||
- VAD works like on faster-whisper: whisper.cpp's Silero VAD model (~1 MB) downloads automatically and is used for both live and final passes.
|
||||
- Live mode spawns `whisper-cli` for every rolling-window pass, so the GGML model is reloaded on each live tick — slightly heavier than faster-whisper, which loads once per recording.
|
||||
- `--device` / `--compute-type` do not apply (GPU vs. CPU is decided by the whisper.cpp build).
|
||||
|
||||
## Project layout
|
||||
|
||||
|
||||
Reference in New Issue
Block a user