batchalign
TalkBank CHAT processing pipeline — ASR, forced alignment, morphosyntax
(%mor / %gra), utterance segmentation, translation, and compare.
The user-facing Python package; the runtime is a PyO3 extension backed
by the Rust crates in crates/batchalign/.
User and developer docs live in book/src/batchalign/ (the mdBook is
the source of truth). See book/src/batchalign/developer/building.md
for the canonical build recipe.
Install
From PyPI (stable wheels):
pip install batchalign
From source: use the just recipes — they go through Bazel, so
every dep (proto codegen, Rust crates, PyO3 extension, Python wheel
extras) is materialized for you. Don't reach for maturin develop or
uv sync directly unless you're debugging the build itself.
just batchalign build # build every Bazel target for batchalign
just batchalign test # run every Bazel test target
just batchalign cli --help # run `batchalign3` via the development bridge
just batchalign pytest # pytest (with full Bazel dep graph)
just batchalign wheel # host-platform wheel at python/target/wheels/
just batchalign sidecar # standalone daemon binary via PyApp
just batchalign lint # mypy (+ ruff)
just batchalign versions # source-of-truth version readout
just --list batchalign shows the full recipe list. The just
recipes call into Bazel, so tools/bazel (the bundled wrapper) takes
care of:
- regenerating the pydantic-v2 wire types from
crates/batchalign/batchalign-core/src/proto/*.rs - rebuilding the
batchalign_corePyO3 cdylib via maturin under the hood - staging the binary into the wheel
- propagating dependency changes to dependent targets
If you genuinely need bazel directly (because a recipe you want
isn't wrapped):
bazel build //... # everything
bazel test //... # everything
bazel run //book:html # static book HTML
bazel run //apps/batchalign/batchalign-gui:openapi # GUI OpenAPI codegen
The base wheel ships only the lightweight runtime. Heavy ML backends are gated behind extras — install only what you use:
pip install 'batchalign[whisper]' # Whisper ASR
pip install 'batchalign[malayalam]' # Malayalam Wav2Vec2 XLSR ASR
pip install 'batchalign[stanza]' # morphosyntax (%mor / %gra)
pip install 'batchalign[pyannote]' # optional local Pyannote backend API
pip install 'batchalign[revai]' # Rev.AI cloud ASR
pip install 'batchalign[google]' # Gemini cloud ASR + diarization
pip install 'batchalign[cantonese]' # Cantonese pipeline (FunASR, Tencent)
pip install 'batchalign[qwen3]' # Qwen3 ASR + forced aligner
pip install 'batchalign[nllb]' # NLLB translation
pip install 'batchalign[api]' # FastAPI daemon (`batchalign3 daemon`)
pip install 'batchalign[all]' # everything
CLI
batchalign3 --help
batchalign3 transcribe input_dir -o output_dir --lang eng
batchalign3 transcribe input_dir -o output_dir --lang eng --engine whisper --diarize --diarize-engine pyannote-ai
batchalign3 diarize input_dir -o output_dir --engine pyannote-ai
batchalign3 align input_dir -o output_dir --engine wav2vec
batchalign3 morphotag input_dir -o output_dir --language en
batchalign3 utseg input_dir -o output_dir
batchalign3 translate input_dir -o output_dir --target eng
batchalign3 compare input_dir gold_dir -o output_dir
batchalign3 version # banner, version, git SHA
batchalign3 cache {path,stats,clear} # local result cache
batchalign3 daemon # FastAPI server (needs [api])
When -o is omitted, results are written back in place. The CLI accepts
either a single CHAT/media file or a folder (walked recursively).
The diarization CLI defaults to pyannoteAI cloud. Select the optional local
backend with --engine pyannote (or --diarize-engine pyannote on
transcribe). Configure the cloud API key in the shared Batchalign config file
(or set BATCHALIGN_PYANNOTE_KEY):
[diarize]
engine.pyannote.key = YOUR_API_KEY
Programmatic API
import batchalign as ba
# Build a backend chain.
pipeline = ba.recipes.morphotag(
stanza_backend=ba.StanzaBackend(lang="en"),
)
# Or compose your own.
asr = ba.WhisperBackend(language=ba.LanguageCode.from_iso("eng"))
utseg = ba.CHATUtteranceBackend(model="talkbank/CHATUtterance-en")
pipeline = ba.recipes.transcribe(asr_backend=asr, utseg_backend=utseg)
# Run.
inputs = [ba.media_from_path("session.wav")]
outcomes = list(pipeline.run(inputs))
for outcome in outcomes:
outcome.write("session.cha")
Repository layout
This package is one slice of the talkbank-tools monorepo:
python/batchalign/— Python package (this file).crates/batchalign/— Rust crates (batchalign-core,batchalign-engine).- The pinned TalkBank Chatter dependency supplies CHAT parsing, models, and transforms.
apps/batchalign/batchalign-gui/— Tauri desktop GUI.book/— user + developer documentation (mdBook; source of truth).
For repo conventions, build commands, and the BA3 cutover plan, see
CLAUDE.md at the repo root and
book/src/batchalign/developer/landing-status.md.
Metadata
Release files for batchalign 0.10.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| batchalign-0.10.1-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details for batchalign-0.10.1-cp310-abi3-win_amd64.whl |
| batchalign-0.10.1-cp310-abi3-manylinux_2_28_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.28+ x86-64 | Details for batchalign-0.10.1-cp310-abi3-manylinux_2_28_x86_64.whl |
| batchalign-0.10.1-cp310-abi3-manylinux_2_28_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.28+ ARM64 | Details for batchalign-0.10.1-cp310-abi3-manylinux_2_28_aarch64.whl |
| batchalign-0.10.1-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details for batchalign-0.10.1-cp310-abi3-macosx_11_0_arm64.whl |
| batchalign-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details for batchalign-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl |
Total release size: 26.6 MB
Release files / batchalign-0.10.1-cp310-abi3-win_amd64.whl
| Download URL | batchalign-0.10.1-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f1381de4da04c6d83cfe402427d2886415c39b84e1cd9b1d0ab633ab30f50d49
|
|
BLAKE2b-256 checksum How to use checksums |
bf5b56331573cf08f9e4d7468137307713296e80b15ca14ae93deb830e21d07c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.15
|
Release files / batchalign-0.10.1-cp310-abi3-manylinux_2_28_x86_64.whl
| Download URL | batchalign-0.10.1-cp310-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ad73943396e987d987c1b5c5eb689da2517db0b0107c90817e49ede0049126a8
|
|
BLAKE2b-256 checksum How to use checksums |
4ded8c990fee9dc8dd522819096100722b0320fcf5c041f3b9c3a779d9c59521
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.15
|
Release files / batchalign-0.10.1-cp310-abi3-manylinux_2_28_aarch64.whl
| Download URL | batchalign-0.10.1-cp310-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
5482e2669de050aae960a8ca7f77d515ce8d10aac919e92e7c7f50a5d1269560
|
|
BLAKE2b-256 checksum How to use checksums |
d1b9ed00df15d67a99cc5c25f6bf3bedbc8aaaf4f06cec574a180e31922b506b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.15
|
Release files / batchalign-0.10.1-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | batchalign-0.10.1-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
64d68bdfd9bd86bf7b80870e2700fe50a55fd13980a41b617d117d0957ac356c
|
|
BLAKE2b-256 checksum How to use checksums |
3989d62def38cfb5567ce8a263f28df2aaf4e5bef82991758ea3c977bd2da136
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.15
|
Release files / batchalign-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | batchalign-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
7b133ee589fb181c42df8379ea095fa4a83747076b96d520f28b14caa9c34485
|
|
BLAKE2b-256 checksum How to use checksums |
9fc5a2ed644916177020ffb7f485c155d51442de77a6e3a9a9d3d8746681d58c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.15
|
Security for batchalign 0.10.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.