poddrill 0.3.1 → 0.4.0

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.
@@ -19,11 +19,11 @@ Do this once on the computer that will transcribe. Each step is safe to repeat.
19
19
 
20
20
  1. Install Node.js 20.19 or newer and `ffmpeg`. Use the Node `.tar.gz` archive from `https://nodejs.org/dist/v20.19.0/`, or run `npx -y node@20.19.0`. On macOS, `brew install ffmpeg`. On Linux, `sudo apt-get install -y ffmpeg`.
21
21
 
22
- 2. Install the npm package. Run `npm install -g poddrill@0.3.1`. Do not use `@latest`. Cloning the git repository is not required. If you clone it, set `GIT_TERMINAL_PROMPT=0`.
22
+ 2. Install the npm package. Run `npm install -g poddrill@0.4.0`. Do not use `@latest`. Cloning the git repository is not required. If you clone it, set `GIT_TERMINAL_PROMPT=0`.
23
23
 
24
24
  3. Run `poddrill install-python`. This creates `~/.cache/poddrill/venv` and installs cactus-needle 3.2.0, numpy 2.5.4, and onnxruntime 1.31.0. It uses `uv` when `uv` is on PATH, and otherwise `python3 -m venv`. The npm package named cactus-needle is a different package.
25
25
 
26
- 4. Run `poddrill fetch-weights`. This downloads `voxceleb_ECAPA512.onnx` from the pinned WeSpeaker commit, checks the byte size and SHA-256, and writes `~/.cache/poddrill/ecapa/voxceleb_ECAPA512.onnx`. WeSpeaker ECAPA-TDNN512 pretrained on VoxCeleb. VoxCeleb is used under CC BY 4.0. A later run leaves a matching file in place.
26
+ 4. Run `poddrill fetch-weights`. This downloads `voxceleb_ECAPA512.onnx` and `segmentation.onnx`, checks each byte size and SHA-256, and writes them under `~/.cache/poddrill/ecapa/` and `~/.cache/poddrill/segmentation/`. A later run leaves a matching file in place.
27
27
 
28
28
  5. Run `poddrill client doctor --client cursor --json`. Use `grok_build` or `grok_bot` in place of `cursor` when that is the client. For every check whose `state` is `bad`, run the `fix` command on that check, then run doctor again. Skip a check whose `state` is `optional`. Do not install it. Do not mention it. Do not ask the user about it. `workspace` stays `pending` until setup. Stop this loop when doctor exits 0, or when the only `bad` check is `link`.
29
29
 
@@ -53,7 +53,7 @@ Read cues only after the embedding is ready. A ready transcript can still be not
53
53
 
54
54
  ## Speaker groups
55
55
 
56
- An asset clusters cues that sound like one voice. That cluster is a speaker group. You assign the group a name, `quote`, `ending`, or `undetermined`. The utility does not choose the name.
56
+ An asset clusters cues that sound like one voice. That cluster is a speaker group. The embedding stage writes the groups before that stage is ready. You assign the group a name, `quote`, `ending`, or `undetermined`. The utility does not choose the name.
57
57
 
58
58
  Label the speaker groups before you write a summary. Do not write a summary from the transcript text alone.
59
59
 
@@ -73,7 +73,7 @@ Write the WAV at `<workspace>/audio/<file>.wav`. `poddrill start` resolves the p
73
73
 
74
74
  Pass `--language <code>` on `poddrill start` when the episode is not English. The code is `en`, `de`, `fr`, `es`, `it`, `nl`, `pl`, `ja`, `ko`, or `zh`.
75
75
 
76
- `poddrill start` returns before the transcript exists. Poll `poddrill episode <id>` until the transcript artifact `state` is `ready` or `failed`. The id is `ep_` plus the first 16 hex characters of the sha256 of the file bytes.
76
+ `poddrill start` returns before the transcript exists. The transcript job diarizes the episode, then transcribes it. Poll `poddrill episode <id>` until the transcript artifact `state` is `ready` or `failed`. The id is `ep_` plus the first 16 hex characters of the sha256 of the file bytes.
77
77
 
78
78
  The transcript is done when that `state` is `ready`. Exit 0 does not mean the transcript is done. If the transcript or the embedding is missing or `failed`, pass the same WAV to `poddrill start` again. The episode id does not change. `created` is false, and the failed artifact runs again.
79
79
 
