npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

whisper-multitrack

v0.1.1

Published

Transcribe multi-track recordings (e.g. Craig Discord meetings) with whisper.cpp — one speaker per track.

Readme

whisper-multitrack

Transcribe multi-track recordings — e.g. meetings recorded with the Craig Discord bot — or plain audio files, with whisper.cpp.

Each speaker's track is transcribed separately, so the transcript is automatically labelled per speaker, and all tracks are interleaved by timestamp into one readable document. Craig recording links are accepted directly: the multi-track FLAC archive is downloaded, unzipped into a temporary folder and transcribed.

Requirements

  • Node.js >= 20
  • ffmpeg on PATH
  • whisper.cpp (whisper-cli) on PATH
  • A whisper model and the Silero VAD model — see Models
  • unzip (needed for Craig links; if it is missing the built-in tar fallback is used where available)

Install

npm install -g whisper-multitrack

Or run it without installing:

npx whisper-multitrack --help

Models

Models are auto-detected in ./models and ~/.local/share/whisper-cpp/models, so anything downloaded with whisper.cpp's standard downloader just works:

whisper-cpp-download-model large-v3-turbo     # or models/download-ggml-model.sh

The Silero VAD model is also required (matching aTrain's defaults):

curl -L -o ggml-silero-v5.1.2.bin \
  https://huggingface.co/ggml-org/whisper-vad/resolve/main/ggml-silero-v5.1.2.bin

If either model is missing, the tool prints exactly what to download.

Usage

whisper-multitrack [options] <dir | file ... | craig-url>

Transcribe a folder of per-speaker tracks (e.g. an extracted Craig zip):

whisper-multitrack ./recording-tracks

Transcribe specific files, optionally overriding the speaker names:

whisper-multitrack Alice=1-alice.flac Bob=2-bob.flac

Transcribe a Craig recording link directly:

whisper-multitrack "https://craig.horse/rec/XXXXXXXXXXXX?key=YYYY"

Paragraph output with timestamps, written to a specific file:

whisper-multitrack --timestamps --merge=paragraphs --out=meeting.txt ./tracks

Try it with npx

No install required — npx fetches the CLI and runs it in one go:

# a folder of tracks
npx -y whisper-multitrack ./recording-tracks

# paragraph output with timestamps, explicit output file
npx -y whisper-multitrack --timestamps --merge=paragraphs --out=transcript.txt ./tracks

# straight from a Craig recording URL
npx -y whisper-multitrack "https://craig.horse/rec/XXXXXXXXXXXX?key=YYYY"

npx only provides the CLI itself — ffmpeg, whisper-cli and the models still need to be installed locally. The -y flag skips npx's first-run install prompt.

Options

| Option | Description | | --- | --- | | --timestamps | Prefix each line with a [hh:mm:ss] timestamp | | --merge=lines | One line per cue (default) | | --merge=paragraphs | Flowing text; paragraphs break on speaker change or a ≥ 2 s pause | | --out=file | Transcript path (default: transcript.txt next to the audio, or transcript-<id>.txt in the current directory for Craig links) | | -h, --help | Show help | | -v, --version | Show version |

Environment variables

| Variable | Description | | --- | --- | | WHISPER_BIN | whisper.cpp binary (default: whisper-cli) | | WHISPER_MODEL | whisper model path (default: auto-detected) | | WHISPER_VAD_MODEL | Silero VAD model path (default: auto-detected) | | WHISPER_LANG | Language (default: auto) | | WHISPER_PROMPT | Initial prompt passed to whisper | | WHISPER_THREADS | Number of threads (default: CPU cores − 1) | | INCLUDE_TIMESTAMPS | 1 = same as --timestamps | | MERGE_MODE | Same as --merge | | OUTPUT | Same as --out |

How it works

  • Every input track is converted to 16 kHz mono with ffmpeg and transcribed by whisper-cli with word timestamps and VAD, using aTrain's faster-whisper decoding settings.
  • Word timestamps are grouped into sentence-like segments (aTrain-style rules: pauses, sentence ends, a max duration), then all speakers' segments are interleaved by time.
  • Speaker names come from file names (1-alice_0.flac → alice_0), or from Name=file arguments.

Author

Svetlozar Argirov [email protected] Broken By Design

License

MIT