Blaizzy/mlx-audioPublic

A text-to-speech (TTS), speech-to-text (STT) and speech-to-speech (STS) library built on Apple's MLX framework, providing efficient speech analysis on Apple Silicon.

AI summary: High-performance audio processing library optimized for Apple Silicon via the MLX framework.

Stars
7.7K
+3 today
Forks
684
Watchers
53
Open issues
72
Open PRs
18
Contributors
~105
Commits
860
Branches
60

PythonMITCreated Nov 27, 2024Last push 1d agoLatest release v0.4.6+42 stars this week+53 this month

Star history

since Feb 23, 2025
02K4K6KFeb 2025Aug 2025Feb 2026Aug 2026
7.7K stars as of Aug 6, 2026, tracked back to Feb 23, 2025. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 1 commit2025-08-04: 1 commit2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 1 commit2025-08-17: 2 commits2025-08-18: 1 commit2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 1 commit2025-08-26: 1 commit2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 1 commit2025-08-30: 12 commits2025-08-31: 1 commit2025-09-01: 2 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 13 commits2025-09-05: 0 commits2025-09-06: 7 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 1 commit2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 2 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 1 commit2025-10-21: 1 commit2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 1 commit2025-11-06: 1 commit2025-11-07: 8 commits2025-11-08: 0 commits2025-11-09: 2 commits2025-11-10: 1 commit2025-11-11: 2 commits2025-11-12: 1 commit2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 3 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 1 commit2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 3 commits2025-12-16: 1 commit2025-12-17: 8 commits2025-12-18: 3 commits2025-12-19: 11 commits2025-12-20: 4 commits2025-12-21: 0 commits2025-12-22: 2 commits2025-12-23: 0 commits2025-12-24: 1 commit2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 1 commit2025-12-29: 0 commits2025-12-30: 3 commits2025-12-31: 2 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 3 commits2026-01-04: 1 commit2026-01-05: 3 commits2026-01-06: 4 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 1 commit2026-01-14: 0 commits2026-01-15: 2 commits2026-01-16: 1 commit2026-01-17: 1 commit2026-01-18: 1 commit2026-01-19: 1 commit2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 6 commits2026-01-23: 7 commits2026-01-24: 2 commits2026-01-25: 11 commits2026-01-26: 6 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 6 commits2026-01-30: 1 commit2026-01-31: 2 commits2026-02-01: 1 commit2026-02-02: 3 commits2026-02-03: 2 commits2026-02-04: 1 commit2026-02-05: 3 commits2026-02-06: 3 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 1 commit2026-02-10: 3 commits2026-02-11: 3 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 2 commits2026-02-19: 1 commit2026-02-20: 1 commit2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 2 commits2026-02-24: 0 commits2026-02-25: 2 commits2026-02-26: 0 commits2026-02-27: 1 commit2026-02-28: 5 commits2026-03-01: 4 commits2026-03-02: 0 commits2026-03-03: 3 commits2026-03-04: 3 commits2026-03-05: 6 commits2026-03-06: 0 commits2026-03-07: 14 commits2026-03-08: 10 commits2026-03-09: 7 commits2026-03-10: 8 commits2026-03-11: 8 commits2026-03-12: 13 commits2026-03-13: 7 commits2026-03-14: 2 commits2026-03-15: 4 commits2026-03-16: 7 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 2 commits2026-03-20: 1 commit2026-03-21: 5 commits2026-03-22: 3 commits2026-03-23: 1 commit2026-03-24: 1 commit2026-03-25: 2 commits2026-03-26: 14 commits2026-03-27: 7 commits2026-03-28: 2 commits2026-03-29: 1 commit2026-03-30: 6 commits2026-03-31: 0 commits2026-04-01: 1 commit2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 5 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 6 commits2026-04-15: 0 commits2026-04-16: 4 commits2026-04-17: 0 commits2026-04-18: 3 commits2026-04-19: 2 commits2026-04-20: 6 commits2026-04-21: 10 commits2026-04-22: 6 commits2026-04-23: 3 commits2026-04-24: 5 commits2026-04-25: 6 commits2026-04-26: 2 commits2026-04-27: 3 commits2026-04-28: 4 commits2026-04-29: 5 commits2026-04-30: 6 commits2026-05-01: 1 commit2026-05-02: 5 commits2026-05-03: 3 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 2 commits2026-05-08: 1 commit2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 2 commits2026-05-14: 0 commits2026-05-15: 1 commit2026-05-16: 0 commits2026-05-17: 1 commit2026-05-18: 4 commits2026-05-19: 6 commits2026-05-20: 8 commits2026-05-21: 3 commits2026-05-22: 24 commits2026-05-23: 2 commits2026-05-24: 2 commits2026-05-25: 0 commits2026-05-26: 2 commits2026-05-27: 4 commits2026-05-28: 1 commit2026-05-29: 1 commit2026-05-30: 3 commits2026-05-31: 0 commits2026-06-01: 4 commits2026-06-02: 0 commits2026-06-03: 4 commits2026-06-04: 5 commits2026-06-05: 9 commits2026-06-06: 1 commit2026-06-07: 2 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 3 commits2026-06-14: 1 commit2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 1 commit2026-06-18: 4 commits2026-06-19: 2 commits2026-06-20: 5 commits2026-06-21: 1 commit2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 2 commits2026-06-25: 2 commits2026-06-26: 1 commit2026-06-27: 6 commits2026-06-28: 3 commits2026-06-29: 3 commits2026-06-30: 0 commits2026-07-01: 1 commit2026-07-02: 1 commit2026-07-03: 2 commits2026-07-04: 1 commit2026-07-05: 2 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 4 commits2026-07-10: 0 commits2026-07-11: 2 commits2026-07-12: 3 commits2026-07-13: 0 commits2026-07-14: 1 commit2026-07-15: 1 commit2026-07-16: 0 commits2026-07-17: 1 commit2026-07-18: 1 commit2026-07-19: 0 commits2026-07-20: 1 commit2026-07-21: 3 commits2026-07-22: 1 commit2026-07-23: 1 commit2026-07-24: 0 commits2026-07-25: 1 commit2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
581 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Very active

    581 commits in 52 weeks

  • Community-driven

    ~105 contributors

  • Outside contributions

    83% of recent commits from the community

  • Permissive license

    MIT