package/README.md CHANGED
@@ -29,7 +29,7 @@ Identify books mentioned in an episode and what it is about:
29
29
  ```
30
30
 
31
31
  ## For LLM and Agent
32
- The supported install is the npm package. Run `npm install -g poddrill@0.3.1`. Do not use `@latest`. Cloning this repository is not required. If you clone it, set `GIT_TERMINAL_PROMPT=0`. The agent then follows the skill shipped in the package.
32
+ The supported install is the npm package. Run `npm install -g poddrill@0.4.0`. Do not use `@latest`. Cloning this repository is not required. If you clone it, set `GIT_TERMINAL_PROMPT=0`. The agent then follows the skill shipped in the package.
33
33
 
34
34
  ### Requirements
35
35
 
@@ -38,7 +38,9 @@ The computer that runs PodDrill needs:
38
38
  - Node.js 20.19 or newer. Install the `.tar.gz` archive from `https://nodejs.org/dist/v20.19.0/`, or run `npx -y node@20.19.0`. The published CLI is plain JavaScript. The tests in this repository use `node --experimental-strip-types` and need a newer Node.
39
39
  - `ffmpeg` on `PATH`.
40
40
  - A Python interpreter with cactus-needle 3.2.0, numpy 2.5.4, and onnxruntime 1.31.0. The npm package named cactus-needle is a different package. `poddrill install-python` creates `~/.cache/poddrill/venv` and installs those pins. It uses `uv` when `uv` is on PATH, and otherwise `python3 -m venv`. `PODDRILL_PYTHON` selects another absolute interpreter, and setup stores that path in `poddrill.json`.
41
- - The ECAPA weights file. `poddrill fetch-weights` downloads `voxceleb_ECAPA512.onnx` from the pinned WeSpeaker commit, checks its size and SHA-256, and writes `~/.cache/poddrill/ecapa/voxceleb_ECAPA512.onnx`. `PODDRILL_EMBED_WEIGHTS` selects another path. WeSpeaker ECAPA-TDNN512 pretrained on VoxCeleb. VoxCeleb is used under CC BY 4.0.
41
+ - The ECAPA and segmentation weight files. `poddrill fetch-weights` downloads `voxceleb_ECAPA512.onnx` and `segmentation.onnx`, checks each size and SHA-256, and writes them under `~/.cache/poddrill/ecapa/` and `~/.cache/poddrill/segmentation/`. `PODDRILL_EMBED_WEIGHTS` and `PODDRILL_SEGMENTATION_WEIGHTS` select other paths.
42
+
43
+ The transcript job diarizes the episode, then transcribes it. The embedding job runs after the transcript is ready.
42
44
 
43
45
  `poddrill client doctor` prints a `fix` command for every check that is not ok. `poddrill bootstrap` runs `install-python`, `fetch-weights`, and `setup`.
44
46
 
@@ -50,10 +52,10 @@ Grok Bot cannot write its server entry. It prints the custom server to add: the
50
52
 
51
53
  `npm test` runs the unit tests. Those tests use `node --experimental-strip-types`.
52
54
 
53
- `npm run test:smoke` runs a clean-home install, downloads the ECAPA file, and transcribes a short generated clip through `dist/cli.js`. It needs `python3` with `ensurepip`, `ffmpeg`, and `espeak-ng`. If one of those is missing, the test skips and names the missing tool. Run `npm run test:smoke` on a computer that has those tools. Build `dist/` with `npm run build` first.
55
+ `npm run test:smoke` runs a clean-home install, downloads the ECAPA and segmentation files, and transcribes a short generated clip through `dist/cli.js`. It needs `python3` with `ensurepip`, `ffmpeg`, and `espeak-ng`. If one of those is missing, the test skips and names the missing tool. Run `npm run test:smoke` on a computer that has those tools. Build `dist/` with `npm run build` first.
54
56
 
55
57
  ## License
56
58
 
57
59
  MIT License. Copyright 2026 Jianyu Zhao.
58
60
 
59
- The ECAPA weights are separate from this license. WeSpeaker ECAPA-TDNN512 pretrained on VoxCeleb. VoxCeleb is used under CC BY 4.0.
61
+ The ECAPA weights are separate from this license. WeSpeaker ECAPA-TDNN512 pretrained on VoxCeleb. VoxCeleb is used under CC BY 4.0. The segmentation weights are separate from this license. pyannote segmentation-3.0 is MIT.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poddrill",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Transcribe episode audio into timed text, group the voices, and store a summary.",
5
5
  "license": "MIT",
6
6
  "author": "Jianyu Zhao",