Skip to main content

Local transcription

Local audio/video transcription with Whisper large-v3, speaker diarization, and an agent skill for substantive proofreading. Produces comparable raw and proofread TXT/SRT files without sending audio to a hosted service.

The CLI runs the media and speech models locally. The invoking agent reads the resulting text, proposes corrections, and uses the CLI to apply them to both formats. This is not an autonomous local language-model proofreader: the agent may be cloud-hosted and the transcript becomes part of its context.

Setup

Requires Python 3.11+ and uv. FFmpeg and FFprobe install automatically: macOS wheels include native tools for Apple Silicon and Intel, while Linux/Windows use a binary dependency. macOS 13+ is targeted; CI tests Python 3.13 on macOS 15 (both architectures) and Linux x86-64. The default is CPU int8 inference; Apple GPU/Metal acceleration is not implemented. Allow approximately 4 GB for models plus the Python environment and working audio. Long recordings can take substantial CPU time.

Install the CLI from PyPI without cloning the repository:

uv tool install --python 3.13 local-transcription==0.1.4
uv tool update-shell
local-transcription models install
local-transcription doctor --verify

If your current shell cannot find the command yet, reopen it or use the executable inside the directory printed by uv tool dir --bin. The installation includes ready-to-run FFmpeg and FFprobe binaries; Mac users need neither Homebrew nor Rosetta. The CLI prefers existing system tools and otherwise uses the packaged binaries without changing PATH or requiring administrator access. Model weights are installed separately. The package provides an executable CLI command, not a standalone native binary.

The repository and GitHub release downloads are public. See the installation guide for the portable skill archive and an alternative installation with exact runtime constraints. Standard PyPI installation resolves dependencies from package metadata; the release constraints reproduce the versions in our lockfile.

To reuse an existing model directory instead of downloading the same weights:

local-transcription models install --from-dir /path/to/existing/models

The default cache is $XDG_CACHE_HOME/local-transcription/models, or ~/.cache/local-transcription/models. Override it using --models-dir or LOCAL_TRANSCRIPTION_MODELS. Setup verifies SHA-256 checksums; doctor --verify can verify them again. Downloads occur only through models install.

Use

# Full recording, automatic language and speaker count
local-transcription transcribe /path/to/meeting.webm

# Audio input; disable speaker analysis
local-transcription transcribe /path/to/interview.mp3 --no-diarization

# Known language and speaker count
local-transcription transcribe /path/to/meeting.mkv --language ru --speakers 2

# Extract audio alone, detecting the source format by its contents
local-transcription convert /path/to/video.bin

# Recheck a difficult passage without changing the transcript
local-transcription recheck /path/to/meeting.transcription --start 05:55 --end 06:15

# Apply agent-reviewed, word-specific corrections
local-transcription apply-review /path/to/meeting.transcription /path/to/edits.json

transcribe creates a new <stem>.transcription folder next to the input. Repeated runs use -2, -3, etc. --output-dir changes the requested folder, with the same collision protection. The input and previous results remain unchanged.

Artifact Produced by
<stem>.audio.<extension> Video audio extraction; stream copy when supported, FLAC fallback
<stem>.txt, <stem>.srt Local transcription and optional speaker analysis
<stem>.proofread.txt, <stem>.proofread.srt Agent review followed by apply-review
<stem>.summary.md Skill, only after the user requests or confirms a summary
work/ PCM audio, canonical words, model output, review handoff, diagnostics

Text remains in the spoken language. Speaker labels and tooling are in English. With diarization disabled, output omits speaker labels rather than calling every speaker “unknown.” Diagnostics never appear as a transcript appendix.

Install the skill

The release archive local-transcription-skill.zip contains the skill and all its reference documents. Extract it into ~/.agents/skills/ after checksum verification. Inspect any existing local-transcription destination before replacing it.

For development, keep the canonical skill in this repository and install an absolute symlink from the checkout:

mkdir -p ~/.agents/skills
ln -s "$(pwd)/skills/local-transcription" ~/.agents/skills/local-transcription

Invoke the skill by name or ask the agent to transcribe a local recording with proofread subtitles. It uses an installed CLI or an existing development environment, completes all four transcript files, then asks about a summary. If the CLI is missing, the skill installs the packaged release without cloning the repository.

Documentation

Development

gh repo clone ihoru/local-transcription
cd local-transcription
uv sync --locked
uv run --locked pytest
uv run --locked ruff check .

On macOS, a source/editable installation compiles FFmpeg during setup and requires Xcode command line tools. Normal PyPI wheel installation requires no compiler.

Run the development CLI with uv run --locked local-transcription. See release packaging to build the installable wheel and portable skill.

CI runs deterministic tests with synthetic media. Real speech evaluations run locally; personal recordings, transcripts, and model weights are excluded from the repository. No open-source license has been selected for the project code. Third-party components retain their own licenses.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

local_transcription-0.1.4.tar.gz (92.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

local_transcription-0.1.4-py3-none-macosx_13_0_x86_64.whl (33.1 MB view details)

Uploaded Python 3macOS 13.0+ x86-64

local_transcription-0.1.4-py3-none-macosx_13_0_arm64.whl (32.1 MB view details)

Uploaded Python 3macOS 13.0+ ARM64

local_transcription-0.1.4-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file local_transcription-0.1.4.tar.gz.

File metadata

  • Download URL: local_transcription-0.1.4.tar.gz
  • Upload date:
  • Size: 92.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for local_transcription-0.1.4.tar.gz
Algorithm Hash digest
SHA256 41f0971d5e2002d20deea3ca2dc05971bf68e70db4b99146d36e68d8d25b8f6e
MD5 07b35233baf40953a5b66b8f192669d9
BLAKE2b-256 a95c69025f212709efbb7aa21e661ec020cd7a4a7d06d90c9e3ab6711dbebcdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for local_transcription-0.1.4.tar.gz:

Publisher: publish.yml on ihoru/local-transcription

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file local_transcription-0.1.4-py3-none-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for local_transcription-0.1.4-py3-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8a80fe90070abb74f510e85d145d1a6fef8bfff69f4a519ee35c4dc4002fb3b1
MD5 43aa206fd1a08f256d41d25abd328ab1
BLAKE2b-256 dc01b2043ce9a447f97cdedb33382511a6a7bccaf9fdd2906cc26872e0120dd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for local_transcription-0.1.4-py3-none-macosx_13_0_x86_64.whl:

Publisher: publish.yml on ihoru/local-transcription

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file local_transcription-0.1.4-py3-none-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for local_transcription-0.1.4-py3-none-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 ca3b0a6da54b3964128a19e071d6aebc67d302add7a1f5270419243a3c9adecd
MD5 cac40c601327f8e1bad675719586ff1a
BLAKE2b-256 837a87fd15c379e6dbfd3cbc028adae97962a1ad286c53bb2ed18b0ab4975d8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for local_transcription-0.1.4-py3-none-macosx_13_0_arm64.whl:

Publisher: publish.yml on ihoru/local-transcription

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file local_transcription-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for local_transcription-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0fad99036500274fdb771abb4b8d6e6ee25c078de824ef998a15ed80574eb738
MD5 509c7419c7cc34761f529cb2c034f58b
BLAKE2b-256 6424dc4814b75016dbaace632730b1da007394293673b8f3bf01b074c381cb79

See more details on using hashes here.

Provenance

The following attestation bundles were made for local_transcription-0.1.4-py3-none-any.whl:

Publisher: publish.yml on ihoru/local-transcription

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.4 This release

4 files

0.1.2

2 files

0.1.1

2 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