What mlx-audio does

MLX-Audio provides fast, efficient inference for speech-to-text, text-to-speech, and speech-to-speech models running entirely on Apple's M-series chips. By leveraging the MLX framework, it maximizes unified memory usage for low-latency audio processing. The library supports model quantization for massive performance gains, provides an OpenAI-compatible REST API, and includes a Swift package for direct integration into iOS and macOS applications.

Mac developers, AI researchers, and iOS engineers looking to run high-performance audio models locally on Apple Silicon without cloud dependencies.

  • Apple Silicon optimization: Built specifically on the MLX framework to leverage unified memory and GPU acceleration on Macs.
  • Multimodal audio support: Implements architectures for TTS, STT, and STS in a single unified library.
  • Model quantization: Supports 3-bit, 4-bit, 6-bit, and 8-bit quantization to run massive models on constrained hardware.
  • OpenAI-compatible API: Includes a local REST server that mimics the OpenAI audio endpoints as a drop-in replacement.
  • Swift integration: Ships with a Swift package to embed local AI audio processing natively into iOS and macOS apps.
  • Voice customization: Supports dynamic voice cloning and speech speed control at inference time.

Where teams use it

Local podcast transcription

Content creators run 8-bit quantized STT models on their MacBook to transcribe hours of audio without cloud API fees.

Native iOS voice assistants

Mobile developers use the Swift package to embed low-latency text-to-speech directly into their on-device iOS applications.

Drop-in API replacement

Developers point their existing OpenAI-compatible chat interfaces to the local MLX-Audio server to generate speech responses offline.

Real-time speech translation

Researchers chain the STT and TTS capabilities together to build low-latency, on-device translation tools.

Getting started: pip install mlx-audio

README

main branch

MLX-Audio

Blaizzy%2Fmlx-audio | Trendshift

PyPI version Python License: MIT GitHub stars

The best audio processing library built on Apple's MLX framework, providing fast and efficient text-to-speech (TTS), speech-to-text (STT), and speech-to-speech (STS) on Apple Silicon.

Table of Contents

Features

  • Fast inference optimized for Apple Silicon (M series chips)
  • Multiple model architectures for TTS, STT, and STS
  • Multilingual support across models
  • Voice customization and cloning capabilities
  • Adjustable speech speed control
  • Interactive web interface with 3D audio visualization
  • OpenAI-compatible REST API
  • Quantization support (3-bit, 4-bit, 6-bit, 8-bit, and more) for optimized performance
  • Swift package for iOS/macOS integration

Installation

Using pip

pip install mlx-audio

Using uv to install only the command line tools

Latest release from pypi:

uv tool install --force mlx-audio --prerelease=allow

Latest code from github:

uv tool install --force git+https://github.com/Blaizzy/mlx-audio.git --prerelease=allow

For development or web interface:

git clone https://github.com/Blaizzy/mlx-audio.git
cd mlx-audio
pip install -e ".[dev, server]"

Quick Start

Command Line

# Basic TTS generation
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text 'Hello, world!' --voice Chelsie

# With a different voice and language hint
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text 'Welcome to MLX-Audio!' --voice Ethan --lang_code English

# Play audio immediately
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text 'Hello!' --voice Chelsie --play

# Save to a specific directory
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text 'Hello!' --voice Chelsie --output_path ./my_audio

# Stream audio during generation
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text 'Hello!' --voice Chelsie --stream

# Stream audio during generation and save it to disk
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text 'Hello!' --voice Chelsie --stream --save

# Join multiple generated segments into one file
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit --text $'Hello!\nHow are you?' --voice Chelsie --join_audio

By default, when generation yields multiple segments, mlx-audio saves numbered files such as audio_000.wav and audio_001.wav. Use --join_audio to save one combined file instead. When using --stream, add --save to write the streamed audio to disk.

Python API

from mlx_audio.tts.utils import load_model

# Load model
model = load_model("mlx-community/Qwen3-TTS-12Hz-1.7B-Base-8bit")

# Generate speech
for result in model.generate(
    "Hello from MLX-Audio!",
    voice="Chelsie",
    lang_code="English",
):
    print(f"Generated {result.audio.shape[0]} samples")
    # result.audio contains the waveform as mx.array

Supported Models

Text-to-Speech (TTS)

