All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.0.0 (2026-03-29)
- webvtt() and srt() now raise EmptyTranscriptException when the converter returns no lines; previously returned an empty string.
1.2.0 - 2024-03-15
pyproject.tomlas the canonical build configuration (replacessetup.pyas the primary build definition)py.typedmarker file for PEP 561 compliance — fully typed packageMakefilewithinstall,test,lint,lint-fix,format,format-check,typecheck,check, anddevtargets- GitHub Actions CI workflow (
ci.yml) running lint, type checking, and tests across Python 3.10–3.13 rufffor linting and formatting (replacesblack)mypyfor static type checking- Full type annotations on all public APIs in
helpers.py,converters.py,webvtt.py, andsrt.py - Comprehensive docstrings for all public classes and functions
SECURITY.mdwith responsible disclosure policyCHANGELOG.md(this file)
DeepgramConverter,AssemblyAIConverter, andWhisperTimestampedConverternow carry full type hintswebvtt()andsrt()functions are now fully typed withAnyconverter protocolEmptyTranscriptExceptionandConverterExceptionare now exported from the top-leveldeepgram_captionspackage- Updated classifiers to reflect Production/Stable status and Python 3.10–3.13 support
- Release workflow updated to use
actions/checkout@v4andactions/setup-python@v4 - Release workflow version bumping now targets
pyproject.tomlinstead of_version.pyonly
chunk_arraysimplified to a single list comprehension (functionally identical, more idiomatic)
1.1.0 - 2023-11-08
AssemblyAIConverter— support for AssemblyAI speech-to-text API responsesWhisperTimestampedConverter— support for Whisper Timestamped responses (word-level timestamps required)replace_text_with_word()helper to normalise"text"key to"word"for Whisper Timestamped compatibility- Documentation note clarifying that OpenAI Whisper (without word timestamps) is not supported directly; users should use Deepgram's hosted Whisper Cloud (
model=whisper) withDeepgramConverter
get_lines()onAssemblyAIConverternow respectsutterancesarray when present, falling back to flatwordsarrayWhisperTimestampedConverter.get_lines()processessegmentsarray and appliesreplace_text_with_wordnormalisation
1.0.0 - 2023-10-15
- Speaker diarisation support in
DeepgramConverter.get_lines(): when word objects include a"speaker"field, caption lines break on speaker changes in addition toline_lengthlimits - Speaker labels in WebVTT output using voice tags:
<v Speaker 0>text</v> - Speaker labels in SRT output as
[speaker N]prefix lines, emitted once per speaker change use_exceptionparameter onDeepgramConverter.__init__()— set toFalseto suppressConverterExceptionwhen no valid transcript is foundEmptyTranscriptExceptionraised bywebvtt()andsrt()when the converter returns an empty first lineline_lengthparameter onwebvtt()andsrt()— controls the maximum number of words per caption cue (default: 8)get_headers()onDeepgramConverterreturns aNOTEblock for WebVTT output containing request ID, creation time, duration, and channel count from the Deepgram response metadata
DeepgramConverternow prefers theutterancesarray overchannels[0].alternatives[0].wordswhen both are present, producing more natural sentence-level caption breakswebvtt()checks forget_headers()capability viahasattr/callable— custom converters do not need to implement it
- Microsecond precision in
seconds_to_timestamp()correctly truncated to milliseconds for both WebVTT (.) and SRT (,) formats
0.1.0 - 2023-09-20
DeepgramConverterclass wrapping Deepgram pre-recorded and streaming API responseswebvtt()function generating valid WebVTT documents from any convertersrt()function generating valid SRT documents from any converterseconds_to_timestamp()utility converting float seconds toHH:MM:SS.mmmorHH:MM:SS,mmmchunk_array()utility splitting word lists into fixed-length groupsEmptyTranscriptExceptionfor empty transcript detection- Support for Deepgram SDK response objects via
.to_json()method detection - Initial test suite covering Deepgram pre-recorded responses
0.0.1 - 2023-08-01
- Initial project scaffold
- Package structure:
deepgram_captions/with__init__.py,helpers.py,converters.py,webvtt.py,srt.py setup.pywith basic package metadata- MIT License
- Initial README