645 Commits

Author SHA1 Message Date
cjones 955665401a Override get_segment_end() in ServeClientOpenVINO to match OpenVINO's WhisperDecodedResultChunk class. 2026-07-24 23:16:42 -04:00
cjones 17b1639a9b Get ready to add diarization to openvino backend. 2026-07-23 00:05:02 -04:00
Vineet Suryan 06ec02445d Merge pull request #480 from Kokkini/feature/streaming-transcription-client
Add StreamingTranscriptionClient for streaming from any source
2026-07-17 12:24:02 +02:00
Vineet Suryan daf3da8633 Merge pull request #523 from Kaihui-AMD/faster-whisper-rocm
Add AMD ROCm GPU support for faster_whisper backend
2026-07-15 15:43:46 +02:00
Kaihui-AMD 2e466b765a Add AMD ROCm GPU support for faster_whisper backend
Add ROCm_whisper.md (Docker + native install guide) and docker/Dockerfile.rocm
based on rocm/pytorch:rocm7.2.4 (PyTorch 2.10.0) that installs the official
CTranslate2 v4.8.0 ROCm wheel. The default faster_whisper backend runs on AMD
GPUs out of the box with no code changes.

Tested on Radeon AI PRO R9700 (gfx1201) and Ryzen AI Max+ 395 / Radeon 8060S
(gfx1151) with ROCm 7.2.4.

Addresses #520.
2026-07-15 16:13:37 +08:00
Vineet Suryan dfef376086 Merge pull request #524 from nightcityblade/fix/issue-521
fix: allow NumPy 2 for pyannote audio
2026-07-15 09:53:12 +02:00
nightcityblade 26845cabe9 fix: allow NumPy 2 for pyannote audio 2026-07-15 11:13:12 +08:00
Vineet Suryan c0f101f0d1 Merge pull request #516 from nightcityblade/fix/issue-324
fix: improve subtitle readability
2026-07-14 14:59:11 +02:00
Quang Tran ec1dc7c6aa fix: clean shutdown for StreamingTranscriptionClient 2026-07-08 23:13:20 +07:00
Quang Tran a71c578570 fix: address PR review comments on StreamingTranscriptionClient 2026-07-08 22:49:23 +07:00
Quang Tran f4f1b1d8be feat: support manual audio streaming from any source 2026-07-08 22:46:34 +07:00
nightcityblade ad4d314b79 test: cover subtitle wrapping edge cases 2026-07-07 23:04:01 +08:00
nightcityblade 8c0caf1be0 fix: improve subtitle readability 2026-07-07 23:04:01 +08:00
Vineet Suryan d9459ebf2d Merge pull request #517 from dmaier-ef/fix/idle-transcription-thread-cpu-contention
Fix idle-client busy-wait before first audio frame
2026-07-06 11:37:35 +05:30
David Maier 5b577b34e4 Add configurable timeout for first-frame wait and improve thread-safety 2026-07-03 14:45:09 +02:00
Aaron Boxer 2debc0ee80 Make initial_prompt and vad_parameters accessible from the client
Expose initial_prompt and vad_parameters as flat client parameters
(consistent with hotwords, send_last_n_segments, etc.), send them as
flat handshake keys, and read them server-side with null-safe
options.get(...). Supersedes #283; avoids the options-bag None.get crash.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 11:36:26 -04:00
Aaron Boxer 9f7a043d8b ctranslate2: add missing libcublas dep 2026-06-26 10:38:56 -04:00
Alessandro Griseta ee64458194 Use command -v dnf instead 2026-06-26 10:28:41 -04:00
David Maier 056774ea50 Fix idle-client busy-wait before first audio frame 2026-06-26 14:57:03 +02:00
Vineet Suryan e4160d2d06 Merge pull request #513 from SuperCowProducts/clarify-installation-instructions
Make install instructions clearer
2026-06-26 16:03:33 +05:30
nightcityblade 471c3fd6b4 docs: add macOS OpenMP workaround 2026-06-24 11:14:48 -04:00
makaveli10 ac7a9f849c fix(batch): add temperature fallback to prevent decoder runaway
Signed-off-by: makaveli10 <vineet.suryan@collabora.com>
2026-06-23 10:52:02 -04:00
makaveli10 ecb052c873 Enable single-model mode for stock models when batch_inference is set
Signed-off-by: makaveli10 <vineet.suryan@collabora.com>
2026-06-23 10:52:02 -04:00
nightcityblade ee3113a507 docs: clarify iOS project setup 2026-06-23 10:50:31 -04:00
Alessandro Griseta 81ff199a70 First venv activate, then pip install 2026-06-18 12:29:43 +02:00
Aaron Boxer d0ad362b20 chrome extension: point to Modal transcription service
- add unit test
2026-06-14 12:18:36 -04:00
Aaron Boxer 44940e2834 Support known speaker hints in REST API 2026-06-14 12:17:44 -04:00
nightcityblade 32c1b18c9f fix: support uint8 websocket audio format 2026-06-04 16:04:38 -04:00
Vineet Suryan 582d5426d6 Bump version v0.9.0 v0.9.0 2026-06-02 11:54:07 +05:30
nightcityblade 1814dd9bfa fix: include server API dependencies in package 2026-06-01 19:50:34 -04:00
nightcityblade 0747529910 test: strengthen wheel install smoke test 2026-06-01 19:50:34 -04:00
nightcityblade cef3352c5b test: add clean virtualenv install smoke test 2026-06-01 19:50:34 -04:00
nightcityblade 3516f663e5 fix: support Python 3.13 server installs 2026-06-01 19:24:17 -04:00
nightcityblade d006d4abb3 fix: make caption overlay line count configurable
Fixes collabora/WhisperLive#486
2026-06-01 19:18:15 -04:00
nightcityblade 6242ad7f81 fix: add av to package requirements 2026-06-01 18:58:28 -04:00
Aaron Boxer 5334ea0f7a Add WebSocket authentication via api_key
- When --api_key is set, WebSocket connections require auth too
- Supports Authorization: Bearer <key> header or ?token=<key> query param
- Unauthenticated connections receive HTTP 401 before upgrade
- Uses websockets process_request callback (no resource allocation before auth)
- Added 5 unit tests for WebSocket auth handler
2026-05-26 23:07:50 -04:00
Aaron Boxer b648bcb2a4 Add optional API key auth and rate limiting for REST API
- api_key param: requires 'Authorization: Bearer <key>' header
- rate_limit_rpm param: per-IP sliding-window rate limit (requests/min)
- Both are off by default (backward compatible)
- CLI flags: --api_key, --rate_limit_rpm
- Added 5 unit tests for auth and rate limiting
2026-05-26 23:02:43 -04:00
Aaron Boxer e86d98dd80 Improve REST API unsupported param warnings
- Enumerate each ignored param individually in log message
- Add warnings for 'include' param (was previously silent)
- Added 6 unit tests for REST API param validation
2026-05-26 22:59:12 -04:00
Aaron Boxer c5ec7f4a99 Add reconnect logic to WebSocket client
- New params: max_retries (default 0), retry_delay (default 5s)
- On unexpected close, retries up to max_retries times
- Does not retry on server_error (server rejected connection)
- Extracted _create_websocket() helper for reuse
- Added 4 unit tests for reconnect behavior
2026-05-26 05:45:37 -04:00
Vineet Suryan 52005b94cb Merge pull request #443 from boxerab/configurable-constants
Extract hardcoded buffer constants into class attributes
2026-05-26 13:55:13 +05:30
Vineet Suryan f2f769532b Merge pull request #442 from boxerab/unify-translate-flags
Clarify --translate vs --enable_translation CLI flags
2026-05-26 13:25:23 +05:30
Vineet Suryan cdc661ce28 Merge pull request #434 from nightcityblade/fix/issue-405
docs: fix setup instructions reported in #405
2026-05-26 13:17:37 +05:30
Aaron Boxer 8396763444 fix: set proper mock_info attributes in SSE streaming tests
MagicMock auto-attributes are not JSON serializable. Set language,
language_probability, and duration explicitly. Also exclude metadata
events from segment count assertion.
2026-05-25 09:44:21 -04:00
Aaron Boxer 8ac98dceec feat: add SSE streaming for REST transcription endpoint
- stream=true now returns text/event-stream with per-segment SSE events
- Each segment yields 'data: {json}' followed by 'data: [DONE]'
- Error events streamed as 'data: {"error": ...}'
- Temp files cleaned up in finally block
- 5 new tests in test_server_extended.py (183 total passing)
2026-05-25 09:44:21 -04:00
Aaron Boxer 8bde966c1e docs: remove features from README that moved to Aavaaz
Remove authentication, rate limiting, and auto-reconnect documentation
since these features now live in the Aavaaz project.
2026-05-15 10:45:31 -04:00
Aaron Boxer dc4a707f9a chore: add .gitignore to exclude __pycache__, virtualenvs, and build artifacts 2026-05-15 10:45:31 -04:00
Aaron Boxer c028c4b584 feat: add segment_post_processor hook for external plugins
Add a minimal, non-breaking hook to WhisperLive that allows external
projects to post-process transcription segments before they are sent
to the client.

