High-performance Whisper.cpp speech-to-text nodes for Nodetool. This package wraps the community pywhispercpp bindings so you can run low-latency transcription workflows entirely on the CPU with streaming support.
- Local-first ASR – keep conversations on-device by decoding audio without cloud services
- Streaming-friendly – ingest real-time audio chunks and emit incremental transcript updates for responsive UIs
- Whisper.cpp ecosystem – reuse ggml checkpoints from
ggerganov/whisper.cppvia the Hugging Face cache manager built into Nodetool
All nodes live under src/nodetool/nodes/whispercpp:
whispercpp.WhisperCpp– configurable Whisper.cpp transcription with streaming text (chunk) and final transcript (text) outputs
Typed DSL wrappers are available under src/nodetool/dsl/whispercpp for use in generated workflows.
- Python 3.11
- CPU with AVX instructions (recommended for Whisper.cpp performance)
- nodetool-core v0.6.0+
- ggml Whisper model files cached locally from ggerganov/whisper.cpp
- Open Nodetool → Tools ▸ Packages
- Install the
nodetool-whispercpppack from the package registry - Nodetool will handle dependencies and expose the Whisper nodes in the graph editor once installed
git clone https://github.com/nodetool-ai/nodetool-whispercpp.git
cd nodetool-whispercpp
uv pip install -e .
uv pip install -r requirements-dev.txtIf you prefer Poetry or pip, install the project the same way—just ensure dependencies are resolved against Python 3.11.
The Whisper.cpp node expects ggml model files (e.g., ggml-base.en.bin) in the local Hugging Face cache. Download and manage them from the Models Manager in Nodetool:
- Open Nodetool → Menu ▸ Models
- Select the
whispercpptab to view recommended checkpoints for each model size - Click Download for the models you plan to use; Nodetool stores them in the Hugging Face cache automatically
- The UI tracks model availability and prompts you when updates are available
Advanced users can pre-populate the cache manually by running huggingface-cli download ggerganov/whisper.cpp ggml-<model>.bin, but using the UI integration keeps paths consistent and avoids missing-model errors at runtime.
- Install
nodetool-coreand this package in the same environment - Run
nodetool package scanto generate metadata and DSL bindings - (Optional)
nodetool codegento refresh typed DSL wrappers - Build workflows in the Nodetool UI or through Python DSL scripts using the
whispercppnamespace
Example (Python DSL):
from nodetool.dsl.whispercpp import WhisperCpp
node = WhisperCpp(model="base.en", n_threads=8)Connect an audio source (file, microphone stream, or AudioRef) to the node. The node emits incremental transcript chunks on chunk and the final transcript on text, plus timing and probability metadata for downstream nodes.
Run tests and lint checks before submitting PRs:
pytest -q
ruff check .
black --check .Please open issues or pull requests for bug fixes, additional Whisper.cpp capabilities, or performance improvements. Contributions are welcome!