Skip to content

Commit b743fc7

Browse files
authored
Merge pull request #9 from onyxhat/dev/hermes
Add transcription options and improve performance
2 parents a7b0734 + 93a1628 commit b743fc7

36 files changed

Lines changed: 14067 additions & 48 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,6 @@ cython_debug/
180180
.claude/
181181
.claude-flow/
182182
docs/superpowers/
183-
.swarm/
183+
.swarm/
184+
.DS_Store
185+
/.hermes

README.md

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ Minimal meeting recorder with Obsidian export (local filesystem vault).
77

88
- Record meetings (indefinite duration, Ctrl+C to stop)
99
- Captures mic + system audio simultaneously — no virtual audio device required
10-
- Transcribe with faster-whisper (local, runs on CPU)
10+
- Transcribe with faster-whisper (local CPU/GPU) or OpenAI Whisper API
11+
- GPU auto-detection — CUDA, Apple Silicon (MPS), and CPU fallback
12+
- Stereo diarization — speaker labels when system audio is captured
1113
- Summarize via OpenAI-compatible API (Ollama, OpenAI, OpenRouter, etc.)
1214
- Handles long transcripts automatically — splits into chunks, summarizes each, then merges
1315
- Persona system — choose how recordings are summarized and formatted
@@ -56,9 +58,18 @@ tinysteno record --name "Budget Review"
5658
# Record using a specific persona
5759
tinysteno record --persona rca
5860

61+
# Record with Whisper API backend
62+
tinysteno record --backend api --whisper-api-key sk-...
63+
64+
# Record with explicit GPU device override
65+
tinysteno record --whisper-device cuda --whisper-compute-type float16
66+
5967
# Process existing audio file
6068
tinysteno process recordings/Meeting.wav
6169

70+
# Process with API backend and specific model
71+
tinysteno process recordings/Meeting.wav --backend api --whisper-api-model whisper-large-v3
72+
6273
# Process with a specific persona
6374
tinysteno process recordings/Meeting.wav --persona executive-summary
6475

@@ -155,6 +166,23 @@ auto_tags: true # generate tags from content
155166
# Model sizes (speed ↔ accuracy): tiny · base · small · medium · large
156167
whisper_model: "small"
157168
169+
# Backend: "local" (default, faster-whisper) or "api" (OpenAI Whisper API)
170+
transcription_backend: "local"
171+
172+
# Device override for local backend: "auto" (default, auto-detect), "cpu", "cuda"
173+
# Architecture is auto-detected when set to "auto":
174+
# - CUDA available → cuda + float16
175+
# - Apple Silicon → auto + auto (CTranslate2 MPS)
176+
# - Fallback → cpu + int8
177+
whisper_device: "auto"
178+
whisper_compute_type: "auto"
179+
180+
# API endpoint for remote transcription
181+
# Uses the same base_url/api_key as the summarizer if not set
182+
# whisper_base_url: "https://api.openai.com/v1"
183+
# whisper_api_key: "sk-..."
184+
# whisper_api_model: "whisper-1"
185+
158186
# Feature flags
159187
diarization: false # enable [You]/[Others] speaker labels
160188
# when system audio is captured, output is automatically
@@ -223,6 +251,52 @@ TinySteno captures system audio via ScreenCaptureKit (macOS 12.3+). To enable it
223251

224252
Without this permission, only the microphone will be recorded.
225253

254+
## Transcription Backends
255+
256+
TinySteno supports two transcription backends, selected via `transcription_backend` in config or `--backend` on the CLI.
257+
258+
### Local (default) — faster-whisper
259+
260+
Uses [faster-whisper](https://github.com/SYSTRAN/faster-whisper) (CTranslate2) to transcribe entirely on-device. No data leaves your machine.
261+
262+
**GPU auto-detection:** The first time a local transcriber is created with `device=auto`, TinySteno probes the hardware:
263+
264+
- **CUDA** — detected via CTranslate2's `get_supported_devices()`; uses `cuda` + `float16`
265+
- **Apple Silicon (M1+)** — detected via `platform.machine() == "arm64"`; uses `auto` + `auto` (delegates to CTranslate2 MPS backend)
266+
- **CPU fallback** — no GPU found; uses `cpu` + `int8`
267+
268+
Override detection explicitly in config:
269+
270+
```yaml
271+
whisper_device: cuda
272+
whisper_compute_type: float16
273+
```
274+
275+
Or on the CLI:
276+
277+
```bash
278+
tinysteno record --whisper-device cuda --whisper-compute-type float16
279+
```
280+
281+
### API — OpenAI Whisper API
282+
283+
Transmits audio to a remote Whisper-compatible API endpoint. Useful for machines without a GPU or when you need a larger model than local memory supports.
284+
285+
```yaml
286+
transcription_backend: api
287+
whisper_api_key: "sk-..." # falls back to api_key if unset
288+
whisper_api_model: "whisper-large-v3" # defaults to whisper-1
289+
```
290+
291+
The API backend supports the same features as the local backend:
292+
293+
- Mono transcription
294+
- Stereo diarization (two API calls, one per channel)
295+
- Language detection fallback
296+
- Progress callbacks
297+
298+
Audio files are uploaded to the configured API endpoint. At ~30-40 MB per hour of recording, consider privacy implications when using a cloud API.
299+
226300
## License
227301

228302
MIT

0 commit comments

Comments
 (0)