Model Description Languages Repo
Kokoro Fast, high-quality multilingual TTS EN, JA, ZH, FR, ES, IT, PT, HI bf16, 8bit, 6bit, 4bit
KittenTTS Compact KittenTTS 0.8 models for edge-friendly TTS EN nano, micro, mini, collection
Qwen3-TTS Alibaba's multilingual TTS with voice design ZH, EN, JA, KO, + more mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16
Higgs Audio v3 4B conversational TTS with voice cloning and inline control tokens 100 languages bosonai/higgs-audio-v3-tts-4b
OmniVoice Zero-shot multilingual TTS with voice cloning, batch generation, and nonverbal tags 646+ languages mlx-community/OmniVoice-bf16
CSM / MisoTTS Sesame-style conversational speech models with voice cloning EN mlx-community/csm-1b, MisoTTS bf16, MisoTTS 8bit
Dia Dialogue-focused TTS EN mlx-community/Dia-1.6B-fp16
OuteTTS Efficient TTS model EN mlx-community/OuteTTS-1.0-0.6B-fp16
Spark SparkTTS model EN, ZH mlx-community/Spark-TTS-0.5B-bf16
Chatterbox Expressive multilingual TTS EN, ES, FR, DE, IT, PT, PL, TR, RU, NL, CS, AR, ZH, JA, HU, KO mlx-community/chatterbox-fp16
Soprano High-quality TTS EN mlx-community/Soprano-1.1-80M-bf16
Ming Omni TTS (BailingMM) Multimodal generation with voice cloning, style control, and speech/music/event generation EN, ZH mlx-community/Ming-omni-tts-16.8B-A3B-bf16
Ming Omni TTS (Dense) Lightweight dense Ming Omni variant for voice cloning and style control EN, ZH mlx-community/Ming-omni-tts-0.5B-bf16
KugelAudio SOTA 7B AR+Diffusion TTS for European languages EN, DE, FR, ES, IT, PT, NL, PL, RU, UK, + 14 more kugelaudio/kugelaudio-0-open
Voxtral TTS Mistral's 4B multilingual TTS (20 voices, 9 languages) EN, FR, ES, DE, IT, PT, NL, AR, HI mlx-community/Voxtral-4B-TTS-2603-mlx-bf16
LongCat-AudioDiT SOTA diffusion TTS in waveform latent space with voice cloning ZH, EN mlx-community/LongCat-AudioDiT-1B-bf16
MeloTTS Lightweight VITS2-based TTS with streaming EN (more coming) mlx-community/MeloTTS-English-MLX
MOSS-TTS 8B delay-pattern and local-transformer multilingual TTS with voice cloning 31 languages OpenMOSS-Team/MOSS-TTS-v1.5, OpenMOSS-Team/MOSS-TTS, OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5, OpenMOSS-Team/MOSS-TTS-Local-Transformer
MOSS-TTS-Nano Tiny multilingual voice-cloning TTS 20 languages mlx-community/MOSS-TTS-Nano-100M
Higgs Audio v2 3B Llama-backed TTS with real-time voice cloning EN, ZH, KO, DE, ES bf16 (upstream), q8, q6

Speech-to-Text (STT)

Model Description Languages Repo
Whisper OpenAI's robust STT model 99+ languages mlx-community/whisper-large-v3-turbo-asr-fp16
Distil-Whisper Distilled fast Whisper variants EN distil-whisper/distil-large-v3
Qwen3-ASR Alibaba's multilingual ASR ZH, EN, JA, KO, + more mlx-community/Qwen3-ASR-1.7B-8bit
Mega-ASR Routed Qwen3-ASR with automatic clean/base vs degraded/LoRA switching EN (fixtures), multilingual Qwen3-ASR backbone README
Qwen3-ForcedAligner Word-level audio alignment ZH, EN, JA, KO, + more mlx-community/Qwen3-ForcedAligner-0.6B-8bit
MOSS-Transcribe-Diarize Timestamped transcription with speaker labels Multiple major languages https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize
Parakeet NVIDIA's accurate STT EN (v2), 25 EU languages (v3) mlx-community/parakeet-tdt-0.6b-v3
Nemotron 3.5 ASR (streaming) NVIDIA's cache-aware streaming FastConformer-RNNT with language-ID prompting 40 language-locales mlx-community/nemotron-3.5-asr-streaming-0.6b · README
Voxtral Mistral's speech model Multiple mlx-community/Voxtral-Mini-3B-2507-bf16
Voxtral Realtime Mistral's 4B streaming STT Multiple 4bit, fp16
VibeVoice-ASR Microsoft's 9B ASR with diarization & timestamps Multiple mlx-community/VibeVoice-ASR-bf16
Canary NVIDIA's multilingual ASR with translation 25 EU + RU, UK README
Moonshine Useful Sensors' lightweight ASR EN README
MMS Meta's massively multilingual ASR with adapters 1000+ README
Granite Speech IBM's ASR + speech translation EN, FR, DE, ES, PT, JA README
Qwen2-Audio Alibaba's multimodal audio understanding (ASR, captioning, emotion, translation) Multiple mlx-community/Qwen2-Audio-7B-Instruct-4bit
MOSS-Music OpenMOSS music understanding and lyrics ASR EN, ZH README

Voice Activity Detection / Speaker Diarization (VAD)

Model Description Languages Repo
Silero VAD Lightweight speech/non-speech detection with streaming state Language-agnostic mlx-community/silero-vad
Sortformer v1 NVIDIA's end-to-end speaker diarization (up to 4 speakers) Language-agnostic mlx-community/diar_sortformer_4spk-v1-fp32
Sortformer v2.1 NVIDIA's streaming speaker diarization with AOSC compression Language-agnostic mlx-community/diar_streaming_sortformer_4spk-v2.1-fp32

See the model READMEs for API details, streaming examples, and conversion steps.

Speech-to-Speech (STS)

Model Description Use Case Repo
SAM-Audio Text-guided source separation Extract specific sounds mlx-community/sam-audio-large
Liquid2.5-Audio* Speech-to-Speech, Text-to-Speech and Speech-to-Text Speech interactions mlx-community/LFM2.5-Audio-1.5B-8bit
MossFormer2 SE Speech enhancement Noise removal starkdmi/MossFormer2_SE_48K_MLX
DeepFilterNet (1/2/3) Speech enhancement Noise suppression mlx-community/DeepFilterNet-mlx

Model Examples

Qwen3-TTS

Alibaba's state-of-the-art multilingual TTS with voice cloning, emotion control, and voice design capabilities.

from mlx_audio.tts.utils import load_model

model = load_model("mlx-community/Qwen3-TTS-12Hz-0.6B-Base-bf16")
results = list(model.generate(
    text="Hello, welcome to MLX-Audio!",
    voice="Chelsie",
    language="English",
))

audio = results[0].audio  # mx.array

See the Qwen3-TTS README for voice cloning, CustomVoice, VoiceDesign, and all available models.