Changes:
- ServeClientBase: add segment_post_processor attribute (default None)
- ServeClientBase.send_transcription_to_client: apply post_processor
  per-segment with error handling (falls back to original segment)
- TranscriptionServer: add segment_post_processor parameter to run()
  and wire it to each client on creation

This enables downstream projects to plug in custom processing
(e.g. formatting, PII redaction, diarization tagging) without
modifying WhisperLive core code.
2026-05-15 10:45:31 -04:00
Aaron Boxer 4e31f8c61b Add word-level timestamps and confidence scores
- New word_timestamps option (default False) in client handshake
- When enabled, each segment includes 'words' array with per-word
  start/end times and probability scores
- Wired through entire pipeline: client → server → backend → transcribe()
- Words include timestamp_offset for accurate absolute times
- REST API already supported word timestamps; now WebSocket does too
- Added 9 unit tests for word timestamp extraction and formatting
2026-05-15 10:35:27 -04:00
Aaron Boxer 18de3eacc7 Document all new features in README
- Added 'Advanced Features' section with 8 subsections
- Word-level timestamps: WebSocket JSON example
- Custom vocabulary / hotwords: usage and REST API support
- Speaker diarization: setup, pyannote dependency, output format
- Authentication: API key for REST + WebSocket
- Rate limiting: per-IP RPM configuration
- Auto-reconnect: max_retries / retry_delay
- Batch inference: CLI flags
- Raw PCM input: int16 normalization
- Updated table of contents
2026-05-15 09:01:48 -04:00
Aaron Boxer 18b897277f Add real-time speaker diarization support
- New whisper_live/diarization.py: SpeakerDiarizer with online clustering
- Uses pyannote.audio speaker embeddings (optional dependency)
- Cosine similarity threshold for speaker matching (default 0.55)
- Running average embedding update for speaker stability
- Configurable max_speakers limit (default 10)
- Client options: enable_diarization, max_speakers
- Segments include 'speaker' field when diarization is active
- Graceful fallback: logs warning if pyannote not installed
- Added 12 unit tests (mock-based, no GPU required)
2026-05-13 10:50:59 -04:00