Skip to main content

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_core PyO3 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.

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

batchalign-0.10.0.post3-cp310-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.10+Windows x86-64

batchalign-0.10.0.post3-cp310-abi3-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

batchalign-0.10.0.post3-cp310-abi3-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

batchalign-0.10.0.post3-cp310-abi3-macosx_11_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

batchalign-0.10.0.post3-cp310-abi3-macosx_10_12_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file batchalign-0.10.0.post3-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for batchalign-0.10.0.post3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6b2db3ba39dae571671374ed13ad0ec2ffd7e266f176ad80b20ed7cd06aadd44
MD5 8f3eb59da235d467b64493d502264009
BLAKE2b-256 9cc71badaf2e02da36dc4d66f0434458625febf89adbbcee2a73c668374ec89a

See more details on using hashes here.

File details

Details for the file batchalign-0.10.0.post3-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for batchalign-0.10.0.post3-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9fdb6d257d782af7f7a1fb9f240b1c6852655115ba8550494cd5fd3f6c36dc9e
MD5 dd24cce5830800ce48b2851cb491c948
BLAKE2b-256 f68de18ef660d4f11588283da95e860aa280ab4b1079a3b93fd6350e4e3a4b9e

See more details on using hashes here.

File details

Details for the file batchalign-0.10.0.post3-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for batchalign-0.10.0.post3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0a4d1ca378eb2320f8d207242711358d7fb49b68d0b0cd88e8f7bd7995829651
MD5 4cd0d16a79338f4ac089375bc8feeca9
BLAKE2b-256 cc1989a36ca326f13af38f88082c3d979b318a60686e4ddc6c409ed80be8412b

See more details on using hashes here.

File details

Details for the file batchalign-0.10.0.post3-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for batchalign-0.10.0.post3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91f45b5effd7c31e68f9834e0fb5097b59292fad61f8f1357d2a1ff3af8f3656
MD5 8cce164d09a5b6a4db4ea4ffaace1291
BLAKE2b-256 d3017a0aba8e4934513b23af09b14e025a2459f0f7928a62be4972346b4e698e

See more details on using hashes here.

File details

Details for the file batchalign-0.10.0.post3-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for batchalign-0.10.0.post3-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ffe4e45ee5b458a189ab29c43d7ed4ea83e30c5176e3055228f0bf7d1e8558b2
MD5 4009dc8354c117557c3d1d752ee1a78d
BLAKE2b-256 13c24feb72e26ec67f8554e234f18540cc84c4f25f65ade4194efbfe52eae46b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.10.0.post3 This release

5 files

0.10.0.post2

5 files

0.10.0.post1

5 files

0.10.0

5 files

0.8.2.post15

1 file

0.8.2.post14

1 file

0.8.2.post13

1 file

0.8.2.post12

1 file

0.8.2.post11

1 file

0.8.2.post10

1 file

0.8.2.post9

1 file

0.8.2.post8

1 file

0.8.2.post7

1 file

0.8.2.post6

1 file

0.8.2.post4

1 file

0.8.2.post3

1 file

0.8.2.post2

1 file

0.8.2.post1

1 file

0.8.2

1 file

0.8.1.post14

1 file

0.8.1.post13

1 file

0.8.1.post12

1 file

0.8.1.post11

1 file

0.8.1.post10

1 file

0.8.1.post8

1 file

0.8.1.post7

1 file

0.8.1.post6

1 file

0.8.1.post5

1 file

0.8.1.post4

1 file

0.8.1.post3

1 file

0.8.1.post2

1 file

0.8.1.post1

1 file

0.8.1

1 file

0.8.0.post4

1 file

0.8.0.post3

1 file

0.8.0.post2

1 file

0.8.0.post1

1 file

0.8.0

1 file

0.7.22.post20

1 file

0.7.22.post19

1 file

0.7.22.post18

1 file

0.7.22.post17

1 file

0.7.22.post16