OmniVoice

OmniVoice is a zero-shot multilingual TTS model for 646+ languages with voice cloning, batch generation, pronunciation controls, and nonverbal tags such as [laughter] and [sigh]. It uses a bidirectional Qwen3 backbone with iterative masked generation and a HiggsAudioV2 acoustic tokenizer.

from mlx_audio.tts.utils import load_model

model = load_model("mlx-community/OmniVoice-bf16")

# Basic multilingual TTS
for result in model.generate(
    text="Hello from OmniVoice running on Apple Silicon.",
    language="english",
    duration_s=5.0,
    num_steps=32,
):
    audio = result.audio

# Zero-shot voice cloning
for result in model.generate(
    text="This sentence uses the reference speaker.",
    language="english",
    ref_audio="reference.wav",
    ref_text="Transcript of the reference audio.",
    duration_s=5.0,
):
    audio = result.audio

For stable voice cloning, provide ref_text that matches the reference clip. OmniVoice also supports generate_batch() for batched TTS and inline pronunciation controls.

Ming Omni TTS (BailingMM)

mlx_audio.tts.generate \
    --model mlx-community/Ming-omni-tts-16.8B-A3B-bf16 \
    --prompt "Please generate speech based on the following description.\n" \
    --text "This is a quick Ming Omni test." \
    --lang_code en \
    --output_path audio_io \
    --file_prefix ming_basic \
    --verbose

See the Ming Omni TTS README for CLI and Python cookbook examples, and the Ming Omni Dense README for the mlx-community/Ming-omni-tts-0.5B-bf16 workflow.

Kokoro TTS

Kokoro is a fast, multilingual TTS model with 54 voice presets.

from mlx_audio.tts.utils import load_model

model = load_model("mlx-community/Kokoro-82M-bf16")
# Or use a quantized variant for lower memory usage:
# model = load_model("mlx-community/Kokoro-82M-8bit")
# model = load_model("mlx-community/Kokoro-82M-4bit")

# Generate with different voices
for result in model.generate(
    text="Welcome to MLX-Audio!",
    voice="af_heart",  # American female
    speed=1.0,
    lang_code="a"  # American English
):
    audio = result.audio

Available Voices:

  • American English: af_heart, af_bella, af_nova, af_sky, am_adam, am_echo, etc.
  • British English: bf_alice, bf_emma, bm_daniel, bm_george, etc.
  • Japanese: jf_alpha, jm_kumo, etc.
  • Chinese: zf_xiaobei, zm_yunxi, etc.

Kokoro requires pip install misaki for text processing. Japanese and Mandarin may additionally require pip install misaki[ja] or pip install misaki[zh].

Language Codes:

Code Language Note
a American English Default; requires pip install misaki
b British English Requires pip install misaki
j Japanese Requires pip install misaki[ja]
z Mandarin Chinese Requires pip install misaki[zh]
e Spanish Requires pip install misaki
f French Requires pip install misaki

CSM (Voice Cloning)

Clone any voice using a reference audio sample:

mlx_audio.tts.generate \
    --model mlx-community/csm-1b \
    --text "Hello from Sesame." \
    --ref_audio ./reference_voice.wav \
    --play

Whisper STT

from mlx_audio.stt.generate import generate_transcription

result = generate_transcription(
    model="mlx-community/whisper-large-v3-turbo-asr-fp16",
    audio="audio.wav",
)
print(result.text)

Qwen3-ASR & ForcedAligner

Alibaba's multilingual speech models for transcription and word-level alignment.

from mlx_audio.stt import load

# Speech recognition
model = load("mlx-community/Qwen3-ASR-0.6B-8bit")
result = model.generate("audio.wav", language="English")
print(result.text)

# Word-level forced alignment
aligner = load("mlx-community/Qwen3-ForcedAligner-0.6B-8bit")
result = aligner.generate("audio.wav", text="I have a dream", language="English")
for item in result:
    print(f"[{item.start_time:.2f}s - {item.end_time:.2f}s] {item.text}")

See the Qwen3-ASR README for CLI usage, all models, and more examples.

VibeVoice-ASR

Microsoft's 9B parameter speech-to-text model with speaker diarization and timestamps. Supports long-form audio (up to 60 minutes) and outputs structured JSON.

from mlx_audio.stt.utils import load

model = load("mlx-community/VibeVoice-ASR-bf16")

# Basic transcription
result = model.generate(audio="meeting.wav", max_tokens=8192, temperature=0.0)
print(result.text)
# [{"Start":0,"End":5.2,"Speaker":0,"Content":"Hello everyone, let's begin."},
#  {"Start":5.5,"End":9.8,"Speaker":1,"Content":"Thanks for joining today."}]

# Access parsed segments
for seg in result.segments:
    print(f"[{seg['start_time']:.1f}-{seg['end_time']:.1f}] Speaker {seg['speaker_id']}: {seg['text']}")

Streaming transcription:

# Stream tokens as they are generated
for text in model.stream_transcribe(audio="speech.wav", max_tokens=4096):
    print(text, end="", flush=True)

With context (hotwords/metadata):

result = model.generate(
    audio="technical_talk.wav",
    context="MLX, Apple Silicon, PyTorch, Transformer",
    max_tokens=8192,
    temperature=0.0,
)

CLI usage:

# Basic transcription
python -m mlx_audio.stt.generate \
    --model mlx-community/VibeVoice-ASR-bf16 \
    --audio meeting.wav \
    --output-path output \
    --format json \
    --max-tokens 8192 \
    --verbose

# With context/hotwords
python -m mlx_audio.stt.generate \
    --model mlx-community/VibeVoice-ASR-bf16 \
    --audio technical_talk.wav \
    --output-path output \
    --format json \
    --max-tokens 8192 \
    --context "MLX, Apple Silicon, PyTorch, Transformer" \
    --verbose

Parakeet (Multilingual STT)

