scribeio 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. scribeio-0.1.4/LICENSE +21 -0
  2. scribeio-0.1.4/MANIFEST.in +4 -0
  3. scribeio-0.1.4/PKG-INFO +187 -0
  4. scribeio-0.1.4/README.md +150 -0
  5. scribeio-0.1.4/pyproject.toml +86 -0
  6. scribeio-0.1.4/setup.cfg +4 -0
  7. scribeio-0.1.4/src/scribeio/__init__.py +8 -0
  8. scribeio-0.1.4/src/scribeio/check_report.py +298 -0
  9. scribeio-0.1.4/src/scribeio/checks.py +404 -0
  10. scribeio-0.1.4/src/scribeio/cli.py +982 -0
  11. scribeio-0.1.4/src/scribeio/config.py +249 -0
  12. scribeio-0.1.4/src/scribeio/craig.py +435 -0
  13. scribeio-0.1.4/src/scribeio/defaults.yaml +83 -0
  14. scribeio-0.1.4/src/scribeio/errors.py +34 -0
  15. scribeio-0.1.4/src/scribeio/ffmpeg.py +338 -0
  16. scribeio-0.1.4/src/scribeio/init.py +233 -0
  17. scribeio-0.1.4/src/scribeio/master/__init__.py +1 -0
  18. scribeio-0.1.4/src/scribeio/master/catalogue.py +63 -0
  19. scribeio-0.1.4/src/scribeio/master/config.py +278 -0
  20. scribeio-0.1.4/src/scribeio/master/excerpt.py +175 -0
  21. scribeio-0.1.4/src/scribeio/master/measuring.py +44 -0
  22. scribeio-0.1.4/src/scribeio/master/mix.py +410 -0
  23. scribeio-0.1.4/src/scribeio/master/preview.py +339 -0
  24. scribeio-0.1.4/src/scribeio/master/render.py +183 -0
  25. scribeio-0.1.4/src/scribeio/progress.py +305 -0
  26. scribeio-0.1.4/src/scribeio/templates/glossary.txt +17 -0
  27. scribeio-0.1.4/src/scribeio/templates/scribe.yaml +31 -0
  28. scribeio-0.1.4/src/scribeio/transcribe/__init__.py +5 -0
  29. scribeio-0.1.4/src/scribeio/transcribe/cleanup.py +143 -0
  30. scribeio-0.1.4/src/scribeio/transcribe/energy.py +102 -0
  31. scribeio-0.1.4/src/scribeio/transcribe/glossary.py +135 -0
  32. scribeio-0.1.4/src/scribeio/transcribe/lines.py +207 -0
  33. scribeio-0.1.4/src/scribeio/transcribe/markdown.py +68 -0
  34. scribeio-0.1.4/src/scribeio/transcribe/models.py +381 -0
  35. scribeio-0.1.4/src/scribeio/transcribe/pipeline.py +155 -0
  36. scribeio-0.1.4/src/scribeio/transcribe/report.py +95 -0
  37. scribeio-0.1.4/src/scribeio/transcribe/session.py +103 -0
  38. scribeio-0.1.4/src/scribeio/transcribe/session_json.py +109 -0
  39. scribeio-0.1.4/src/scribeio/transcribe/whisper.py +534 -0
  40. scribeio-0.1.4/src/scribeio.egg-info/PKG-INFO +187 -0
  41. scribeio-0.1.4/src/scribeio.egg-info/SOURCES.txt +71 -0
  42. scribeio-0.1.4/src/scribeio.egg-info/dependency_links.txt +1 -0
  43. scribeio-0.1.4/src/scribeio.egg-info/entry_points.txt +2 -0
  44. scribeio-0.1.4/src/scribeio.egg-info/requires.txt +16 -0
  45. scribeio-0.1.4/src/scribeio.egg-info/top_level.txt +1 -0
  46. scribeio-0.1.4/tests/conftest.py +14 -0
  47. scribeio-0.1.4/tests/helpers.py +191 -0
  48. scribeio-0.1.4/tests/master/test_cli_master.py +712 -0
  49. scribeio-0.1.4/tests/master/test_excerpt.py +160 -0
  50. scribeio-0.1.4/tests/master/test_master_audio.py +336 -0
  51. scribeio-0.1.4/tests/master/test_master_config.py +325 -0
  52. scribeio-0.1.4/tests/master/test_preview.py +262 -0
  53. scribeio-0.1.4/tests/master/test_render.py +268 -0
  54. scribeio-0.1.4/tests/test_check_report.py +463 -0
  55. scribeio-0.1.4/tests/test_checks.py +636 -0
  56. scribeio-0.1.4/tests/test_cli.py +255 -0
  57. scribeio-0.1.4/tests/test_config.py +259 -0
  58. scribeio-0.1.4/tests/test_craig.py +407 -0
  59. scribeio-0.1.4/tests/test_ffmpeg.py +250 -0
  60. scribeio-0.1.4/tests/test_init.py +215 -0
  61. scribeio-0.1.4/tests/test_progress.py +229 -0
  62. scribeio-0.1.4/tests/transcribe/data/expected.md +11 -0
  63. scribeio-0.1.4/tests/transcribe/test_cleanup.py +175 -0
  64. scribeio-0.1.4/tests/transcribe/test_cli_transcribe.py +655 -0
  65. scribeio-0.1.4/tests/transcribe/test_energy.py +106 -0
  66. scribeio-0.1.4/tests/transcribe/test_ffmpeg_audio.py +37 -0
  67. scribeio-0.1.4/tests/transcribe/test_glossary.py +105 -0
  68. scribeio-0.1.4/tests/transcribe/test_lines.py +141 -0
  69. scribeio-0.1.4/tests/transcribe/test_models.py +474 -0
  70. scribeio-0.1.4/tests/transcribe/test_output.py +145 -0
  71. scribeio-0.1.4/tests/transcribe/test_pipeline.py +139 -0
  72. scribeio-0.1.4/tests/transcribe/test_session_json.py +140 -0
  73. scribeio-0.1.4/tests/transcribe/test_whisper.py +620 -0
scribeio-0.1.4/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Artur Marchewicz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ # sdist: the whole test suite with its helpers and data, never the local-only tests
2
+ graft tests
3
+ prune tests/local
4
+ global-exclude __pycache__ *.py[co]
@@ -0,0 +1,187 @@
1
+ Metadata-Version: 2.4
2
+ Name: scribeio
3
+ Version: 0.1.4
4
+ Summary: Balanced audio and transcripts from Craig (Discord) recordings of TTRPG sessions
5
+ Author: Artur Marchewicz
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/00apm/scribeio
8
+ Project-URL: Documentation, https://github.com/00apm/scribeio/blob/main/docs/README.md
9
+ Project-URL: Issues, https://github.com/00apm/scribeio/issues
10
+ Keywords: ttrpg,transcription,whisper,discord,craig
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: click>=8.2
25
+ Requires-Dist: rich>=13
26
+ Requires-Dist: pyyaml>=6
27
+ Requires-Dist: numpy>=1.24
28
+ Requires-Dist: colorama>=0.4.6; sys_platform == "win32"
29
+ Provides-Extra: transcribe
30
+ Requires-Dist: whisperx<3.9,>=3.8.6; extra == "transcribe"
31
+ Provides-Extra: dev
32
+ Requires-Dist: pytest>=8; extra == "dev"
33
+ Requires-Dist: mypy>=1.10; extra == "dev"
34
+ Requires-Dist: types-PyYAML; extra == "dev"
35
+ Requires-Dist: ruff>=0.6; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ <p align="center">
39
+ <picture>
40
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/00apm/scribeio/main/docs/images/scribeio-logo-dark.svg">
41
+ <img alt="scribeio logo" src="https://raw.githubusercontent.com/00apm/scribeio/main/docs/images/scribeio-logo-light.svg" width="360">
42
+ </picture>
43
+ </p>
44
+
45
+ # scribeio
46
+
47
+ Turn [Craig](https://craig.chat) (Discord) recordings of your TTRPG
48
+ sessions into balanced audio and a transcript ready for your session
49
+ notes.
50
+
51
+ Craig records one track per person. scribeio works on those tracks:
52
+
53
+ - **Audio mastering:** each voice is evened out and brought to the same
54
+ level as the others, the music is kept quieter than the voices so it
55
+ never drowns them out, and everything is mixed into one file.
56
+ - **Transcript:** each track is transcribed by Whisper, a speech-to-text
57
+ model that runs on your own computer
58
+ (through [WhisperX](https://github.com/m-bain/whisperX)), and the lines
59
+ are put together in time order with each person's name.
60
+
61
+ What you get from working per track, locally:
62
+
63
+ - Every line has the right speaker, even when people talk over each
64
+ other.
65
+ - Lines Whisper made up (hallucinations, e.g. "thanks for watching" in a
66
+ silence) are found and removed; a report lists each one.
67
+ - The names of your world are taught to Whisper in a glossary; a misheard
68
+ name is fixed with one line and a rebuild that takes seconds.
69
+ - Your recordings never leave your computer: your players' voices and
70
+ words stay private, and no online service can keep them or use them to
71
+ train its AI models.
72
+
73
+ **Not a TTRPG session, or not Craig?** A podcast or a meeting recorded on
74
+ Discord with Craig works the same way, and so does any other recording
75
+ with one track per person
76
+ ([input recordings](https://github.com/00apm/scribeio/blob/main/docs/recordings.md#not-using-craig)).
77
+
78
+ ## Requirements
79
+
80
+ - Windows, macOS or Linux.
81
+ - [ffmpeg](https://ffmpeg.org) 6.1 or newer.
82
+ - For transcription: an NVIDIA GPU, GTX 16xx / RTX 20xx or newer, 6 GB or
83
+ more (8 GB recommended). Without one it runs on the CPU, very slowly
84
+ (`transcribe.whisper.device: cpu` in `scribe.yaml`). Audio mastering needs no GPU.
85
+ - Disk: up to about 12 GB with transcription (the install and the speech
86
+ models); audio mastering alone needs well under 1 GB.
87
+
88
+ ## Install
89
+
90
+ - [Quick install](https://github.com/00apm/scribeio/blob/main/docs/install.md):
91
+ a few commands, no Python knowledge needed.
92
+ - [Install into your own Python environment](https://github.com/00apm/scribeio/blob/main/docs/install-own-env.md):
93
+ pip, Python 3.10–3.13.
94
+
95
+ ## Quick start
96
+
97
+ In the folder with the Craig download:
98
+
99
+ ```
100
+ scribe init "craig-session-7.zip"
101
+ ```
102
+
103
+ This creates scribeio's settings for this recording: `scribe.yaml`, with
104
+ the Discord accounts from the recording already listed, and `glossary.txt`
105
+ for the names of your world. Write each person's name next to their
106
+ account in `scribe.yaml`, then make the session audio and the transcript:
107
+
108
+ ```
109
+ scribe master "craig-session-7.zip"
110
+ scribe transcribe "craig-session-7.zip"
111
+ ```
112
+
113
+ `scribe check` shows what is installed and what is missing.
114
+
115
+ The files land next to the recording, named by the session date:
116
+
117
+ | File | What it is |
118
+ |---|---|
119
+ | `2026-09-22_master.mp3` | the session audio, every voice at the same level |
120
+ | `2026-09-22_transcript.md` | the transcript, one line per utterance |
121
+ | `2026-09-22_transcript.json` | everything Whisper found, for rebuilding the transcript without the GPU |
122
+ | `2026-09-22_transcript-report.md` | the quality report: what was removed and why |
123
+
124
+ A piece of the transcript:
125
+
126
+ ```
127
+ [01:12:05] Alice (GM): The stairs end at a heavy door. Cold air seeps through the cracks, and from somewhere below comes a slow
128
+ [01:12:11] Sam: Please don't say scratching.
129
+ [01:12:12] Alice (GM): scratching. Something is scratching at the wood.
130
+ [01:12:16] Robin: I put my ear to the door.
131
+ [01:12:17] Sam: We are not opening that door.
132
+ [01:12:19] Alice (GM): The scratching stops. Then, very quietly, something knocks. Three times.
133
+ [01:12:25] Sam: Nope. I'm going back up.
134
+ [01:12:25] Robin: I open the door.
135
+ ```
136
+
137
+ The quick start runs everything on its defaults. The guides below show
138
+ how to make the result your own.
139
+
140
+ ## Usage guide
141
+
142
+ Each guide covers one part; go to the one you need.
143
+
144
+ - **[Input recordings](https://github.com/00apm/scribeio/blob/main/docs/recordings.md):**
145
+ which Craig downloads work, where scribeio puts its files, and how to
146
+ use tracks that did not come from Craig.
147
+ - **[Audio mastering](https://github.com/00apm/scribeio/blob/main/docs/usage/audio.md):**
148
+ listen to a short preview after each step, change how the voices and
149
+ the music sound, adjust one player only, and choose the file format.
150
+ - **[Transcribing a recording](https://github.com/00apm/scribeio/blob/main/docs/usage/transcribe.md):**
151
+ set names and the language, download the models, read the transcript
152
+ and the report, and teach Whisper the names of your world with a
153
+ glossary.
154
+
155
+ All documentation pages, install included:
156
+ [docs](https://github.com/00apm/scribeio/blob/main/docs/README.md).
157
+
158
+ ## Development
159
+
160
+ ```
161
+ git clone https://github.com/00apm/scribeio.git
162
+ cd scribeio
163
+ pip install -e ".[dev]"
164
+ pytest -m "not gpu"
165
+ mypy
166
+ ruff format src tests && ruff check src tests
167
+ ```
168
+
169
+ The tests need ffmpeg 6.1 or newer with the mp3 encoder on PATH, but not
170
+ WhisperX, PyTorch or a GPU: transcription is tested with stand-ins. Tests
171
+ use synthetic data only; no real recordings are in the repository (the
172
+ `gpu` tests need a local recording; `-m "not gpu"` leaves them out).
173
+
174
+ To run real transcriptions from the checkout, install PyTorch with CUDA
175
+ first
176
+ ([Install into your own Python environment](https://github.com/00apm/scribeio/blob/main/docs/install-own-env.md#install)),
177
+ then `pip install -e ".[transcribe,dev]"`.
178
+
179
+ ## License
180
+
181
+ scribeio is free and open source under the
182
+ [MIT License](https://github.com/00apm/scribeio/blob/main/LICENSE): you
183
+ may use, change and share it, also commercially, as long as the licence
184
+ text stays with it.
185
+
186
+ WhisperX, ffmpeg and the speech models are installed separately and come
187
+ with their own licences.
@@ -0,0 +1,150 @@
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/00apm/scribeio/main/docs/images/scribeio-logo-dark.svg">
4
+ <img alt="scribeio logo" src="https://raw.githubusercontent.com/00apm/scribeio/main/docs/images/scribeio-logo-light.svg" width="360">
5
+ </picture>
6
+ </p>
7
+
8
+ # scribeio
9
+
10
+ Turn [Craig](https://craig.chat) (Discord) recordings of your TTRPG
11
+ sessions into balanced audio and a transcript ready for your session
12
+ notes.
13
+
14
+ Craig records one track per person. scribeio works on those tracks:
15
+
16
+ - **Audio mastering:** each voice is evened out and brought to the same
17
+ level as the others, the music is kept quieter than the voices so it
18
+ never drowns them out, and everything is mixed into one file.
19
+ - **Transcript:** each track is transcribed by Whisper, a speech-to-text
20
+ model that runs on your own computer
21
+ (through [WhisperX](https://github.com/m-bain/whisperX)), and the lines
22
+ are put together in time order with each person's name.
23
+
24
+ What you get from working per track, locally:
25
+
26
+ - Every line has the right speaker, even when people talk over each
27
+ other.
28
+ - Lines Whisper made up (hallucinations, e.g. "thanks for watching" in a
29
+ silence) are found and removed; a report lists each one.
30
+ - The names of your world are taught to Whisper in a glossary; a misheard
31
+ name is fixed with one line and a rebuild that takes seconds.
32
+ - Your recordings never leave your computer: your players' voices and
33
+ words stay private, and no online service can keep them or use them to
34
+ train its AI models.
35
+
36
+ **Not a TTRPG session, or not Craig?** A podcast or a meeting recorded on
37
+ Discord with Craig works the same way, and so does any other recording
38
+ with one track per person
39
+ ([input recordings](https://github.com/00apm/scribeio/blob/main/docs/recordings.md#not-using-craig)).
40
+
41
+ ## Requirements
42
+
43
+ - Windows, macOS or Linux.
44
+ - [ffmpeg](https://ffmpeg.org) 6.1 or newer.
45
+ - For transcription: an NVIDIA GPU, GTX 16xx / RTX 20xx or newer, 6 GB or
46
+ more (8 GB recommended). Without one it runs on the CPU, very slowly
47
+ (`transcribe.whisper.device: cpu` in `scribe.yaml`). Audio mastering needs no GPU.
48
+ - Disk: up to about 12 GB with transcription (the install and the speech
49
+ models); audio mastering alone needs well under 1 GB.
50
+
51
+ ## Install
52
+
53
+ - [Quick install](https://github.com/00apm/scribeio/blob/main/docs/install.md):
54
+ a few commands, no Python knowledge needed.
55
+ - [Install into your own Python environment](https://github.com/00apm/scribeio/blob/main/docs/install-own-env.md):
56
+ pip, Python 3.10–3.13.
57
+
58
+ ## Quick start
59
+
60
+ In the folder with the Craig download:
61
+
62
+ ```
63
+ scribe init "craig-session-7.zip"
64
+ ```
65
+
66
+ This creates scribeio's settings for this recording: `scribe.yaml`, with
67
+ the Discord accounts from the recording already listed, and `glossary.txt`
68
+ for the names of your world. Write each person's name next to their
69
+ account in `scribe.yaml`, then make the session audio and the transcript:
70
+
71
+ ```
72
+ scribe master "craig-session-7.zip"
73
+ scribe transcribe "craig-session-7.zip"
74
+ ```
75
+
76
+ `scribe check` shows what is installed and what is missing.
77
+
78
+ The files land next to the recording, named by the session date:
79
+
80
+ | File | What it is |
81
+ |---|---|
82
+ | `2026-09-22_master.mp3` | the session audio, every voice at the same level |
83
+ | `2026-09-22_transcript.md` | the transcript, one line per utterance |
84
+ | `2026-09-22_transcript.json` | everything Whisper found, for rebuilding the transcript without the GPU |
85
+ | `2026-09-22_transcript-report.md` | the quality report: what was removed and why |
86
+
87
+ A piece of the transcript:
88
+
89
+ ```
90
+ [01:12:05] Alice (GM): The stairs end at a heavy door. Cold air seeps through the cracks, and from somewhere below comes a slow
91
+ [01:12:11] Sam: Please don't say scratching.
92
+ [01:12:12] Alice (GM): scratching. Something is scratching at the wood.
93
+ [01:12:16] Robin: I put my ear to the door.
94
+ [01:12:17] Sam: We are not opening that door.
95
+ [01:12:19] Alice (GM): The scratching stops. Then, very quietly, something knocks. Three times.
96
+ [01:12:25] Sam: Nope. I'm going back up.
97
+ [01:12:25] Robin: I open the door.
98
+ ```
99
+
100
+ The quick start runs everything on its defaults. The guides below show
101
+ how to make the result your own.
102
+
103
+ ## Usage guide
104
+
105
+ Each guide covers one part; go to the one you need.
106
+
107
+ - **[Input recordings](https://github.com/00apm/scribeio/blob/main/docs/recordings.md):**
108
+ which Craig downloads work, where scribeio puts its files, and how to
109
+ use tracks that did not come from Craig.
110
+ - **[Audio mastering](https://github.com/00apm/scribeio/blob/main/docs/usage/audio.md):**
111
+ listen to a short preview after each step, change how the voices and
112
+ the music sound, adjust one player only, and choose the file format.
113
+ - **[Transcribing a recording](https://github.com/00apm/scribeio/blob/main/docs/usage/transcribe.md):**
114
+ set names and the language, download the models, read the transcript
115
+ and the report, and teach Whisper the names of your world with a
116
+ glossary.
117
+
118
+ All documentation pages, install included:
119
+ [docs](https://github.com/00apm/scribeio/blob/main/docs/README.md).
120
+
121
+ ## Development
122
+
123
+ ```
124
+ git clone https://github.com/00apm/scribeio.git
125
+ cd scribeio
126
+ pip install -e ".[dev]"
127
+ pytest -m "not gpu"
128
+ mypy
129
+ ruff format src tests && ruff check src tests
130
+ ```
131
+
132
+ The tests need ffmpeg 6.1 or newer with the mp3 encoder on PATH, but not
133
+ WhisperX, PyTorch or a GPU: transcription is tested with stand-ins. Tests
134
+ use synthetic data only; no real recordings are in the repository (the
135
+ `gpu` tests need a local recording; `-m "not gpu"` leaves them out).
136
+
137
+ To run real transcriptions from the checkout, install PyTorch with CUDA
138
+ first
139
+ ([Install into your own Python environment](https://github.com/00apm/scribeio/blob/main/docs/install-own-env.md#install)),
140
+ then `pip install -e ".[transcribe,dev]"`.
141
+
142
+ ## License
143
+
144
+ scribeio is free and open source under the
145
+ [MIT License](https://github.com/00apm/scribeio/blob/main/LICENSE): you
146
+ may use, change and share it, also commercially, as long as the licence
147
+ text stays with it.
148
+
149
+ WhisperX, ffmpeg and the speech models are installed separately and come
150
+ with their own licences.
@@ -0,0 +1,86 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "scribeio"
7
+ version = "0.1.4"
8
+ description = "Balanced audio and transcripts from Craig (Discord) recordings of TTRPG sessions"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ license-files = ["LICENSE"]
12
+ requires-python = ">=3.10"
13
+ authors = [{ name = "Artur Marchewicz" }]
14
+ keywords = ["ttrpg", "transcription", "whisper", "discord", "craig"]
15
+ classifiers = [
16
+ "Development Status :: 3 - Alpha",
17
+ "Environment :: Console",
18
+ "Intended Audience :: End Users/Desktop",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Programming Language :: Python :: 3.12",
23
+ "Programming Language :: Python :: 3.13",
24
+ "Operating System :: OS Independent",
25
+ "Topic :: Multimedia :: Sound/Audio :: Speech",
26
+ ]
27
+ dependencies = [
28
+ "click>=8.2",
29
+ "rich>=13",
30
+ "pyyaml>=6",
31
+ "numpy>=1.24",
32
+ "colorama>=0.4.6; sys_platform == 'win32'",
33
+ ]
34
+
35
+ [project.urls]
36
+ Homepage = "https://github.com/00apm/scribeio"
37
+ Documentation = "https://github.com/00apm/scribeio/blob/main/docs/README.md"
38
+ Issues = "https://github.com/00apm/scribeio/issues"
39
+
40
+ [project.optional-dependencies]
41
+ # Install torch with CUDA first (docs/install-own-env.md), so pip keeps the GPU build.
42
+ transcribe = ["whisperx>=3.8.6,<3.9"]
43
+ dev = ["pytest>=8", "mypy>=1.10", "types-PyYAML", "ruff>=0.6"]
44
+
45
+ [project.scripts]
46
+ scribe = "scribeio.cli:main"
47
+
48
+ [tool.setuptools.packages.find]
49
+ where = ["src"]
50
+
51
+ [tool.setuptools.package-data]
52
+ scribeio = ["defaults.yaml", "templates/*"]
53
+
54
+ [tool.pytest.ini_options]
55
+ testpaths = ["tests"]
56
+ # tests in subfolders import the shared tests/helpers.py
57
+ pythonpath = ["tests"]
58
+ addopts = "-ra"
59
+ markers = [
60
+ "gpu: needs CUDA + WhisperX + the local excerpt in tests/local/ (deselect with -m 'not gpu')",
61
+ "ffmpeg: needs ffmpeg in PATH",
62
+ ]
63
+
64
+ [tool.ruff]
65
+ # PEP 8 via ruff: Black-compatible formatting, 88-character lines.
66
+ line-length = 88
67
+ target-version = "py310"
68
+
69
+ [tool.ruff.lint]
70
+ # pycodestyle, pyflakes, import order, pyupgrade, bugbear
71
+ select = ["E", "W", "F", "I", "UP", "B"]
72
+
73
+ [tool.ruff.lint.isort]
74
+ known-first-party = ["scribeio"]
75
+ known-local-folder = ["helpers"]
76
+
77
+ [tool.mypy]
78
+ python_version = "3.10" # oldest supported Python: flags newer-only APIs
79
+ files = ["src"]
80
+ strict = true
81
+ warn_unreachable = true
82
+
83
+ [[tool.mypy.overrides]]
84
+ # these ship no type information, or are absent without the transcribe extra
85
+ module = ["whisperx", "whisperx.*", "faster_whisper", "faster_whisper.*", "torchaudio", "torchaudio.*", "colorama", "torch", "torch.*", "huggingface_hub", "huggingface_hub.*"]
86
+ ignore_missing_imports = true
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,8 @@
1
+ """scribe — transcripts of TTRPG sessions recorded with Craig (Discord)."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("scribeio")
7
+ except PackageNotFoundError: # source tree without `pip install -e .`
8
+ __version__ = "0.0.0"