tranpro 0.1.0a1__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.
- tranpro-0.1.0a1/CHANGELOG.md +24 -0
- tranpro-0.1.0a1/LICENSE +21 -0
- tranpro-0.1.0a1/MANIFEST.in +2 -0
- tranpro-0.1.0a1/PKG-INFO +171 -0
- tranpro-0.1.0a1/README.md +133 -0
- tranpro-0.1.0a1/docs/ARCHITECTURE.md +98 -0
- tranpro-0.1.0a1/docs/DATABASE.md +62 -0
- tranpro-0.1.0a1/docs/RELEASING.md +55 -0
- tranpro-0.1.0a1/docs/ROADMAP.md +72 -0
- tranpro-0.1.0a1/docs/TRANSCRIPTION.md +119 -0
- tranpro-0.1.0a1/docs/archived_overview.md +56 -0
- tranpro-0.1.0a1/pyproject.toml +76 -0
- tranpro-0.1.0a1/setup.cfg +4 -0
- tranpro-0.1.0a1/src/tranpro/__init__.py +10 -0
- tranpro-0.1.0a1/src/tranpro/__main__.py +6 -0
- tranpro-0.1.0a1/src/tranpro/cli.py +412 -0
- tranpro-0.1.0a1/src/tranpro/config.py +106 -0
- tranpro-0.1.0a1/src/tranpro/library/__init__.py +6 -0
- tranpro-0.1.0a1/src/tranpro/library/cli.py +255 -0
- tranpro-0.1.0a1/src/tranpro/library/database.py +169 -0
- tranpro-0.1.0a1/src/tranpro/library/fingerprint.py +19 -0
- tranpro-0.1.0a1/src/tranpro/library/models.py +97 -0
- tranpro-0.1.0a1/src/tranpro/library/repository.py +680 -0
- tranpro-0.1.0a1/src/tranpro/library/schema.py +228 -0
- tranpro-0.1.0a1/src/tranpro/paths.py +41 -0
- tranpro-0.1.0a1/src/tranpro/transcription/__init__.py +6 -0
- tranpro-0.1.0a1/src/tranpro/transcription/factory.py +73 -0
- tranpro-0.1.0a1/src/tranpro/transcription/models.py +89 -0
- tranpro-0.1.0a1/src/tranpro/transcription/parakeet.py +261 -0
- tranpro-0.1.0a1/src/tranpro/transcription/probe.py +29 -0
- tranpro-0.1.0a1/src/tranpro/transcription/render.py +117 -0
- tranpro-0.1.0a1/src/tranpro/transcription/service.py +174 -0
- tranpro-0.1.0a1/src/tranpro/transcription/whisper_cpp.py +146 -0
- tranpro-0.1.0a1/src/tranpro.egg-info/PKG-INFO +171 -0
- tranpro-0.1.0a1/src/tranpro.egg-info/SOURCES.txt +48 -0
- tranpro-0.1.0a1/src/tranpro.egg-info/dependency_links.txt +1 -0
- tranpro-0.1.0a1/src/tranpro.egg-info/entry_points.txt +2 -0
- tranpro-0.1.0a1/src/tranpro.egg-info/requires.txt +15 -0
- tranpro-0.1.0a1/src/tranpro.egg-info/top_level.txt +1 -0
- tranpro-0.1.0a1/tests/test_cli.py +86 -0
- tranpro-0.1.0a1/tests/test_config.py +64 -0
- tranpro-0.1.0a1/tests/test_database.py +130 -0
- tranpro-0.1.0a1/tests/test_fingerprint.py +24 -0
- tranpro-0.1.0a1/tests/test_library_cli.py +148 -0
- tranpro-0.1.0a1/tests/test_parakeet.py +162 -0
- tranpro-0.1.0a1/tests/test_repository.py +187 -0
- tranpro-0.1.0a1/tests/test_transcript_render.py +67 -0
- tranpro-0.1.0a1/tests/test_transcription_cli.py +155 -0
- tranpro-0.1.0a1/tests/test_transcription_service.py +248 -0
- tranpro-0.1.0a1/tests/test_whisper_cpp.py +77 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to tranpro are documented here. Versions follow
|
|
4
|
+
[Semantic Versioning](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
## 0.1.0a1 - 2026-11-02
|
|
7
|
+
|
|
8
|
+
First public alpha.
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- One-shot local transcription with Parakeet MLX on Apple Silicon.
|
|
13
|
+
- Animated terminal progress and optional live timestamped output.
|
|
14
|
+
- A persistent SQLite transcript library with immutable transcript runs.
|
|
15
|
+
- Recording fingerprinting, reuse, full-text search, and recording-ID input.
|
|
16
|
+
- Timestamped Markdown output and recoverable source-file trashing.
|
|
17
|
+
- Provider boundaries for Parakeet MLX and whisper.cpp.
|
|
18
|
+
|
|
19
|
+
### Deferred
|
|
20
|
+
|
|
21
|
+
- Summarization and saved prompt templates.
|
|
22
|
+
- Hosted OpenAI providers.
|
|
23
|
+
- Google Docs publishing.
|
|
24
|
+
- Speaker diarization.
|
tranpro-0.1.0a1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Will Barmby
|
|
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.
|
tranpro-0.1.0a1/PKG-INFO
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tranpro
|
|
3
|
+
Version: 0.1.0a1
|
|
4
|
+
Summary: A local-first transcript library and one-shot transcription CLI
|
|
5
|
+
Author: Will Barmby
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Changelog, https://github.com/WillBarmby/transcriber/blob/main/CHANGELOG.md
|
|
8
|
+
Project-URL: Homepage, https://github.com/WillBarmby/transcriber
|
|
9
|
+
Project-URL: Issues, https://github.com/WillBarmby/transcriber/issues
|
|
10
|
+
Project-URL: Repository, https://github.com/WillBarmby/transcriber.git
|
|
11
|
+
Keywords: audio,cli,summarization,transcription
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
15
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: parakeet-mlx<0.7,>=0.6; sys_platform == "darwin" and platform_machine == "arm64"
|
|
26
|
+
Requires-Dist: platformdirs<5,>=4.3
|
|
27
|
+
Requires-Dist: rich<16,>=13.8
|
|
28
|
+
Requires-Dist: Send2Trash<2,>=1.8
|
|
29
|
+
Requires-Dist: typer<1,>=0.15
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: build<2,>=1.2; extra == "dev"
|
|
32
|
+
Requires-Dist: mypy<2,>=1.14; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest<10,>=8.3; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff<1,>=0.9; extra == "dev"
|
|
35
|
+
Requires-Dist: twine<7,>=6; extra == "dev"
|
|
36
|
+
Requires-Dist: types-Send2Trash<2,>=1.8; extra == "dev"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# tranpro
|
|
40
|
+
|
|
41
|
+
`tranpro` is becoming a local-first transcript library with a straightforward
|
|
42
|
+
one-shot command-line workflow:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
audio -> durable transcript -> optional summary -> optional Google Doc
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The Python distribution and import package are named `tranpro`; the command is
|
|
49
|
+
the shorter `tp`.
|
|
50
|
+
|
|
51
|
+
The current release provides local transcription and the persistent transcript
|
|
52
|
+
library. Summarization and Google Docs publication remain roadmap milestones.
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
tranpro currently targets Python 3.11 or newer on Apple Silicon Macs. Install
|
|
57
|
+
the CLI and its local Parakeet backend with one command:
|
|
58
|
+
|
|
59
|
+
```shell
|
|
60
|
+
python3 -m pip install tranpro
|
|
61
|
+
tp --version
|
|
62
|
+
tp recording.m4a
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The first transcription downloads the model from Hugging Face and caches it for
|
|
66
|
+
later runs. Parakeet MLX is installed automatically only on Apple Silicon;
|
|
67
|
+
other platforms receive the portable CLI and database without that dependency.
|
|
68
|
+
|
|
69
|
+
This is an alpha release: the transcript database is designed to persist, but
|
|
70
|
+
commands and configuration may still change before 1.0.
|
|
71
|
+
|
|
72
|
+
## Current commands
|
|
73
|
+
|
|
74
|
+
After installation:
|
|
75
|
+
|
|
76
|
+
```shell
|
|
77
|
+
tp --help
|
|
78
|
+
tp --version
|
|
79
|
+
tp recording.m4a
|
|
80
|
+
tp recording.m4a --output -
|
|
81
|
+
tp recording.m4a --no-save
|
|
82
|
+
tp recording.m4a --retranscribe
|
|
83
|
+
tp 2 --retranscribe
|
|
84
|
+
tp recording.m4a --retranscribe --live
|
|
85
|
+
tp recording.m4a --no-progress
|
|
86
|
+
tp recording.m4a --trash-source
|
|
87
|
+
tp paths
|
|
88
|
+
tp config show
|
|
89
|
+
tp config init
|
|
90
|
+
tp config edit
|
|
91
|
+
tp library init
|
|
92
|
+
tp library status
|
|
93
|
+
tp list
|
|
94
|
+
tp show RECORDING_ID
|
|
95
|
+
tp search "budget constraints"
|
|
96
|
+
tp forget RECORDING_ID
|
|
97
|
+
tp restore RECORDING_ID
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Library commands use an embedded SQLite database with automatic schema
|
|
101
|
+
migrations and pre-migration backups. `forget` is a recoverable soft deletion:
|
|
102
|
+
it does not remove source audio, transcripts, or summaries. Full-text search uses
|
|
103
|
+
SQLite FTS5 across timestamped transcript segments and summary sections. See the
|
|
104
|
+
[database design](docs/DATABASE.md) for identity, versioning, and safety details.
|
|
105
|
+
|
|
106
|
+
Transcription is the default operation. The equivalent explicit form is also
|
|
107
|
+
available:
|
|
108
|
+
|
|
109
|
+
```shell
|
|
110
|
+
tp recording.m4a
|
|
111
|
+
tp transcribe recording.m4a
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
By default, tranpro saves a versioned library record and writes
|
|
115
|
+
`recording.transcript.md` beside the source. `--output -` prints Markdown to
|
|
116
|
+
stdout, while `--no-save` skips SQLite. Existing equivalent runs are reused;
|
|
117
|
+
`--retranscribe` creates another immutable version. `--trash-source`/`-d` moves
|
|
118
|
+
the source to the operating-system Trash only after output succeeds.
|
|
119
|
+
Parakeet's `--live` mode prints finalized timestamped sentences as they become
|
|
120
|
+
available while retaining the complete saved library and Markdown outputs.
|
|
121
|
+
Interactive terminals show an animated progress bar by default. `--no-progress`
|
|
122
|
+
disables it; redirected and non-interactive output disables it automatically.
|
|
123
|
+
|
|
124
|
+
See the [transcription guide](docs/TRANSCRIPTION.md) and
|
|
125
|
+
[roadmap](docs/ROADMAP.md).
|
|
126
|
+
|
|
127
|
+
## Development setup
|
|
128
|
+
|
|
129
|
+
tranpro requires Python 3.11 or newer. From a clone:
|
|
130
|
+
|
|
131
|
+
```shell
|
|
132
|
+
python3 -m venv .venv
|
|
133
|
+
source .venv/bin/activate
|
|
134
|
+
python -m pip install --upgrade pip
|
|
135
|
+
python -m pip install -e '.[dev]'
|
|
136
|
+
tp --version
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
On Apple Silicon, the normal installation includes Parakeet MLX. Its model
|
|
140
|
+
downloads to the Hugging Face cache on first use.
|
|
141
|
+
|
|
142
|
+
Run the same checks used in continuous integration:
|
|
143
|
+
|
|
144
|
+
```shell
|
|
145
|
+
ruff check .
|
|
146
|
+
ruff format --check .
|
|
147
|
+
mypy src/tranpro
|
|
148
|
+
pytest
|
|
149
|
+
python -m build
|
|
150
|
+
twine check dist/*
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Maintainers can find the tagged-release process in
|
|
154
|
+
[docs/RELEASING.md](docs/RELEASING.md).
|
|
155
|
+
|
|
156
|
+
The first supported local runtime target is macOS on Apple Silicon. The core,
|
|
157
|
+
database, and hosted-provider abstractions are intended to remain portable;
|
|
158
|
+
Linux and Windows are best-effort until they are tested in CI and on real hosts.
|
|
159
|
+
|
|
160
|
+
## Project principles
|
|
161
|
+
|
|
162
|
+
- Local and free by default; hosted providers are explicit opt-ins.
|
|
163
|
+
- Transcription is the default action; summarization is explicit.
|
|
164
|
+
- SQLite is the source of truth. Markdown and Google Docs are rendered outputs.
|
|
165
|
+
- Provider boundaries keep model selection out of the core workflow.
|
|
166
|
+
- Source media is never deleted permanently by a normal command.
|
|
167
|
+
- No server, account system, or telemetry is required.
|
|
168
|
+
|
|
169
|
+
## License
|
|
170
|
+
|
|
171
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# tranpro
|
|
2
|
+
|
|
3
|
+
`tranpro` is becoming a local-first transcript library with a straightforward
|
|
4
|
+
one-shot command-line workflow:
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
audio -> durable transcript -> optional summary -> optional Google Doc
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
The Python distribution and import package are named `tranpro`; the command is
|
|
11
|
+
the shorter `tp`.
|
|
12
|
+
|
|
13
|
+
The current release provides local transcription and the persistent transcript
|
|
14
|
+
library. Summarization and Google Docs publication remain roadmap milestones.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
tranpro currently targets Python 3.11 or newer on Apple Silicon Macs. Install
|
|
19
|
+
the CLI and its local Parakeet backend with one command:
|
|
20
|
+
|
|
21
|
+
```shell
|
|
22
|
+
python3 -m pip install tranpro
|
|
23
|
+
tp --version
|
|
24
|
+
tp recording.m4a
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The first transcription downloads the model from Hugging Face and caches it for
|
|
28
|
+
later runs. Parakeet MLX is installed automatically only on Apple Silicon;
|
|
29
|
+
other platforms receive the portable CLI and database without that dependency.
|
|
30
|
+
|
|
31
|
+
This is an alpha release: the transcript database is designed to persist, but
|
|
32
|
+
commands and configuration may still change before 1.0.
|
|
33
|
+
|
|
34
|
+
## Current commands
|
|
35
|
+
|
|
36
|
+
After installation:
|
|
37
|
+
|
|
38
|
+
```shell
|
|
39
|
+
tp --help
|
|
40
|
+
tp --version
|
|
41
|
+
tp recording.m4a
|
|
42
|
+
tp recording.m4a --output -
|
|
43
|
+
tp recording.m4a --no-save
|
|
44
|
+
tp recording.m4a --retranscribe
|
|
45
|
+
tp 2 --retranscribe
|
|
46
|
+
tp recording.m4a --retranscribe --live
|
|
47
|
+
tp recording.m4a --no-progress
|
|
48
|
+
tp recording.m4a --trash-source
|
|
49
|
+
tp paths
|
|
50
|
+
tp config show
|
|
51
|
+
tp config init
|
|
52
|
+
tp config edit
|
|
53
|
+
tp library init
|
|
54
|
+
tp library status
|
|
55
|
+
tp list
|
|
56
|
+
tp show RECORDING_ID
|
|
57
|
+
tp search "budget constraints"
|
|
58
|
+
tp forget RECORDING_ID
|
|
59
|
+
tp restore RECORDING_ID
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Library commands use an embedded SQLite database with automatic schema
|
|
63
|
+
migrations and pre-migration backups. `forget` is a recoverable soft deletion:
|
|
64
|
+
it does not remove source audio, transcripts, or summaries. Full-text search uses
|
|
65
|
+
SQLite FTS5 across timestamped transcript segments and summary sections. See the
|
|
66
|
+
[database design](docs/DATABASE.md) for identity, versioning, and safety details.
|
|
67
|
+
|
|
68
|
+
Transcription is the default operation. The equivalent explicit form is also
|
|
69
|
+
available:
|
|
70
|
+
|
|
71
|
+
```shell
|
|
72
|
+
tp recording.m4a
|
|
73
|
+
tp transcribe recording.m4a
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
By default, tranpro saves a versioned library record and writes
|
|
77
|
+
`recording.transcript.md` beside the source. `--output -` prints Markdown to
|
|
78
|
+
stdout, while `--no-save` skips SQLite. Existing equivalent runs are reused;
|
|
79
|
+
`--retranscribe` creates another immutable version. `--trash-source`/`-d` moves
|
|
80
|
+
the source to the operating-system Trash only after output succeeds.
|
|
81
|
+
Parakeet's `--live` mode prints finalized timestamped sentences as they become
|
|
82
|
+
available while retaining the complete saved library and Markdown outputs.
|
|
83
|
+
Interactive terminals show an animated progress bar by default. `--no-progress`
|
|
84
|
+
disables it; redirected and non-interactive output disables it automatically.
|
|
85
|
+
|
|
86
|
+
See the [transcription guide](docs/TRANSCRIPTION.md) and
|
|
87
|
+
[roadmap](docs/ROADMAP.md).
|
|
88
|
+
|
|
89
|
+
## Development setup
|
|
90
|
+
|
|
91
|
+
tranpro requires Python 3.11 or newer. From a clone:
|
|
92
|
+
|
|
93
|
+
```shell
|
|
94
|
+
python3 -m venv .venv
|
|
95
|
+
source .venv/bin/activate
|
|
96
|
+
python -m pip install --upgrade pip
|
|
97
|
+
python -m pip install -e '.[dev]'
|
|
98
|
+
tp --version
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
On Apple Silicon, the normal installation includes Parakeet MLX. Its model
|
|
102
|
+
downloads to the Hugging Face cache on first use.
|
|
103
|
+
|
|
104
|
+
Run the same checks used in continuous integration:
|
|
105
|
+
|
|
106
|
+
```shell
|
|
107
|
+
ruff check .
|
|
108
|
+
ruff format --check .
|
|
109
|
+
mypy src/tranpro
|
|
110
|
+
pytest
|
|
111
|
+
python -m build
|
|
112
|
+
twine check dist/*
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Maintainers can find the tagged-release process in
|
|
116
|
+
[docs/RELEASING.md](docs/RELEASING.md).
|
|
117
|
+
|
|
118
|
+
The first supported local runtime target is macOS on Apple Silicon. The core,
|
|
119
|
+
database, and hosted-provider abstractions are intended to remain portable;
|
|
120
|
+
Linux and Windows are best-effort until they are tested in CI and on real hosts.
|
|
121
|
+
|
|
122
|
+
## Project principles
|
|
123
|
+
|
|
124
|
+
- Local and free by default; hosted providers are explicit opt-ins.
|
|
125
|
+
- Transcription is the default action; summarization is explicit.
|
|
126
|
+
- SQLite is the source of truth. Markdown and Google Docs are rendered outputs.
|
|
127
|
+
- Provider boundaries keep model selection out of the core workflow.
|
|
128
|
+
- Source media is never deleted permanently by a normal command.
|
|
129
|
+
- No server, account system, or telemetry is required.
|
|
130
|
+
|
|
131
|
+
## License
|
|
132
|
+
|
|
133
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
## Product boundary
|
|
4
|
+
|
|
5
|
+
tranpro is a local command-line application and library, not a hosted service.
|
|
6
|
+
It owns metadata, transcripts, summaries, prompts, and publication records in an
|
|
7
|
+
embedded SQLite database. Audio stays outside the database and is identified by
|
|
8
|
+
a streaming content fingerprint.
|
|
9
|
+
|
|
10
|
+
SQLite is canonical. Markdown files and Google Docs are projections that can be
|
|
11
|
+
recreated from stored artifacts.
|
|
12
|
+
|
|
13
|
+
## Dependency direction
|
|
14
|
+
|
|
15
|
+
The finished backend will follow these boundaries:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
CLI -> application workflows -> domain models
|
|
19
|
+
| ^
|
|
20
|
+
v |
|
|
21
|
+
provider/repository ports ----+
|
|
22
|
+
^
|
|
23
|
+
|
|
|
24
|
+
SQLite, Parakeet, Ollama, OpenAI, Google adapters
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- **Domain models** describe recordings, timestamped transcript segments,
|
|
28
|
+
transcript runs, prompt versions, summaries, and publications. They do not
|
|
29
|
+
import a model SDK, Typer, or SQLite.
|
|
30
|
+
- **Application workflows** implement use cases such as transcribe, summarize,
|
|
31
|
+
search, publish, forget, and restore.
|
|
32
|
+
- **Ports** define the capabilities workflows need: transcription,
|
|
33
|
+
summarization, persistence, rendering, and publication.
|
|
34
|
+
- **Adapters** contain provider-specific APIs and filesystem/database details.
|
|
35
|
+
- **CLI** translates user intent into workflow calls and renders results.
|
|
36
|
+
|
|
37
|
+
Provider model names belong in profiles, not workflow code. A workflow receives
|
|
38
|
+
a selected provider through a registry and consumes normalized domain objects.
|
|
39
|
+
|
|
40
|
+
## Application data
|
|
41
|
+
|
|
42
|
+
On macOS, `platformdirs` resolves the application state to:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
~/Library/Application Support/tranpro/
|
|
46
|
+
├── config.toml
|
|
47
|
+
├── library.sqlite3
|
|
48
|
+
└── backups/
|
|
49
|
+
|
|
50
|
+
~/Library/Caches/tranpro/
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
User-facing Markdown remains beside the source audio unless `--output` says
|
|
54
|
+
otherwise. Provider-managed model caches remain provider-managed. OAuth secrets
|
|
55
|
+
will be stored in the operating-system keychain rather than SQLite or TOML.
|
|
56
|
+
|
|
57
|
+
The database will use explicit, ordered schema migrations. Before a migration,
|
|
58
|
+
tranpro will make a timestamped SQLite backup. Records are soft-deleted by
|
|
59
|
+
default. A normal delete flag moves source media to the operating-system Trash
|
|
60
|
+
only after every requested output succeeds.
|
|
61
|
+
|
|
62
|
+
## Versioned artifacts
|
|
63
|
+
|
|
64
|
+
A recording is stable identity; processing results are immutable runs:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
Recording
|
|
68
|
+
├── Transcript run 1 (provider, model, settings)
|
|
69
|
+
│ ├── Summary run 1 (prompt version, model, settings)
|
|
70
|
+
│ └── Summary run 2
|
|
71
|
+
└── Transcript run 2
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
A repeated fingerprint plus equivalent transcription settings may reuse a
|
|
75
|
+
successful transcript. Retranscription creates a run instead of overwriting
|
|
76
|
+
history. Summaries always point to the exact transcript and prompt versions used.
|
|
77
|
+
|
|
78
|
+
## Context planning
|
|
79
|
+
|
|
80
|
+
Summary providers expose their effective runtime context budget. Before a call,
|
|
81
|
+
the planner accounts for the system contract, rendered prompt, transcript,
|
|
82
|
+
reserved output, and a safety margin. Whole-transcript summarization is preferred
|
|
83
|
+
when it fits. Otherwise the planner creates coherent timestamped sections,
|
|
84
|
+
summarizes each under the same user instructions, and synthesizes the section
|
|
85
|
+
notes. The calculation and intermediate artifacts are persisted for auditability.
|
|
86
|
+
|
|
87
|
+
Summary evidence refers to stable transcript segment IDs. Renderers turn those
|
|
88
|
+
IDs into timestamps and links after validation, so models never invent display
|
|
89
|
+
timestamps.
|
|
90
|
+
|
|
91
|
+
## Explicit non-goals for version 1
|
|
92
|
+
|
|
93
|
+
- A server, web UI, accounts, or telemetry
|
|
94
|
+
- Folder watching
|
|
95
|
+
- Storing audio blobs in SQLite
|
|
96
|
+
- Two-way Google Docs synchronization
|
|
97
|
+
- A separate vector database
|
|
98
|
+
- Permanent deletion as a convenience flag
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Transcript library
|
|
2
|
+
|
|
3
|
+
tranpro uses one application-owned SQLite database as the canonical record of
|
|
4
|
+
processing history. The source audio remains an external file; the database
|
|
5
|
+
stores its path, metadata, and a streaming SHA-256 content fingerprint.
|
|
6
|
+
|
|
7
|
+
## Identity and versions
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
recordings
|
|
11
|
+
├── transcript_runs
|
|
12
|
+
│ ├── transcript_segments
|
|
13
|
+
│ └── summary_runs
|
|
14
|
+
│ └── summary_sections
|
|
15
|
+
└── publication records (planned)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
A recording is identified by audio content rather than filename. Registering the
|
|
19
|
+
same bytes at another path returns the existing recording. A different provider,
|
|
20
|
+
model, or explicit retranscription creates another transcript run instead of
|
|
21
|
+
overwriting an earlier result.
|
|
22
|
+
|
|
23
|
+
Transcript segments receive stable references such as `s000001`. Summary
|
|
24
|
+
sections preserve the segment references used as evidence, allowing renderers to
|
|
25
|
+
add grounded timestamps later without asking a language model to invent them.
|
|
26
|
+
|
|
27
|
+
## Schema changes and backups
|
|
28
|
+
|
|
29
|
+
The SQLite `user_version` pragma records the current ordered migration. Before
|
|
30
|
+
tranpro modifies an existing older schema, it creates a consistent backup using
|
|
31
|
+
SQLite's online backup API:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
~/Library/Application Support/tranpro/backups/
|
|
35
|
+
└── library-20261102T030405006789Z-v0.sqlite3
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The database carries a tranpro application identifier. Migration refuses a file
|
|
39
|
+
marked as another application's database, an unmarked database containing
|
|
40
|
+
unknown tables, or a schema newer than the installed tranpro version. These
|
|
41
|
+
checks turn likely path mistakes and downgrade attempts into explicit errors.
|
|
42
|
+
|
|
43
|
+
## Search
|
|
44
|
+
|
|
45
|
+
SQLite FTS5 indexes transcript segment text, speaker names, summary headings, and
|
|
46
|
+
summary bodies. Search results retain the recording, artifact version, stable
|
|
47
|
+
segment or section location, and transcript start time. Normal search excludes
|
|
48
|
+
soft-deleted recordings; `--all` includes them.
|
|
49
|
+
|
|
50
|
+
FTS is intentionally lexical in this milestone. The future semantic index will
|
|
51
|
+
be derived from versioned transcript passages and combined with FTS results; it
|
|
52
|
+
will not replace canonical transcript storage.
|
|
53
|
+
|
|
54
|
+
## Deletion semantics
|
|
55
|
+
|
|
56
|
+
`tp forget ID` timestamps the recording as deleted. It does not remove database
|
|
57
|
+
rows or touch source and output files. `tp restore ID` reverses that state. A
|
|
58
|
+
future permanent-purge operation will be separate, explicit, and confirmed.
|
|
59
|
+
|
|
60
|
+
The later `--trash-source` transcription option will use the operating-system
|
|
61
|
+
Trash only after all requested outputs succeed. That is independent of forgetting
|
|
62
|
+
a library record.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Releasing tranpro
|
|
2
|
+
|
|
3
|
+
Releases are built by GitHub Actions from the repository and published with
|
|
4
|
+
PyPI Trusted Publishing. No long-lived PyPI token belongs in GitHub secrets.
|
|
5
|
+
|
|
6
|
+
## One-time setup
|
|
7
|
+
|
|
8
|
+
Create pending Trusted Publishers on PyPI and TestPyPI with these values:
|
|
9
|
+
|
|
10
|
+
| Setting | Value |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| PyPI project | `tranpro` |
|
|
13
|
+
| GitHub owner | `WillBarmby` |
|
|
14
|
+
| Repository | `transcriber` |
|
|
15
|
+
| Workflow | `release.yml` |
|
|
16
|
+
| Environment | `pypi` on PyPI; `testpypi` on TestPyPI |
|
|
17
|
+
|
|
18
|
+
Create matching `pypi` and `testpypi` environments in the GitHub repository.
|
|
19
|
+
The environments may require approval if an extra release confirmation is
|
|
20
|
+
desired.
|
|
21
|
+
|
|
22
|
+
## Rehearse on TestPyPI
|
|
23
|
+
|
|
24
|
+
1. Update the version in `pyproject.toml` and the entry in `CHANGELOG.md`.
|
|
25
|
+
2. Merge the release preparation pull request into `main`.
|
|
26
|
+
3. Run the **Release** workflow manually from the `main` branch.
|
|
27
|
+
4. Inspect the TestPyPI project and download its wheel artifact.
|
|
28
|
+
|
|
29
|
+
The manual workflow publishes only to TestPyPI. Re-running the same version is
|
|
30
|
+
safe: an already uploaded file is skipped.
|
|
31
|
+
|
|
32
|
+
## Publish to PyPI
|
|
33
|
+
|
|
34
|
+
After the TestPyPI rehearsal succeeds, tag the exact tested commit and push the
|
|
35
|
+
tag:
|
|
36
|
+
|
|
37
|
+
```shell
|
|
38
|
+
git switch main
|
|
39
|
+
git pull --ff-only
|
|
40
|
+
git tag v0.1.0a1
|
|
41
|
+
git push origin v0.1.0a1
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
A `v*` tag makes the workflow rebuild the distributions, verify a clean wheel
|
|
45
|
+
installation, publish to PyPI, and create a GitHub release containing the wheel
|
|
46
|
+
and source distribution. The tag version must match the package version without
|
|
47
|
+
the leading `v`.
|
|
48
|
+
|
|
49
|
+
Finally, verify the public installation in a fresh virtual environment:
|
|
50
|
+
|
|
51
|
+
```shell
|
|
52
|
+
python3 -m venv /tmp/tranpro-release-check
|
|
53
|
+
/tmp/tranpro-release-check/bin/python -m pip install tranpro
|
|
54
|
+
/tmp/tranpro-release-check/bin/tp --version
|
|
55
|
+
```
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
Work is intentionally divided into reviewable pull requests. Each pull request
|
|
4
|
+
must install independently, keep the command usable, and include tests for its
|
|
5
|
+
behavior.
|
|
6
|
+
|
|
7
|
+
## 1. Application foundation
|
|
8
|
+
|
|
9
|
+
- Package `tranpro` with the `tp` console command
|
|
10
|
+
- Establish platform-native paths and versioned TOML configuration
|
|
11
|
+
- Document architecture, support policy, and project vision
|
|
12
|
+
- Add linting, typing, tests, build validation, and CI
|
|
13
|
+
|
|
14
|
+
## 2. Transcript library
|
|
15
|
+
|
|
16
|
+
- SQLite migrations and pre-migration backups
|
|
17
|
+
- Recording fingerprints and versioned artifact records
|
|
18
|
+
- Stable transcript segment representation
|
|
19
|
+
- Soft delete, restore, list, show, and FTS5 search
|
|
20
|
+
|
|
21
|
+
## 3. Local transcription
|
|
22
|
+
|
|
23
|
+
- Parakeet MLX as the Apple Silicon default
|
|
24
|
+
- Accelerated whisper.cpp fallback
|
|
25
|
+
- Provider/model selection through profiles
|
|
26
|
+
- Deduplication, `--retranscribe`, Markdown output, and `--no-save`
|
|
27
|
+
- Trash source media only after successful completion
|
|
28
|
+
- Retire the legacy watcher/archive pipeline
|
|
29
|
+
|
|
30
|
+
## 4. Public alpha distribution
|
|
31
|
+
|
|
32
|
+
- Publish `tranpro` to PyPI with the `tp` console command
|
|
33
|
+
- Verify wheel installation in a clean environment
|
|
34
|
+
- Rehearse on TestPyPI and publish through short-lived trusted credentials
|
|
35
|
+
- Attach built distributions to a tagged GitHub release
|
|
36
|
+
|
|
37
|
+
## 5. Summaries and prompts
|
|
38
|
+
|
|
39
|
+
- Ollama with Gemma 4 12B as the local default
|
|
40
|
+
- Built-in detailed-notes preset and versioned user prompts
|
|
41
|
+
- Explicit `--summarize` and standalone summarize commands
|
|
42
|
+
- Context feasibility planning and hierarchical fallback
|
|
43
|
+
- Grounded segment references and Markdown rendering
|
|
44
|
+
|
|
45
|
+
## 6. OpenAI profile
|
|
46
|
+
|
|
47
|
+
- Hosted transcription with `gpt-transcribe`
|
|
48
|
+
- Hosted summaries with `gpt-6.1-terra`
|
|
49
|
+
- Usage and estimated-cost records
|
|
50
|
+
- Mocked provider tests; no network calls in the test suite
|
|
51
|
+
|
|
52
|
+
## 7. Google Docs publication
|
|
53
|
+
|
|
54
|
+
- Bring-your-own desktop OAuth credentials and Keychain token storage
|
|
55
|
+
- Polished native Google Docs styles
|
|
56
|
+
- Immutable publication snapshots, reuse, and explicit updates
|
|
57
|
+
- Transcript-only and transcript-plus-summary publication
|
|
58
|
+
|
|
59
|
+
## 8. Release polish
|
|
60
|
+
|
|
61
|
+
- Optional fzf-based interactive browsing
|
|
62
|
+
- Doctor/setup commands and shell completion
|
|
63
|
+
- Clean-environment wheel and source-distribution installation checks
|
|
64
|
+
- Migration notes and TestPyPI release rehearsal
|
|
65
|
+
|
|
66
|
+
Semantic search is a planned extension after the core library stabilizes. Its
|
|
67
|
+
passage index will be versioned and derived from canonical transcript segments so
|
|
68
|
+
it can coexist with SQLite FTS without changing recording identity.
|
|
69
|
+
|
|
70
|
+
Speaker diarization is also planned as an optional second pass over timestamped
|
|
71
|
+
segments. It will remain provider-independent so local diarizers can be compared
|
|
72
|
+
without coupling speaker labels to the transcription model.
|