NVIDIA's high-accuracy speech-to-text model. Parakeet v3 supports 25 European languages.

from mlx_audio.stt.utils import load

# Load the multilingual v3 model
model = load("mlx-community/parakeet-tdt-0.6b-v3")

# Transcribe audio
result = model.generate("audio.wav")
print(f"Text: {result.text}")

# Access word-level timestamps
for sentence in result.sentences:
    print(f"[{sentence.start:.2f}s - {sentence.end:.2f}s] {sentence.text}")

Streaming transcription:

for chunk in model.generate("long_audio.wav", stream=True):
    print(chunk.text, end="", flush=True)

Supported languages (v3): Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian, Ukrainian

CLI usage:

python -m mlx_audio.stt.generate \
    --model mlx-community/parakeet-tdt-0.6b-v3 \
    --audio speech.wav \
    --output-path output \
    --format json \
    --verbose

KugelAudio

SOTA open-source 7B TTS model for 24 European languages, based on Microsoft VibeVoice. Uses a hybrid AR + Diffusion architecture (Qwen2.5 LM + SDE-DPM-Solver++ diffusion head + VAE decoder).

from mlx_audio.tts.utils import load_model

model = load_model("kugelaudio/kugelaudio-0-open")

for result in model.generate(
    text="Hello, welcome to MLX-Audio!",
    cfg_scale=3.0,       # Classifier-free guidance (1.0=fast, 3.0=quality)
    ddpm_steps=10,       # Diffusion steps (5=fast, 10=balanced, 20=max quality)
):
    audio = result.audio  # mx.array, 24kHz

The model loads directly from HuggingFace (weights are remapped automatically via sanitize()). To quantize or save in a pre-converted format:

python -m mlx_audio.convert \
    --hf-path kugelaudio/kugelaudio-0-open \
    --mlx-path ./kugelaudio-0-open-bf16 \
    --dtype bfloat16

Supported languages (24): English, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Russian, Ukrainian, Czech, Romanian, Hungarian, Swedish, Danish, Finnish, Norwegian, Greek, Bulgarian, Slovak, Croatian, Serbian, Turkish

Note: Requires ~17GB memory (7B params in bfloat16). Pre-encoded voice presets (voice cloning) are not yet available in the upstream model — the model generates speech with a default voice.

LongCat-AudioDiT

SOTA diffusion-based TTS operating in the waveform latent space. Uses Conditional Flow Matching with a DiT backbone and WAV-VAE codec at 24kHz. Supports zero-shot voice cloning.

from mlx_audio.tts.utils import load

model = load("mlx-community/LongCat-AudioDiT-1B-bf16")

# Zero-shot TTS
result = next(model.generate("Hello, this is a test of AudioDiT."))
audio = result.audio  # mx.array, 24kHz

# Voice cloning (use "apg" guidance for best similarity)
result = next(model.generate(
    text="Today is warm turning to rain.",
    ref_audio="reference.wav",
    ref_text="Transcript of the reference audio.",
    guidance_method="apg",
    cfg_strength=4.0,
    steps=16,
))

See the LongCat-AudioDiT README for all parameters and CLI usage.

Voxtral TTS

Mistral's 4B multilingual text-to-speech with 20 voice presets across 9 languages.

from mlx_audio.tts.utils import load

model = load("mlx-community/Voxtral-4B-TTS-2603-mlx-bf16")

for result in model.generate(text="Hello, how are you today?", voice="casual_male"):
    print(result.audio_duration)

Voices: casual_male, casual_female, cheerful_female, neutral_male, neutral_female, fr_male, fr_female, es_male, es_female, de_male, de_female, it_male, it_female, pt_male, pt_female, nl_male, nl_female, ar_male, hi_male, hi_female

Voxtral Realtime

Mistral's 4B parameter streaming speech-to-text model, optimized for low-latency transcription.

Available variants: 4bit (smaller/faster) | fp16 (full precision)

from mlx_audio.stt.utils import load

# Use 4bit for faster inference, fp16 for full precision
model = load("mlx-community/Voxtral-Mini-4B-Realtime-2602-4bit")

# Transcribe audio
result = model.generate("audio.wav")
print(result.text)

# Streaming transcription
for chunk in model.generate("audio.wav", stream=True):
    print(chunk, end="", flush=True)

# Adjust transcription delay (lower = faster but less accurate)
result = model.generate("audio.wav", transcription_delay_ms=240)

MedASR (Medical Transcription)

Specialized model for medical terms and dictation.

from mlx_audio.stt.utils import load, transcribe

model = load("mlx-community/medasr")
result = transcribe("medical_dictation.wav", model=model)
print(result["text"])

Live Transcription Example:

# Continuous live transcription with VAD
python examples/medasr_live.py

SAM-Audio (Source Separation)

Separate specific sounds from audio using text prompts:

from mlx_audio.sts import SAMAudio, SAMAudioProcessor, save_audio

model = SAMAudio.from_pretrained("mlx-community/sam-audio-large")
processor = SAMAudioProcessor.from_pretrained("mlx-community/sam-audio-large")

batch = processor(
    descriptions=["A person speaking"],
    audios=["mixed_audio.wav"],
)

result = model.separate_long(
    batch.audios,
    descriptions=batch.descriptions,
    anchors=batch.anchor_ids,
    chunk_seconds=10.0,
    overlap_seconds=3.0,
    ode_opt={"method": "midpoint", "step_size": 2/32},
)

save_audio(result.target[0], "voice.wav")
save_audio(result.residual[0], "background.wav")

MossFormer2 (Speech Enhancement)

Remove noise from speech recordings:

from mlx_audio.sts import MossFormer2SEModel, save_audio

model = MossFormer2SEModel.from_pretrained("starkdmi/MossFormer2_SE_48K_MLX")
enhanced = model.enhance("noisy_speech.wav")
save_audio(enhanced, "clean.wav", 48000)

