Skip to main content

saidby

Offline-first diarized transcription: a command-line tool and Python library that turns any recording into a transcript with speakers, timestamps, glossary-aware spelling and one audio track per speaker.

Status: pre-alpha. Version 0.4.0 transcribes with faster-whisper, diarizes with Nemotron-3, aligns words to speakers, renders one aligned audio track per speaker and names speakers by voiceprint (with recorded consent). With a directory it also spells your names and terms correctly (biased pass, transplant and an optional local LLM, all logged). A second diarizer can be compared on the same audio, and saidby review walks through the uncertain spans so you can type the right text and feed new spellings back into the directory.

Install

NVIDIA GPU (driver 580 or newer):

uv tool install 'saidby[cuda]'

No GPU (or you do not want the CUDA libraries, about 1 GB): use the CPU build of PyTorch.

uv tool install saidby --index https://download.pytorch.org/whl/cpu --index-strategy unsafe-best-match

You also need ffmpeg on the PATH. Then check the machine:

saidby doctor          # what works, what does not, and how to fix it
saidby doctor --smoke  # also runs a short transcription with the tiny model

On a 20-thread desktop CPU, large-v3 (int8) transcribed at 0.39 times real time and the diarizer at 0.05, so a 15-minute call takes about 6 minutes. Slower CPUs can use a smaller model with --asr-model tiny or small. If a GPU is present but not usable, saidby falls back to the CPU and says why in manifest.json.

Quick start

saidby models pull --all          # one-time download, the only step that uses the network
saidby process call.m4a --out out/ --language es

Each recording gets its own folder under out/:

File Content
manifest.json Engines, models and versions per stage, speakers, timings
transcript.txt [HH:MM:SS] Speaker: text
transcript.vtt WebVTT with <v Speaker> voice tags
transcript.words.json Word-level transcript with timestamps and speaker labels
corrections.jsonl Every glossary change, accepted or rejected, with its reason
diarization.rttm Standard "who spoke when"
speakers/<id>.flac One track per speaker, same length as the original, silent elsewhere
logs/run.log, logs/telemetry.jsonl Local log and closed-field telemetry

To name speakers, enroll them once and pass the directory:

saidby enroll out/call --speaker SPEAKER_00=ana --directory directory.yaml \
  --consent-source "signed form" --consent-declared-by "Ana Gomez"
saidby process next-call.m4a --out out/ --directory directory.yaml

See docs/directory-format.md.

A failed run keeps .work/ so the next run resumes from the last finished stage; --keep-intermediates keeps it on success too. See docs/cli.md.

Measuring

saidby eval scores a run against a hand-corrected reference and arbitrates blind the spans where two systems disagree. See docs/evaluation.md.

Models

Models are never bundled and are only downloaded by an explicit command:

saidby models list
saidby models pull --all

Processing always runs offline (HF_HUB_OFFLINE=1). A Hugging Face token (HF_TOKEN) is needed only for gated models such as pyannote/speaker-diarization-community-1; if the conditions have not been accepted, the error shows the URL where to accept them.

Privacy

  • No telemetry leaves the machine. Logs and telemetry are written locally and never contain transcript text, names, glossary terms or voiceprints.
  • A test suite blocks any non-loopback network access during processing.

License

Apache-2.0. See LICENSE, NOTICE and MODEL_LICENSES.md. Contributions are accepted under the Developer Certificate of Origin.

Metadata

Release files for saidby 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for saidby 0.4.1
File Size Uploaded
saidby-0.4.1.tar.gz 83.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for saidby 0.4.1
File Interpreter ABI Platform
saidby-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 202.6 kB

Release files / saidby-0.4.1.tar.gz

Download URL saidby-0.4.1.tar.gz
Size 83.3 kB
Tags Source
SHA-256 checksum
How to use checksums
553277f75ed133dd44a1bf7df5c42287153d8f8c0f5de825f92f98f0f192fb35
BLAKE2b-256 checksum
How to use checksums
2f46eada5bea10b28a40d48064c138de591199d577c7ee5131d88b7c1f4e4749
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / saidby-0.4.1-py3-none-any.whl

Download URL saidby-0.4.1-py3-none-any.whl
Size 119.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
234e9ed8433b57927006321cee226fa307c2b7b1355e9a4e38e6b69900e7395b
BLAKE2b-256 checksum
How to use checksums
3fe17efb1d5d36f94aab8044e17809f53864945a856c05a157b1c41d4e0f01bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page