1 file

0.7.22.post14

1 file

0.7.22.post13

1 file

0.7.22.post12

1 file

0.7.22.post11

1 file

0.7.22.post10

1 file

0.7.22.post9

1 file

0.7.22.post8

1 file

0.7.22.post7

1 file

0.7.22.post5

1 file

0.7.22.post4

1 file

0.7.22.post3

1 file

0.7.22.post2

1 file

0.7.22.post1

1 file

0.7.22

1 file

0.7.21.post11

1 file

0.7.21.post10

1 file

0.7.21.post9

1 file

0.7.21.post8

1 file

0.7.21.post6

1 file

0.7.21.post5

1 file

0.7.21.post4

1 file

0.7.21.post3

1 file

0.7.21.post2

1 file

0.7.21.post1

1 file

0.7.21

1 file

0.7.20.post18

1 file

0.7.20.post17

1 file

0.7.20.post16

1 file

0.7.20.post15

1 file

0.7.20.post14

1 file

0.7.20.post13

1 file

0.7.20.post12

1 file

0.7.20.post11

1 file

0.7.20.post10

1 file

0.7.20.post9

1 file

0.7.20.post8

1 file

0.7.20.post7

1 file

0.7.20.post6

1 file

0.7.20.post5

1 file

0.7.20.post4

1 file

0.7.20.post3

1 file

0.7.20.post2

1 file

0.7.20.post1

1 file

0.7.20

1 file

0.7.19.post15

1 file

0.7.19.post12

1 file

0.7.19.post11

1 file

0.7.19.post10

1 file

0.7.19.post9

1 file

0.7.19.post8

1 file

0.7.19.post7

1 file

0.7.19.post6

1 file

0.7.19.post5

1 file

0.7.19.post4

1 file

0.7.19.post3

1 file

0.7.19.post1

1 file

0.7.19

1 file

0.7.18.post12

1 file

0.7.18.post11

1 file

0.7.18.post10

1 file

0.7.18.post9

1 file

0.7.18.post8

1 file

0.7.18.post7

1 file

0.7.18.post6

1 file

0.7.18.post5

1 file

0.7.18.post4

1 file

0.7.18.post3

1 file

0.7.18.post2

1 file

0.7.18.post1

1 file

0.7.18

1 file

0.7.17.post17

1 file

0.7.17.post16

1 file

0.7.17.post15

1 file

0.7.17.post14

1 file

0.7.17.post13

1 file

0.7.17.post12

1 file

0.7.17.post11

1 file

0.7.17.post10

1 file

0.7.17.post9

1 file

0.7.17.post8

1 file

0.7.17.post7

1 file

0.7.17.post6

1 file

0.7.17.post5

1 file

0.7.17.post4

1 file

0.7.17.post3

1 file

0.7.17.post2

1 file

0.7.17.post1

1 file

0.7.17.post0

1 file

0.7.17

1 file

0.7.16

1 file

0.7.15.post0

1 file

0.7.15

1 file

0.7.14

1 file

0.7.13.post1

1 file

0.7.13

1 file

0.7.12

1 file

0.7.10.post5

1 file

0.7.10.post4

1 file

0.7.10.post2

1 file

0.7.10.post1

1 file

0.7.10.post0

1 file

0.7.10

1 file

0.7.9.post4

1 file

0.7.9.post3

1 file

0.7.9.post2

1 file

0.7.9.post1

1 file

0.7.9.post0

1 file

0.7.9

1 file

0.7.8

1 file

0.7.7.post1

1 file

0.7.7

1 file

0.7.4

1 file

0.7.2

1 file

0.7.0

1 file

0.5.3

1 file

0.4.2

1 file

0.4.1.post0

1 file

0.4.1

1 file

0.4.0.post4

1 file

0.4.0.post3

1 file

0.4.0.post2

1 file

0.4.0.post1

1 file

0.4.0.post0

1 file

0.4.0

1 file

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