Web Interface & API Server

MLX-Audio includes a modern web interface and OpenAI-compatible API.

Starting the Server

# Start API server
mlx_audio.server --host 0.0.0.0 --port 8000

# Start web UI (in another terminal)
cd mlx_audio/ui
npm install && npm run dev

API Endpoints

Text-to-Speech (OpenAI-compatible):

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model": "mlx-community/Kokoro-82M-bf16", "input": "Hello!", "voice": "af_heart"}' \
  --output speech.wav

Speech-to-Text:

curl -X POST http://localhost:8000/v1/audio/transcriptions \
  -F "file=@audio.wav" \
  -F "model=mlx-community/whisper-large-v3-turbo-asr-fp16"

Quantization

Reduce model size and improve performance with quantization using the convert script:

# Convert and quantize to 4-bit
python -m mlx_audio.convert \
    --hf-path prince-canuma/Kokoro-82M \
    --mlx-path ./Kokoro-82M-4bit \
    --quantize \
    --q-bits 4 \
    --upload-repo username/Kokoro-82M-4bit (optional: if you want to upload the model to Hugging Face)

# Convert with MXFP4 quantization
python -m mlx_audio.convert \
    --hf-path prince-canuma/Kokoro-82M \
    --mlx-path ./Kokoro-82M-mxfp4 \
    --quantize \
    --q-mode mxfp4

# Convert with specific dtype (bfloat16)
python -m mlx_audio.convert \
    --hf-path prince-canuma/Kokoro-82M \
    --mlx-path ./Kokoro-82M-bf16 \
    --dtype bfloat16 \
    --upload-repo username/Kokoro-82M-bf16 (optional: if you want to upload the model to Hugging Face)

Options:

Flag Description
--hf-path Source Hugging Face model or local path
--mlx-path Output directory for converted model
-q, --quantize Enable quantization
--q-bits Bits per weight (optional, defaults depend on --q-mode)
--q-group-size Group size for quantization (optional, defaults depend on --q-mode)
--q-mode Quantization mode: affine, mxfp4, mxfp8, nvfp4
--dtype Weight dtype: float16, bfloat16, float32
--upload-repo Upload converted model to HF Hub

Swift

Looking for Swift/iOS support? Check out mlx-audio-swift for on-device TTS using MLX on macOS and iOS.

Requirements

  • Python 3.10+
  • Apple Silicon Mac (M1/M2/M3/M4)
  • MLX framework
  • ffmpeg (required for MP3/FLAC/OGG/Opus/Vorbis audio encoding)

Installing ffmpeg

ffmpeg is required for saving audio in MP3, FLAC, OGG, Opus, or Vorbis format. Install it using:

# macOS (using Homebrew)
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg

WAV format works without ffmpeg.

License

MIT License

Citation

