textflowkit 0.1.3__tar.gz → 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 (90) hide show
  1. {textflowkit-0.1.3 → textflowkit-0.1.4}/PKG-INFO +33 -30
  2. {textflowkit-0.1.3 → textflowkit-0.1.4}/README.md +32 -29
  3. {textflowkit-0.1.3 → textflowkit-0.1.4}/SECURITY.md +1 -1
  4. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/adapters.md +3 -3
  5. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/index.html +6 -7
  6. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/install.md +7 -2
  7. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/release-checklist.md +13 -0
  8. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/roadmap.md +17 -0
  9. textflowkit-0.1.4/docs/site-deployment.md +34 -0
  10. {textflowkit-0.1.3 → textflowkit-0.1.4}/pyproject.toml +1 -1
  11. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/__init__.py +1 -1
  12. {textflowkit-0.1.3 → textflowkit-0.1.4}/.gitattributes +0 -0
  13. {textflowkit-0.1.3 → textflowkit-0.1.4}/.github/dependabot.yml +0 -0
  14. {textflowkit-0.1.3 → textflowkit-0.1.4}/.github/workflows/ci.yml +0 -0
  15. {textflowkit-0.1.3 → textflowkit-0.1.4}/.gitignore +0 -0
  16. {textflowkit-0.1.3 → textflowkit-0.1.4}/.pre-commit-config.yaml +0 -0
  17. {textflowkit-0.1.3 → textflowkit-0.1.4}/CONTRIBUTING.md +0 -0
  18. {textflowkit-0.1.3 → textflowkit-0.1.4}/LEGAL.md +0 -0
  19. {textflowkit-0.1.3 → textflowkit-0.1.4}/LICENSE +0 -0
  20. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/.nojekyll +0 -0
  21. {textflowkit-0.1.3 → textflowkit-0.1.4}/docs/sources.md +0 -0
  22. {textflowkit-0.1.3 → textflowkit-0.1.4}/scripts/smoke_installed_wheel.py +0 -0
  23. {textflowkit-0.1.3 → textflowkit-0.1.4}/scripts/smoke_live_youtube.py +0 -0
  24. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/adapters/__init__.py +0 -0
  25. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/adapters/http_server.py +0 -0
  26. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/adapters/mcp_server.py +0 -0
  27. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/cli.py +0 -0
  28. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/__init__.py +0 -0
  29. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/batch.py +0 -0
  30. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/bind.py +0 -0
  31. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/cancel.py +0 -0
  32. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/checkpoint.py +0 -0
  33. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/diarize.py +0 -0
  34. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/engine.py +0 -0
  35. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/executor.py +0 -0
  36. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/jobs.py +0 -0
  37. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/model.py +0 -0
  38. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/paths.py +0 -0
  39. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/pipeline.py +0 -0
  40. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/retrieval.py +0 -0
  41. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/runner.py +0 -0
  42. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/service.py +0 -0
  43. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/sqlite_store.py +0 -0
  44. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/submission.py +0 -0
  45. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/timeutil.py +0 -0
  46. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/core/translate.py +0 -0
  47. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/__init__.py +0 -0
  48. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/docx.py +0 -0
  49. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/fonts/NotoSans.ttf +0 -0
  50. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/fonts/NotoSansArabic.ttf +0 -0
  51. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/fonts/NotoSansSC.ttf +0 -0
  52. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/fonts/OFL-NotoSans.txt +0 -0
  53. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/fonts/OFL-NotoSansSC.txt +0 -0
  54. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/fonts/README.md +0 -0
  55. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/markdown.py +0 -0
  56. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/pdf.py +0 -0
  57. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/srt.py +0 -0
  58. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/txt.py +0 -0
  59. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/render/vtt.py +0 -0
  60. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/sources/__init__.py +0 -0
  61. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/sources/acquire.py +0 -0
  62. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/sources/detect.py +0 -0
  63. {textflowkit-0.1.3 → textflowkit-0.1.4}/src/textflowkit/sources/scratch.py +0 -0
  64. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/__init__.py +0 -0
  65. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/ollama_stub.py +0 -0
  66. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_acquire.py +0 -0
  67. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_adapters.py +0 -0
  68. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_batch.py +0 -0
  69. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_bind.py +0 -0
  70. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_checkpoint.py +0 -0
  71. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_cli.py +0 -0
  72. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_cli_resume_batch.py +0 -0
  73. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_diarize.py +0 -0
  74. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_engine_cache.py +0 -0
  75. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_executor.py +0 -0
  76. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_export.py +0 -0
  77. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_jobs.py +0 -0
  78. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_landing_page.py +0 -0
  79. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_live_smoke_script.py +0 -0
  80. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_model.py +0 -0
  81. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_paths.py +0 -0
  82. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_pipeline_integrity.py +0 -0
  83. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_release_boundaries.py +0 -0
  84. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_render.py +0 -0
  85. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_retrieval.py +0 -0
  86. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_service_profile.py +0 -0
  87. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_sources.py +0 -0
  88. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_stdio_protocol.py +0 -0
  89. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_submission.py +0 -0
  90. {textflowkit-0.1.3 → textflowkit-0.1.4}/tests/test_translate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: textflowkit
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Cross-platform media transcription toolkit: URL or file in, timestamped transcripts and subtitle files out.
5
5
  Project-URL: Homepage, https://github.com/scottconverse/textflowkit
