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.
- scribeio-0.1.4/LICENSE +21 -0
- scribeio-0.1.4/MANIFEST.in +4 -0
- scribeio-0.1.4/PKG-INFO +187 -0
- scribeio-0.1.4/README.md +150 -0
- scribeio-0.1.4/pyproject.toml +86 -0
- scribeio-0.1.4/setup.cfg +4 -0
- scribeio-0.1.4/src/scribeio/__init__.py +8 -0
- scribeio-0.1.4/src/scribeio/check_report.py +298 -0
- scribeio-0.1.4/src/scribeio/checks.py +404 -0
- scribeio-0.1.4/src/scribeio/cli.py +982 -0
- scribeio-0.1.4/src/scribeio/config.py +249 -0
- scribeio-0.1.4/src/scribeio/craig.py +435 -0
- scribeio-0.1.4/src/scribeio/defaults.yaml +83 -0
- scribeio-0.1.4/src/scribeio/errors.py +34 -0
- scribeio-0.1.4/src/scribeio/ffmpeg.py +338 -0
- scribeio-0.1.4/src/scribeio/init.py +233 -0
- scribeio-0.1.4/src/scribeio/master/__init__.py +1 -0
- scribeio-0.1.4/src/scribeio/master/catalogue.py +63 -0
- scribeio-0.1.4/src/scribeio/master/config.py +278 -0
- scribeio-0.1.4/src/scribeio/master/excerpt.py +175 -0
- scribeio-0.1.4/src/scribeio/master/measuring.py +44 -0
- scribeio-0.1.4/src/scribeio/master/mix.py +410 -0
- scribeio-0.1.4/src/scribeio/master/preview.py +339 -0
- scribeio-0.1.4/src/scribeio/master/render.py +183 -0
- scribeio-0.1.4/src/scribeio/progress.py +305 -0
- scribeio-0.1.4/src/scribeio/templates/glossary.txt +17 -0
- scribeio-0.1.4/src/scribeio/templates/scribe.yaml +31 -0
- scribeio-0.1.4/src/scribeio/transcribe/__init__.py +5 -0
- scribeio-0.1.4/src/scribeio/transcribe/cleanup.py +143 -0
- scribeio-0.1.4/src/scribeio/transcribe/energy.py +102 -0
- scribeio-0.1.4/src/scribeio/transcribe/glossary.py +135 -0
- scribeio-0.1.4/src/scribeio/transcribe/lines.py +207 -0
- scribeio-0.1.4/src/scribeio/transcribe/markdown.py +68 -0
- scribeio-0.1.4/src/scribeio/transcribe/models.py +381 -0
- scribeio-0.1.4/src/scribeio/transcribe/pipeline.py +155 -0
- scribeio-0.1.4/src/scribeio/transcribe/report.py +95 -0
- scribeio-0.1.4/src/scribeio/transcribe/session.py +103 -0
- scribeio-0.1.4/src/scribeio/transcribe/session_json.py +109 -0
- scribeio-0.1.4/src/scribeio/transcribe/whisper.py +534 -0
- scribeio-0.1.4/src/scribeio.egg-info/PKG-INFO +187 -0
- scribeio-0.1.4/src/scribeio.egg-info/SOURCES.txt +71 -0
- scribeio-0.1.4/src/scribeio.egg-info/dependency_links.txt +1 -0
- scribeio-0.1.4/src/scribeio.egg-info/entry_points.txt +2 -0
- scribeio-0.1.4/src/scribeio.egg-info/requires.txt +16 -0
- scribeio-0.1.4/src/scribeio.egg-info/top_level.txt +1 -0
- scribeio-0.1.4/tests/conftest.py +14 -0
- scribeio-0.1.4/tests/helpers.py +191 -0
- scribeio-0.1.4/tests/master/test_cli_master.py +712 -0
- scribeio-0.1.4/tests/master/test_excerpt.py +160 -0
- scribeio-0.1.4/tests/master/test_master_audio.py +336 -0
- scribeio-0.1.4/tests/master/test_master_config.py +325 -0
- scribeio-0.1.4/tests/master/test_preview.py +262 -0
- scribeio-0.1.4/tests/master/test_render.py +268 -0
- scribeio-0.1.4/tests/test_check_report.py +463 -0
- scribeio-0.1.4/tests/test_checks.py +636 -0
- scribeio-0.1.4/tests/test_cli.py +255 -0
- scribeio-0.1.4/tests/test_config.py +259 -0
- scribeio-0.1.4/tests/test_craig.py +407 -0
- scribeio-0.1.4/tests/test_ffmpeg.py +250 -0
- scribeio-0.1.4/tests/test_init.py +215 -0
- scribeio-0.1.4/tests/test_progress.py +229 -0
- scribeio-0.1.4/tests/transcribe/data/expected.md +11 -0
- scribeio-0.1.4/tests/transcribe/test_cleanup.py +175 -0
- scribeio-0.1.4/tests/transcribe/test_cli_transcribe.py +655 -0
- scribeio-0.1.4/tests/transcribe/test_energy.py +106 -0
- scribeio-0.1.4/tests/transcribe/test_ffmpeg_audio.py +37 -0
- scribeio-0.1.4/tests/transcribe/test_glossary.py +105 -0
- scribeio-0.1.4/tests/transcribe/test_lines.py +141 -0
- scribeio-0.1.4/tests/transcribe/test_models.py +474 -0
- scribeio-0.1.4/tests/transcribe/test_output.py +145 -0
- scribeio-0.1.4/tests/transcribe/test_pipeline.py +139 -0
- scribeio-0.1.4/tests/transcribe/test_session_json.py +140 -0
- 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.
|
scribeio-0.1.4/PKG-INFO
ADDED
|
@@ -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.
|
scribeio-0.1.4/README.md
ADDED
|
@@ -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
|
scribeio-0.1.4/setup.cfg
ADDED
|
@@ -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"
|