@misc{mlx-audio,
  author = {Canuma, Prince},
  title = {MLX Audio},
  year = {2025},
  howpublished = {\url{https://github.com/Blaizzy/mlx-audio}},
  note = {Audio processing library for Apple Silicon with TTS, STT, and STS capabilities.}
}

Acknowledgements

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

26 total
  1. v0.4.6v0.4.6Jul 25, 2026

    ## What's Changed * Improve MOSS-Transcribe-Diarize performance by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/826 * Improve audio loading performance by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/825 * realtime: gate transcription behind the VAD so the GPU idles during silence by @maltyxx in https://github.com/Blaizzy/mlx-audio/pull/839 * test: account for Metal matmul precision by @sasan1200 in https://github.com/Blaizzy/mlx-audio/pull/848 * Fix/chatterbox s3gen conformer naming by @dmpolukhin in https://github.com/Blaizzy/mlx-audio/pull/850 * Fix circular import by moving wired_limit to stt/utils.py by @CantBeSubh in https://github.com/Blaizzy/mlx-audio/pull/836 * Optimize inference for Granite Speech NAR by @janbridley in https://github.com/Blaizzy/mlx-audio/pull/831 * fix(stt): apply logits processors in batched Qwen3-ASR by @hhh2210 in https://github.com/Blaizzy/mlx-audio/pull/853 * feat(stt): route shared context to Fun-ASR hotwords by @LauraGPT in https://github.com/Blaizzy/mlx-audio/pull/855 * Improved cache handling for Qwen3-TTS by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/852 * Bump version to 0.4.6 by @Blaizzy in

  2. v0.4.5v0.4.5Jul 9, 2026

    ## What's Changed * Add ZONOS2 TTS model by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/791 * Cache Higgs v3 reference audio codes by @sxy-trans-n in https://github.com/Blaizzy/mlx-audio/pull/793 * Make sure to evaluate arrays before moving across threads by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/798 * Add support for MOSS-TTS-Local-Transformer-v1.5 by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/797 * Add Higgs v3 batch generation by @sxy-trans-n in https://github.com/Blaizzy/mlx-audio/pull/802 * Add Higgs v3 continuous batching by @sxy-trans-n in https://github.com/Blaizzy/mlx-audio/pull/804 * perf: cache ECAPA mel filters + top-k slice, remove MLX floor in sortformer by @hluaguo in https://github.com/Blaizzy/mlx-audio/pull/801 * perf(stt): hot-path profiling optimizations and memory/sync improvements by @hluaguo in https://github.com/Blaizzy/mlx-audio/pull/806 * Reduce Higgs v3 AR decode syncs by @sxy-trans-n in https://github.com/Blaizzy/mlx-audio/pull/808 * Point OmniVoice docs to the MLX-ready mlx-community/OmniVoice-bfloat16 by @Lazarus-931 in https://github.com/Blaizzy/mlx-audio/pull/807 * Higgs audio 3 stt support by

  3. v0.4.4v0.4.4Jun 6, 2026

    ## What's Changed * Implement an ICL cache for Qwen3-TTS. by @orbitalquark in https://github.com/Blaizzy/mlx-audio/pull/685 * feat(higgs_audio): overlap-add mid-generation streaming by @Kairos-a in https://github.com/Blaizzy/mlx-audio/pull/669 * Add Step-Audio 2 codec by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/686 * Allow reference voice matching in Qwen3 TTS batch generation by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/689 * Delete XCODE_BUILD_TROUBLESHOOTING.md by @Blaizzy in https://github.com/Blaizzy/mlx-audio/pull/692 * feat: Add VoxCPM2 TTS model (2B params, 48kHz, 30 languages) by @acul3 in https://github.com/Blaizzy/mlx-audio/pull/641 * Qwen3-TTS: honor caller-provided max_tokens in instruct and ICL paths. by @contrapuntal in https://github.com/Blaizzy/mlx-audio/pull/695 * Add MOSS TTS models (delay and local transformer) by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/691 * Fix regression in Fish S2 Pro by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/693 * Add Silero VAD model by @lucasnewman in https://github.com/Blaizzy/mlx-audio/pull/701 * `fix(voxtral_realtime): empty downsample_and_project uses dec

  4. v0.4.3v0.4.3Apr 28, 2026

    ## What's Changed * Add LongCat-AudioDiT 1B TTS model by @Blaizzy in https://github.com/Blaizzy/mlx-audio/pull/627 * feat: add WebM audio format support by @regcs in https://github.com/Blaizzy/mlx-audio/pull/635 * Add MkDocs docs site and docs guardrails by @shreyaskarnik in https://github.com/Blaizzy/mlx-audio/pull/626 * Update branch for GitHub Actions workflow by @Blaizzy in https://github.com/Blaizzy/mlx-audio/pull/639 * feat: add MeloTTS-English MLX port by @shreyaskarnik in https://github.com/Blaizzy/mlx-audio/pull/629 * feat: add OmniVoice zero-shot multilingual TTS (646+ languages) by @beshkenadze in https://github.com/Blaizzy/mlx-audio/pull/630 * Register client disconnects while streaming TTS audio. by @orbitalquark in https://github.com/Blaizzy/mlx-audio/pull/634 * fix(kokoro): support quantized checkpoint layout and guard NaN durations by @beshkenadze in https://github.com/Blaizzy/mlx-audio/pull/624 * Remove docs check for user-facing changes by @Blaizzy in https://github.com/Blaizzy/mlx-audio/pull/658 * fix(stt): correct granite_speech Conv1d weight sanitization and add parakeet model_type by @ryancee in https://github.com/Blaizzy/mlx-audio/pull/657 * fix(co

  5. v0.4.2v0.4.2Mar 30, 2026

    ## What's Changed * fix: pin setuptools<81 to prevent webrtcvad import failure by @mm65x in https://github.com/Blaizzy/mlx-audio/pull/579 * docs(whisper): add distil-whisper to supported models list by @mm65x in https://github.com/Blaizzy/mlx-audio/pull/580 * Fix whisper timestamps by @Blaizzy in https://github.com/Blaizzy/mlx-audio/pull/583 * add moshi sts by @mm65x in https://github.com/Blaizzy/mlx-audio/pull/569 * Fix Qwen3-TTS streaming memory leak. by @orbitalquark in https://github.com/Blaizzy/mlx-audio/pull/585 * Add Trendshift badge to README by @Blaizzy in https://github.com/Blaizzy/mlx-audio/pull/588 * Fix Parakeet streaming defaults and add validation by @andimarafioti in https://github.com/Blaizzy/mlx-audio/pull/485 * fix(fish_qwen3_omni): support loading quantized/converted models in sanitize() by @yoshphys in https://github.com/Blaizzy/mlx-audio/pull/584 * fix(parakeet): align preprocessing with NeMo reference by @beshkenadze in https://github.com/Blaizzy/mlx-audio/pull/592 * fix: convert numpy audio to mx.array in realtime STT streaming path by @korale77 in https://github.com/Blaizzy/mlx-audio/pull/596 * Add Irodori-TTS: Japanese TTS model port to MLX by @

Commits per week

last 52 weeks
550Week of 2025-08-03: 2 commitsWeek of 2025-08-10: 1 commitsWeek of 2025-08-17: 3 commitsWeek of 2025-08-24: 15 commitsWeek of 2025-08-31: 23 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 1 commitsWeek of 2025-09-21: 2 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 2 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 10 commitsWeek of 2025-11-09: 6 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 4 commitsWeek of 2025-12-14: 30 commitsWeek of 2025-12-21: 3 commitsWeek of 2025-12-28: 9 commitsWeek of 2026-01-04: 8 commitsWeek of 2026-01-11: 5 commitsWeek of 2026-01-18: 17 commitsWeek of 2026-01-25: 26 commitsWeek of 2026-02-01: 13 commitsWeek of 2026-02-08: 7 commitsWeek of 2026-02-15: 4 commitsWeek of 2026-02-22: 10 commitsWeek of 2026-03-01: 30 commitsWeek of 2026-03-08: 55 commitsWeek of 2026-03-15: 19 commitsWeek of 2026-03-22: 30 commitsWeek of 2026-03-29: 8 commitsWeek of 2026-04-05: 5 commitsWeek of 2026-04-12: 13 commitsWeek of 2026-04-19: 38 commitsWeek of 2026-04-26: 26 commitsWeek of 2026-05-03: 6 commitsWeek of 2026-05-10: 3 commitsWeek of 2026-05-17: 48 commitsWeek of 2026-05-24: 13 commitsWeek of 2026-05-31: 23 commitsWeek of 2026-06-07: 5 commitsWeek of 2026-06-14: 13 commitsWeek of 2026-06-21: 12 commitsWeek of 2026-06-28: 11 commitsWeek of 2026-07-05: 8 commitsWeek of 2026-07-12: 7 commitsWeek of 2026-07-19: 7 commitsWeek of 2026-07-26: 0 commitsAug 3, 2025Jul 26, 2026
581 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 5 commitsSun 1:00 — 3 commitsSun 2:00 — 1 commitsSun 3:00 — 0 commitsSun 4:00 — 2 commitsSun 5:00 — 5 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 2 commitsSun 9:00 — 3 commitsSun 10:00 — 1 commitsSun 11:00 — 5 commitsSun 12:00 — 7 commitsSun 13:00 — 6 commitsSun 14:00 — 5 commitsSun 15:00 — 5 commitsSun 16:00 — 1 commitsSun 17:00 — 7 commitsSun 18:00 — 5 commitsSun 19:00 — 7 commitsSun 20:00 — 5 commitsSun 21:00 — 2 commitsSun 22:00 — 1 commitsSun 23:00 — 3 commitsMon 0:00 — 3 commitsMon 1:00 — 3 commitsMon 2:00 — 2 commitsMon 3:00 — 0 commitsMon 4:00 — 1 commitsMon 5:00 — 1 commitsMon 6:00 — 1 commitsMon 7:00 — 2 commitsMon 8:00 — 2 commitsMon 9:00 — 5 commitsMon 10:00 — 5 commitsMon 11:00 — 4 commitsMon 12:00 — 1 commitsMon 13:00 — 3 commitsMon 14:00 — 5 commitsMon 15:00 — 8 commitsMon 16:00 — 2 commitsMon 17:00 — 5 commitsMon 18:00 — 7 commitsMon 19:00 — 4 commitsMon 20:00 — 4 commitsMon 21:00 — 4 commitsMon 22:00 — 9 commitsMon 23:00 — 4 commitsTue 0:00 — 5 commitsTue 1:00 — 6 commitsTue 2:00 — 2 commitsTue 3:00 — 2 commitsTue 4:00 — 2 commitsTue 5:00 — 1 commitsTue 6:00 — 1 commitsTue 7:00 — 5 commitsTue 8:00 — 0 commitsTue 9:00 — 5 commitsTue 10:00 — 3 commitsTue 11:00 — 3 commitsTue 12:00 — 3 commitsTue 13:00 — 8 commitsTue 14:00 — 1 commitsTue 15:00 — 5 commitsTue 16:00 — 5 commitsTue 17:00 — 6 commitsTue 18:00 — 3 commitsTue 19:00 — 8 commitsTue 20:00 — 4 commitsTue 21:00 — 3 commitsTue 22:00 — 4 commitsTue 23:00 — 1 commitsWed 0:00 — 6 commitsWed 1:00 — 0 commitsWed 2:00 — 2 commitsWed 3:00 — 2 commitsWed 4:00 — 1 commitsWed 5:00 — 2 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 1 commitsWed 9:00 — 2 commitsWed 10:00 — 2 commitsWed 11:00 — 2 commitsWed 12:00 — 5 commitsWed 13:00 — 1 commitsWed 14:00 — 4 commitsWed 15:00 — 11 commitsWed 16:00 — 7 commitsWed 17:00 — 7 commitsWed 18:00 — 11 commitsWed 19:00 — 1 commitsWed 20:00 — 7 commitsWed 21:00 — 5 commitsWed 22:00 — 5 commitsWed 23:00 — 3 commitsThu 0:00 — 5 commitsThu 1:00 — 6 commitsThu 2:00 — 3 commitsThu 3:00 — 1 commitsThu 4:00 — 2 commitsThu 5:00 — 0 commitsThu 6:00 — 2 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 2 commitsThu 10:00 — 6 commitsThu 11:00 — 3 commitsThu 12:00 — 5 commitsThu 13:00 — 9 commitsThu 14:00 — 9 commitsThu 15:00 — 7 commitsThu 16:00 — 11 commitsThu 17:00 — 7 commitsThu 18:00 — 3 commitsThu 19:00 — 7 commitsThu 20:00 — 13 commitsThu 21:00 — 14 commitsThu 22:00 — 10 commitsThu 23:00 — 9 commitsFri 0:00 — 4 commitsFri 1:00 — 2 commitsFri 2:00 — 2 commitsFri 3:00 — 7 commitsFri 4:00 — 1 commitsFri 5:00 — 2 commitsFri 6:00 — 1 commitsFri 7:00 — 3 commitsFri 8:00 — 2 commitsFri 9:00 — 8 commitsFri 10:00 — 16 commitsFri 11:00 — 15 commitsFri 12:00 — 3 commitsFri 13:00 — 2 commitsFri 14:00 — 4 commitsFri 15:00 — 6 commitsFri 16:00 — 6 commitsFri 17:00 — 13 commitsFri 18:00 — 5 commitsFri 19:00 — 5 commitsFri 20:00 — 1 commitsFri 21:00 — 4 commitsFri 22:00 — 4 commitsFri 23:00 — 1 commitsSat 0:00 — 11 commitsSat 1:00 — 3 commitsSat 2:00 — 3 commitsSat 3:00 — 2 commitsSat 4:00 — 2 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 1 commitsSat 8:00 — 1 commitsSat 9:00 — 2 commitsSat 10:00 — 3 commitsSat 11:00 — 7 commitsSat 12:00 — 3 commitsSat 13:00 — 5 commitsSat 14:00 — 11 commitsSat 15:00 — 10 commitsSat 16:00 — 10 commitsSat 17:00 — 8 commitsSat 18:00 — 2 commitsSat 19:00 — 10 commitsSat 20:00 — 9 commitsSat 21:00 — 4 commitsSat 22:00 — 5 commitsSat 23:00 — 9 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits126 (17%)
Community commits604 (83%)

730 commits in total over the last year.

DateListRankStars gained
Jan 26, 2026daily#7+320
Jan 25, 2026daily#9+282