6
6
  Project-URL: Issues, https://github.com/scottconverse/textflowkit/issues
@@ -50,9 +50,14 @@ Description-Content-Type: text/markdown
50
50
 
51
51
  Cross-platform media transcription toolkit. **One core, one CLI, thin adapters.**
52
52
 
53
- [Project landing page](https://scottconverse.github.io/textflowkit/) ·
53
+ [Project landing page](https://www.textflowkit.org/) ·
54
+ [PyPI package](https://pypi.org/project/textflowkit/) ·
54
55
  [GitHub releases](https://github.com/scottconverse/textflowkit/releases)
55
56
 
57
+ The [static site deployment](https://github.com/scottconverse/textflowkit/blob/main/docs/site-deployment.md) is hosted on Cloudflare
58
+ Pages. GitHub remains the source and CI host; the website does not run the
59
+ transcription engine.
60
+
56
61
  Paste a URL or point at a file; get timestamped transcripts and subtitle files back.
57
62
  Built as a reusable primitive for developers — designed to sit under multiple
58
63
  products, AI harnesses, and agents.
@@ -63,12 +68,12 @@ products, AI harnesses, and agents.
63
68
  >
64
69
  > **This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND**, express or
65
70
  > implied, including but not limited to the warranties of MERCHANTABILITY, FITNESS
66
- > FOR A PARTICULAR PURPOSE, and NONINFRINGEMENT. See [LICENSE](LICENSE) (Apache-2.0,
71
+ > FOR A PARTICULAR PURPOSE, and NONINFRINGEMENT. See [LICENSE](https://github.com/scottconverse/textflowkit/blob/main/LICENSE) (Apache-2.0,
67
72
  > §7–8) for the full disclaimer and limitation of liability.
68
73
  >
69
74
  > **You are responsible for what you transcribe.** textflowkit can fetch media from
70
75
  > third-party platforms. Copyright, terms-of-service, and privacy obligations for any
71
- > media you choose to process are **yours alone**. See [LEGAL.md](LEGAL.md).
76
+ > media you choose to process are **yours alone**. See [LEGAL.md](https://github.com/scottconverse/textflowkit/blob/main/LEGAL.md).
72
77
 
73
78
  ---
74
79
 
@@ -112,39 +117,37 @@ YouTube · TikTok · Facebook · Instagram · Vimeo · Twitch · Bilibili · Rum
112
117
  Kick · Zoom · Medal · Loom · Dropbox — plus **direct media URLs and local files**.
113
118
 
114
119
  All 13 are recognised through `yt-dlp`; only YouTube has an opt-in, maintained
115
- [live end-to-end smoke](docs/release-checklist.md). It is run on a Windows
120
+ [live end-to-end smoke](https://github.com/scottconverse/textflowkit/blob/main/docs/release-checklist.md). It is run on a Windows
116
121
  maintainer machine before a release, not on GitHub-hosted runners or every pull
117
122
  request. Local files have also been transcribed live. The other
118
123
  12 are not release-verified end to end, and some sources require cookies or
119
- change their access rules frequently. See [docs/sources.md](docs/sources.md).
124
+ change their access rules frequently. See [docs/sources.md](https://github.com/scottconverse/textflowkit/blob/main/docs/sources.md).
120
125
 
121
126
  ## Install
122
127
 
123
128
  Requires **Python ≥ 3.10** and **ffmpeg** on `PATH`.
124
129
 
125
130
  ```bash
126
- git clone https://github.com/scottconverse/textflowkit
127
- cd textflowkit
128
- pip install -e .
131
+ python -m pip install textflowkit
132
+ textflowkit doctor
129
133
  ```
130
134
 
131
- Or install the built wheel from the release page:
135
+ For MCP or the JSON HTTP adapter, install the matching extra:
132
136
 
133
137
  ```bash
134
- pip install https://github.com/scottconverse/textflowkit/releases/download/v0.1.3/textflowkit-0.1.3-py3-none-any.whl
138
+ python -m pip install 'textflowkit[mcp]' # MCP server
139
+ python -m pip install 'textflowkit[http]' # JSON HTTP API
135
140
  ```
136
141
 
137
- Not published to PyPI; the repository and its releases are the distribution path.
138
- The release page lists each artifact's SHA-256. (Those values are deliberately
139
- kept out of this file: the README is bundled into the wheel as its description,
140
- so a hash written here would change the artifact it describes.)
141
- Optional extras:
142
+ **AMD ROCm on native Windows:** do not use the generic command in an environment
143
+ with a working ROCm PyTorch install. Ordinary dependency resolution can replace
144
+ that torch build. Follow the [ROCm install notes](https://github.com/scottconverse/textflowkit/blob/main/docs/install.md)
145
+ to preserve it.
142
146
 
143
- ```bash
144
- pip install -e ".[mcp]" # MCP server adapter
145
- pip install -e ".[http]" # HTTP API adapter
146
- pip install -e ".[dev]" # tests + linter
147
- ```
147
+ The same version's wheel and source archive are also on the
148
+ [GitHub release page](https://github.com/scottconverse/textflowkit/releases/latest).
149
+ The release lists their SHA-256 hashes. For editable source development, see
150
+ [CONTRIBUTING.md](https://github.com/scottconverse/textflowkit/blob/main/CONTRIBUTING.md).
148
151
 
149
152
  ## Usage
150
153
 
@@ -187,7 +190,7 @@ textflowkit export ./transcript.json --format vtt
187
190
  ## Use as an MCP server
188
191
 
189
192
  ```bash
190
- pip install -e ".[mcp]"
193
+ python -m pip install 'textflowkit[mcp]'
191
194
  textflowkit-mcp # stdio
192
195
  textflowkit-mcp --transport http --port 8766 # Streamable HTTP
193
196
  ```
@@ -214,12 +217,12 @@ These checks are not end-to-end transcription runs driven by each harness:
214
217
  There is also a protocol test that launches the server as a real subprocess and
215
218
  speaks newline-delimited JSON-RPC over stdio, so the entry point, framing, and
216
219
  version negotiation are covered on every CI run (`tests/test_stdio_protocol.py`).
217
- See [docs/adapters.md](docs/adapters.md) for per-harness configuration.
220
+ See [docs/adapters.md](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md) for per-harness configuration.
218
221
 
219
222
  ## Use as an HTTP API
220
223
 
221
224
  ```bash
222
- pip install -e ".[http]"
225
+ python -m pip install 'textflowkit[http]'
223
226
  textflowkit-http --port 8767
224
227
  ```
225
228
 
@@ -227,7 +230,7 @@ Submit a job, poll it, fetch the transcript. Developer mode is unauthenticated
227
230
  and defaults to localhost. The opt-in JSON HTTP production profile requires a
228
231
  Bearer token, explicit roots, durable SQLite jobs, and request/rate/media/output
229
232
  limits; URL input additionally requires an SSRF-filtering egress proxy. See
230
- [adapter deployment details](docs/adapters.md#developer-mode-and-production-profile).
233
+ [adapter deployment details](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md#developer-mode-and-production-profile).
231
234
 
232
235
  ## Durable, bounded, cancellable
233
236
 
@@ -237,7 +240,7 @@ TEXTFLOWKIT_MAX_CONCURRENCY=1 # default; Whisper saturates a GPU alone
237
240
  ```
238
241
 
239
242
  `cancel_job` stops a queued job immediately, or a running job at its next stage
240
- boundary. See [docs/adapters.md](docs/adapters.md).
243
+ boundary. See [docs/adapters.md](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md).
241
244
 
242
245
  ## Long jobs never block
243
246
 
@@ -248,19 +251,19 @@ web frontend share the job contract without blocking a request.
248
251
 
249
252
  ## Status
250
253
 
251
- **v0.1.3 release.** Core, CLI, MCP, and HTTP have automated
254
+ **v0.1.4 release.** Core, CLI, MCP, and HTTP have automated
252
255
  coverage; Windows-native ROCm and a dated local Windows YouTube run were verified.
253
256
  The GitHub-hosted YouTube attempt was blocked by a bot challenge, so hosted
254
257
  live transcription is not verified.
255
258
  This does not imply that all 13 platforms or every harness workflow has been
256
- tested end to end. See [docs/roadmap.md](docs/roadmap.md).
259
+ tested end to end. See [docs/roadmap.md](https://github.com/scottconverse/textflowkit/blob/main/docs/roadmap.md).
257
260
 
258
261
  ## License
259
262
 
260
- Apache-2.0 — see [LICENSE](LICENSE). Includes an explicit patent grant and a
263
+ Apache-2.0 — see [LICENSE](https://github.com/scottconverse/textflowkit/blob/main/LICENSE). Includes an explicit patent grant and a
261
264
  limitation of liability.
262
265
 
263
266
  ## Contributing
264
267
 
265
- Issues and PRs welcome. Please read [LEGAL.md](LEGAL.md) before adding a source
268
+ Issues and PRs welcome. Please read [LEGAL.md](https://github.com/scottconverse/textflowkit/blob/main/LEGAL.md) before adding a source
266
269
  adapter.
@@ -2,9 +2,14 @@
2
2
 
3
3
  Cross-platform media transcription toolkit. **One core, one CLI, thin adapters.**
4
4
 
5
- [Project landing page](https://scottconverse.github.io/textflowkit/) ·
5
+ [Project landing page](https://www.textflowkit.org/) ·
6
+ [PyPI package](https://pypi.org/project/textflowkit/) ·
6
7
  [GitHub releases](https://github.com/scottconverse/textflowkit/releases)
7
8
 
9
+ The [static site deployment](https://github.com/scottconverse/textflowkit/blob/main/docs/site-deployment.md) is hosted on Cloudflare
10
+ Pages. GitHub remains the source and CI host; the website does not run the
11
+ transcription engine.
12
+
8
13
  Paste a URL or point at a file; get timestamped transcripts and subtitle files back.
9
14
  Built as a reusable primitive for developers — designed to sit under multiple
10
15
  products, AI harnesses, and agents.
@@ -15,12 +20,12 @@ products, AI harnesses, and agents.
15
20
  >
16
21
  > **This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND**, express or
17
22
  > implied, including but not limited to the warranties of MERCHANTABILITY, FITNESS
18
- > FOR A PARTICULAR PURPOSE, and NONINFRINGEMENT. See [LICENSE](LICENSE) (Apache-2.0,
23
+ > FOR A PARTICULAR PURPOSE, and NONINFRINGEMENT. See [LICENSE](https://github.com/scottconverse/textflowkit/blob/main/LICENSE) (Apache-2.0,
19
24
  > §7–8) for the full disclaimer and limitation of liability.
20
25
  >
21
26
  > **You are responsible for what you transcribe.** textflowkit can fetch media from
22
27
  > third-party platforms. Copyright, terms-of-service, and privacy obligations for any
23
- > media you choose to process are **yours alone**. See [LEGAL.md](LEGAL.md).
28
+ > media you choose to process are **yours alone**. See [LEGAL.md](https://github.com/scottconverse/textflowkit/blob/main/LEGAL.md).
24
29
 
25
30
  ---
26
31
 
@@ -64,39 +69,37 @@ YouTube · TikTok · Facebook · Instagram · Vimeo · Twitch · Bilibili · Rum
64
69
  Kick · Zoom · Medal · Loom · Dropbox — plus **direct media URLs and local files**.
65
70
 
66
71
  All 13 are recognised through `yt-dlp`; only YouTube has an opt-in, maintained
67
- [live end-to-end smoke](docs/release-checklist.md). It is run on a Windows
72
+ [live end-to-end smoke](https://github.com/scottconverse/textflowkit/blob/main/docs/release-checklist.md). It is run on a Windows
68
73
  maintainer machine before a release, not on GitHub-hosted runners or every pull
69
74
  request. Local files have also been transcribed live. The other
70
75
  12 are not release-verified end to end, and some sources require cookies or
71
- change their access rules frequently. See [docs/sources.md](docs/sources.md).
76
+ change their access rules frequently. See [docs/sources.md](https://github.com/scottconverse/textflowkit/blob/main/docs/sources.md).
72
77
 
73
78
  ## Install
74
79
 
75
80
  Requires **Python ≥ 3.10** and **ffmpeg** on `PATH`.
76
81
 
77
82
  ```bash
78
- git clone https://github.com/scottconverse/textflowkit
79
- cd textflowkit
80
- pip install -e .
83
+ python -m pip install textflowkit
84
+ textflowkit doctor
81
85
  ```
82
86
 
83
- Or install the built wheel from the release page:
87
+ For MCP or the JSON HTTP adapter, install the matching extra:
84
88
 
85
89
  ```bash
86
- pip install https://github.com/scottconverse/textflowkit/releases/download/v0.1.3/textflowkit-0.1.3-py3-none-any.whl
90
+ python -m pip install 'textflowkit[mcp]' # MCP server
91
+ python -m pip install 'textflowkit[http]' # JSON HTTP API
87
92
  ```
88
93
 
89
- Not published to PyPI; the repository and its releases are the distribution path.
90
- The release page lists each artifact's SHA-256. (Those values are deliberately
91
- kept out of this file: the README is bundled into the wheel as its description,
92
- so a hash written here would change the artifact it describes.)
93
- Optional extras:
94
+ **AMD ROCm on native Windows:** do not use the generic command in an environment
95
+ with a working ROCm PyTorch install. Ordinary dependency resolution can replace
96
+ that torch build. Follow the [ROCm install notes](https://github.com/scottconverse/textflowkit/blob/main/docs/install.md)
97
+ to preserve it.
94
98
 
95
- ```bash
96
- pip install -e ".[mcp]" # MCP server adapter
97
- pip install -e ".[http]" # HTTP API adapter
98
- pip install -e ".[dev]" # tests + linter
99
- ```
99
+ The same version's wheel and source archive are also on the
100
+ [GitHub release page](https://github.com/scottconverse/textflowkit/releases/latest).
101
+ The release lists their SHA-256 hashes. For editable source development, see
102
+ [CONTRIBUTING.md](https://github.com/scottconverse/textflowkit/blob/main/CONTRIBUTING.md).
100
103
 
101
104
  ## Usage
102
105
 
@@ -139,7 +142,7 @@ textflowkit export ./transcript.json --format vtt
139
142
  ## Use as an MCP server
140
143
 
141
144
  ```bash
142
- pip install -e ".[mcp]"
145
+ python -m pip install 'textflowkit[mcp]'
143
146
  textflowkit-mcp # stdio
144
147
  textflowkit-mcp --transport http --port 8766 # Streamable HTTP
145
148
  ```
@@ -166,12 +169,12 @@ These checks are not end-to-end transcription runs driven by each harness:
166
169
  There is also a protocol test that launches the server as a real subprocess and
167
170
  speaks newline-delimited JSON-RPC over stdio, so the entry point, framing, and
168
171
  version negotiation are covered on every CI run (`tests/test_stdio_protocol.py`).
169
- See [docs/adapters.md](docs/adapters.md) for per-harness configuration.
172
+ See [docs/adapters.md](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md) for per-harness configuration.
170
173
 
171
174
  ## Use as an HTTP API
172
175
 
173
176
  ```bash
174
- pip install -e ".[http]"
177
+ python -m pip install 'textflowkit[http]'
175
178
  textflowkit-http --port 8767
176
179
  ```
177
180
 
@@ -179,7 +182,7 @@ Submit a job, poll it, fetch the transcript. Developer mode is unauthenticated
179
182
  and defaults to localhost. The opt-in JSON HTTP production profile requires a
180
183
  Bearer token, explicit roots, durable SQLite jobs, and request/rate/media/output
181
184
  limits; URL input additionally requires an SSRF-filtering egress proxy. See
182
- [adapter deployment details](docs/adapters.md#developer-mode-and-production-profile).
185
+ [adapter deployment details](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md#developer-mode-and-production-profile).
183
186
 
184
187
  ## Durable, bounded, cancellable
185
188
 
@@ -189,7 +192,7 @@ TEXTFLOWKIT_MAX_CONCURRENCY=1 # default; Whisper saturates a GPU alone
189
192
  ```
190
193
 
191
194
  `cancel_job` stops a queued job immediately, or a running job at its next stage
192
- boundary. See [docs/adapters.md](docs/adapters.md).
195
+ boundary. See [docs/adapters.md](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md).
193
196
 
194
197
  ## Long jobs never block
195
198
 
@@ -200,19 +203,19 @@ web frontend share the job contract without blocking a request.
200
203
 
201
204
  ## Status
202
205
 
203
- **v0.1.3 release.** Core, CLI, MCP, and HTTP have automated
206
+ **v0.1.4 release.** Core, CLI, MCP, and HTTP have automated
204
207
  coverage; Windows-native ROCm and a dated local Windows YouTube run were verified.
205
208
  The GitHub-hosted YouTube attempt was blocked by a bot challenge, so hosted
206
209
  live transcription is not verified.
207
210
  This does not imply that all 13 platforms or every harness workflow has been
208
- tested end to end. See [docs/roadmap.md](docs/roadmap.md).
211
+ tested end to end. See [docs/roadmap.md](https://github.com/scottconverse/textflowkit/blob/main/docs/roadmap.md).
209
212
 
210
213
  ## License
211
214
 
212
- Apache-2.0 — see [LICENSE](LICENSE). Includes an explicit patent grant and a
215
+ Apache-2.0 — see [LICENSE](https://github.com/scottconverse/textflowkit/blob/main/LICENSE). Includes an explicit patent grant and a
213
216
  limitation of liability.
214
217
 
215
218
  ## Contributing
216
219
 
217
- Issues and PRs welcome. Please read [LEGAL.md](LEGAL.md) before adding a source
220
+ Issues and PRs welcome. Please read [LEGAL.md](https://github.com/scottconverse/textflowkit/blob/main/LEGAL.md) before adding a source
218
221
  adapter.
@@ -13,7 +13,7 @@ you expected.
13
13
 
14
14
  | Version | Security-fix policy |
15
15
  |---|---|
16
- | Latest published release tag (currently `v0.1.3`) | Receives fixes through the next patch release |
16
+ | Latest published release tag (see [GitHub releases](https://github.com/scottconverse/textflowkit/releases)) | Receives fixes through the next patch release |
17
17
  | Earlier release tags, including earlier `0.1.x` tags | No backports |
18
18
  | Unreleased `main` commits | Development only; not a supported release |
19
19
 
@@ -78,7 +78,7 @@ targeting an existing entry and fails with `patch: entry "<id>" not found`.
78
78
  ## MCP (for AI harnesses)
79
79
 
80
80
  ```bash
81
- pip install -e ".[mcp]"
81
+ python -m pip install 'textflowkit[mcp]'
82
82
  textflowkit-mcp # stdio (default)
83
83
  textflowkit-mcp --transport http --host 127.0.0.1 --port 8766
84
84
  ```
@@ -123,7 +123,7 @@ OpenCode (`opencode.json`):
123
123
  ## HTTP (for software products and web frontends)
124
124
 
125
125
  ```bash
126
- pip install -e ".[http]"
126
+ python -m pip install 'textflowkit[http]'
127
127
  textflowkit-http --host 127.0.0.1 --port 8767
128
128
  ```
129
129
 
@@ -254,7 +254,7 @@ Binary formats cannot be returned inline, and asking for one that way returns a
254
254
  clear message rather than failing deeper down.
255
255
 
256
256
  ```bash
257
- pip install -e ".[export]" # python-docx + reportlab
257
+ python -m pip install 'textflowkit[export]' # python-docx + reportlab
258
258
  curl -X POST "http://127.0.0.1:8767/jobs/$ID/export?formats=docx&formats=pdf"
259
259
  ```
260
260
 
@@ -8,8 +8,8 @@
8
8
  <meta property="og:type" content="website">
9
9
  <meta property="og:title" content="TextFlowKit — media in, useful text out">
10
10
  <meta property="og:description" content="An open-source transcription toolkit with one core and three ways in: CLI, MCP, and HTTP.">
11
- <meta property="og:url" content="https://scottconverse.github.io/textflowkit/">
12
- <link rel="canonical" href="https://scottconverse.github.io/textflowkit/">
11
+ <meta property="og:url" content="https://www.textflowkit.org/">
12
+ <link rel="canonical" href="https://www.textflowkit.org/">
13
13
  <title>TextFlowKit — media in, useful text out</title>
14
14
  <style>
15
15
  :root {
@@ -189,7 +189,7 @@
189
189
  <p class="lead">Transcribe video and audio into timestamped, searchable text. One shared core for your command line, AI harness, and application.</p>
190
190
  <div class="actions">
191
191
  <a class="button primary" href="#install">Get started <span aria-hidden="true">&nbsp;→</span></a>
192
- <a class="button secondary" href="https://github.com/scottconverse/textflowkit/releases/latest">Latest release <span aria-hidden="true">&nbsp;↗</span></a>
192
+ <a class="button secondary" href="https://pypi.org/project/textflowkit/">Install from PyPI <span aria-hidden="true">&nbsp;↗</span></a>
193
193
  </div>
194
194
  <p class="micro">Self-hosted toolkit · Native Windows, macOS, Linux · No account required</p>
195
195
  </div>
@@ -265,7 +265,7 @@
265
265
  <div>
266
266
  <span class="kicker">Start building</span>
267
267
  <h2 id="install-title">Bring your own media. Keep your workflow.</h2>
268
- <p>Python 3.10+ and ffmpeg are the starting point. The repository is the home for install notes, integration examples, and releases.</p>
268
+ <p>Python 3.10+ and ffmpeg are the starting point. Install from PyPI; the repository has GPU-specific notes, integration examples, and releases.</p>
269
269
  <ul>
270
270
  <li>Run locally on Windows without WSL, or on macOS and Linux.</li>
271
271
  <li>Use durable SQLite jobs and bounded concurrency when you need them.</li>
@@ -274,9 +274,7 @@
274
274
  <a class="button secondary" href="https://github.com/scottconverse/textflowkit/blob/main/docs/install.md">Read install guide ↗</a>
275
275
  </div>
276
276
  <div>
277
- <pre class="codebox"><span class="prompt">$</span> git clone https://github.com/scottconverse/textflowkit
278
- <span class="prompt">$</span> cd textflowkit
279
- <span class="prompt">$</span> python -m pip install -e ".[mcp,http]"
277
+ <pre class="codebox"><span class="prompt">$</span> python -m pip install 'textflowkit[mcp,http]'
280
278
  <span class="prompt">$</span> textflowkit doctor</pre>
281
279
  <p class="note">For a GPU-specific or Windows-native ROCm setup, follow the <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/install.md">install guide</a> instead of using this generic CPU-oriented quickstart.</p>
282
280
  </div>
@@ -296,6 +294,7 @@
296
294
  <div class="footer-links" aria-label="Project links">
297
295
  <a href="https://github.com/scottconverse/textflowkit">Repository</a>
298
296
  <a href="https://github.com/scottconverse/textflowkit/releases/latest">Releases</a>
297
+ <a href="https://pypi.org/project/textflowkit/">PyPI</a>
299
298
  <a href="https://github.com/scottconverse/textflowkit/issues">Issues</a>
300
299
  <a href="https://github.com/scottconverse/textflowkit/blob/main/LICENSE">License</a>
301
300
  </div>
@@ -6,6 +6,11 @@
6
6
  - **ffmpeg** on `PATH` (ffprobe comes with it)
7
7
  - **yt-dlp** — installed as a dependency
8
8
 
9
+ For a standard CPU or NVIDIA environment, install from
10
+ [PyPI](https://pypi.org/project/textflowkit/) with
11
+ `python -m pip install textflowkit`. For an existing AMD ROCm environment,
12
+ follow the instructions below instead of allowing pip to replace your torch.
13
+
9
14
  ## AMD GPU support (ROCm) — no WSL required
10
15
 
11
16
  textflowkit runs natively on Windows. On AMD hardware, GPU acceleration comes from a
@@ -28,9 +33,10 @@ distribution for the target architecture.
28
33
  will happily replace a working ROCm torch with a stock PyPI CPU wheel, silently
29
34
  disabling GPU acceleration.
30
35
 
31
- Install the engine **without** letting it resolve torch:
36
+ Install textflowkit and the engine **without** letting either resolve torch:
32
37
 
33
38
  ```bash
39
+ pip install textflowkit --no-deps
34
40
  pip install openai-whisper yt-dlp --no-deps
35
41
  pip install tiktoken more-itertools tqdm numba
36
42
  ```
@@ -230,4 +236,3 @@ how many segments were labelled. If the backend or token is missing, the run
230
236
  With no GPU, the engine selects CPU automatically. Pass `--device cpu` to force it.
231
237
  CPU transcription is dramatically slower; prefer a smaller `--model`.
232
238
 
233
-
@@ -48,3 +48,16 @@ neither result verifies the other 12 recognized sites.
48
48
 
49
49
  The script deletes its temporary media and transcript after producing the
50
50
  receipt. It does not upload cookies, media, or transcripts to GitHub.
51
+
52
+ ## PyPI publication
53
+
54
+ If this release is also published to PyPI, upload the **same** verified wheel
55
+ and source archive as the GitHub release. Check package metadata before upload,
56
+ then compare both PyPI SHA-256 digests with the GitHub release assets. Finally,
57
+ install that exact version from the public PyPI index in a clean environment
58
+ and smoke the CLI entry point. An install with `--no-deps` proves distribution
59
+ and entry-point wiring only; it does not prove a full transcription run.
60
+
61
+ Never place an API token in this repository, a CI log, or a shell command line.
62
+ An upload is a separate public release action; passing CI alone does not
63
+ authorize it.
@@ -57,6 +57,23 @@
57
57
  - [x] Correct the default input/output path-confinement documentation
58
58
  - [x] Update pinned CI checkout and Python setup actions and verify the combined matrix
59
59
 
60
+ ## Website hosting
61
+
62
+ - [x] Move the static landing page to Cloudflare Pages Free, connected to the
63
+ GitHub `main` branch with `docs/` as the site root
64
+ - [x] Serve `www.textflowkit.org` over HTTPS and redirect the apex domain to it
65
+
66
+ See [site deployment](site-deployment.md) for the hosting configuration. This
67
+ static page is documentation and a product landing page, not a hosted
68
+ transcription service.
69
+
70
+ ## Package distribution
71
+
72
+ - [x] Publish the verified v0.1.3 wheel and source archive on PyPI
73
+ - [x] Prepare v0.1.4 with a PyPI-first package description and install guide
74
+ - [x] Make PyPI the default developer install path while keeping GitHub
75
+ releases and the native-Windows ROCm dependency instructions
76
+
60
77
  The 13 listed media platforms are recognised through `yt-dlp`; **only YouTube**
61
78
  has an opt-in [live URL transcription release gate](release-checklist.md), not
62
79
  a deterministic pull-request job. The release gate runs locally on Windows,
@@ -0,0 +1,34 @@
1
+ # Static website deployment
2
+
3
+ The [TextFlowKit landing page](https://www.textflowkit.org/) is the static
4
+ `docs/index.html` file. It does **not** run the CLI, MCP server, HTTP adapter,
5
+ or speech models. A public transcription service is a separate, future
6
+ deployment with its own security and capacity design.
7
+
8
+ ## Cloudflare Pages configuration
9
+
10
+ - Plan: Cloudflare Pages Free.
11
+ - Project: `textflowkit`.
12
+ - Source: GitHub repository `scottconverse/textflowkit`, production branch
13
+ `main`. The Cloudflare Workers and Pages GitHub App is scoped to this
14
+ repository only.
15
+ - Root directory: `docs`.
16
+ - Build command: `exit 0` (the page is already static HTML).
17
+ - Build output directory: `.` (relative to `docs`).
18
+ - Environment variable: `SKIP_DEPENDENCY_INSTALL=1`. This prevents Pages
19
+ from trying to install the repository's Python transcription dependencies.
20
+ - Pages preview address: <https://textflowkit.pages.dev/>.
21
+ - Custom domains: `www.textflowkit.org` and `textflowkit.org`. Cloudflare DNS
22
+ has proxied CNAMEs for both to `textflowkit.pages.dev`.
23
+ - Canonical URL: `https://www.textflowkit.org/`. A Cloudflare Single Redirect
24
+ named `Canonical apex to www` sends HTTPS apex requests there with status
25
+ 301, preserving path and query string. Cloudflare's HTTP-to-HTTPS redirect
26
+ handles HTTP requests before this rule.
27
+
28
+ Merging a change to `main` under `docs/` triggers a new Pages deployment.
29
+ Check the Pages deployment status and verify the public site over HTTPS after
30
+ each website change. GitHub CI remains the deterministic code/test gate;
31
+ Cloudflare Pages is only the static website host.
32
+
33
+ The former GitHub Pages `docs/CNAME` file is intentionally absent. Do not
34
+ recreate it: domain routing now lives in Cloudflare, not GitHub Pages.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "textflowkit"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "Cross-platform media transcription toolkit: URL or file in, timestamped transcripts and subtitle files out."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -3,6 +3,6 @@
3
3
  from textflowkit.core.model import Segment, Transcript
4
4
  from textflowkit.core.pipeline import PipelineError, transcribe
5
5
 
6
- __version__ = "0.1.3"
6
+ __version__ = "0.1.4"
7
7
 
8
8
  __all__ = ["PipelineError", "Segment", "Transcript", "__version__", "transcribe"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes