/ Модель

Характеристики

Лицензия
Apache 2.0
Базовая модель
Kokoro-82M
Библиотека
mlx
Опубликована
30 июл 2026

kestrel-tts

Синтез речиТекст → аудио

Дистиллированная компактная модель для быстрого синтеза английской речи одним голосом на Apple Silicon.

0скачиваний за 30 дней0лайковвеса обновлены4 авг 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Kestrel — модель синтеза речи, созданная разработчиком mchen04 для Apple Silicon и MLX на основе Kokoro-82M. Это дистиллированная и переработанная модель примерно с 10 млн активных параметров, предназначенная для быстрого озвучивания аудиокниг одним голосом. Она принимает английский текст и генерирует речь голосом af_heart; пакетная обработка и скомпилированные этапы GPU рассчитаны на рендеринг длинных глав.

По приведённым оценкам, разборчивость речи сопоставима с учительской моделью, а автоматические предсказатели качества дают немного более низкие оценки естественности. Модель подходит, когда важна скорость и допустимо небольшое отличие тембра. Длительность синтеза может заметно отклоняться на текстах с плотной пунктуацией, а замедление речи ниже штатной скорости ухудшает качество. Проект завершён; модель распространяется по лицензии Apache-2.0.

Сценарии применения

  • озвучивание глав аудиокниг на английском языке
  • пакетная генерация речи из длинных текстов
  • локальный синтез речи на компьютерах Apple Silicon

Ограничения

Доступен один голос и только английский язык. На текстах с плотной пунктуацией возможен значительный дрейф длительности, а тембр не полностью совпадает с учительской моделью.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Kestrel — final release

Kestrel is a distilled, frame-rate text-to-speech engine for Apple Silicon (MLX), created by compressing and re-architecting Kokoro-82M for single-voice audiobook rendering. Named after the falcon: small, very fast, and precise in timing.

~10 M active parameters (vs Kokoro's 82 M) — the vocoder never leaves frame rate (hop 300 @ 24 kHz), and a whole chapter runs as a handful of batched, compiled GPU stages.

This is the final state of the project. The research program that produced it ran 113 recorded experiment cycles (every one logged with a pre-registered prediction, a falsifier, and a KEEP/KILL verdict) and is now closed. The complete decision trail is in the GitHub repo.

Speed (M2 MacBook, 16 GB; 163 s reference chapter; warm, median of 5)

presetwall clockreal-time factorvs stock Kokoro
student-fast0.271 s×622~53× faster
student-fast-mask (legacy head)0.251 s×671~57× faster
student1.117 s×146~12× faster
stock Kokoro-82M (MLX)13.7 s×11.91×

Quality — measured, stated plainly

Reference-free perceptual instruments (higher is better; the teacher is the ceiling being distilled toward):

instrumentstudent-fast (final)teacher Kokoro-82M
UTMOS22-strong (naturalness)4.1804.477
NISQA (quality)4.7204.948
DNSMOS ovrl (enhancement)3.2373.433

Correctness and voice (against frozen teacher references, 55 eval + 42 category-robustness utterances):

metricstudent-fast (final)note
ASR WER (whisper-large-v3-turbo), eval set5.46 %teacher 5.65 % — parity
ASR WER, adversarial robustness set16.81 %teacher-path 19.12 % — better
speaker cosine, mean0.981same narrator
F0 RMSE31.8 Hz meanpitch contour tracks the teacher
duration drift4.97 % mean, 50.3 % worstworst case only on adversarial punctuation text; 0–8 % on narration
MCD (DTW)13.89 ❌control bar 3.98 — the spectral-similarity gate fails

What this means in practice: same narrator, same words, fully intelligible (ASR at parity with the teacher), and the final vocoder scores within ~0.2–0.3 MOS of the teacher on three independent perceptual predictors — but frame-wise spectral similarity to the teacher (MCD) is far from the control bar, and we do not claim parity in a direct A/B. Use Kestrel where throughput matters and a slight texture difference is acceptable.

Architecture (final)

text ──FastG2P (~4 ms/chapter, misaki-equivalent)──▶ phonemes
   ├─ student:      batch-exact Kokoro phoneme path (masked fp16 BiLSTM scans)
   │                → bit-exact durations + text/duration-encoder features
   └─ student-fast: fully distilled phoneme encoder + duration regressor
──▶ F0/N student  (ConvNeXt-1d on duration-encoder features)
──▶ decode student (frame-rate ConvNeXt-1d, L1-distilled from the teacher's decode blocks)
──▶ SFNoiseHead vocoder (source-filter): a true-sinusoid, alias-gated harmonic excitation
     built in the time domain from exact F0 phase, shaped by a bounded log-magnitude+phase
     filter, plus an additive noise envelope  →  single iSTFT, hop 300

The source-filter head replaced the original MaskHead (spectral-mask-over-template) after the research loop measured MaskHead's representational ceiling; it was then trained adversarially against a 7-lens discriminator ensemble (HiFi-GAN MPD+MSD + multi-resolution log-spectrogram lenses) with gradient-informed lens weighting. The legacy MaskHead remains available as the student-fast-mask preset.

Files

filewhat
kestrel_sf_lw58k.safetensorsSFNoiseHead vocoder — the final default head (cycle 113)
kestrel_maskhead.safetensorslegacy MaskHead vocoder (student-fast-mask)
kestrel_decode.safetensorsdecode-blocks student
kestrel_f0n.safetensorsF0 / energy student (used by student)
kestrel_prosody.safetensorsphoneme encoder + durations (used by student-fast)

Usage

Code lives at https://github.com/mchen04/kestrel-tts (the weights are mirrored there too).

git clone https://github.com/mchen04/kestrel-tts && cd kestrel-tts
pip install -e .            # needs mlx, mlx-audio, misaki
from fastkoko import from_preset
engine = from_preset("student-fast")          # or "student", "student-fast-mask"
audio = engine.synth_all("The crimson moon hung over the ancient city.")  # float32 @ 24 kHz

To use these Hub files directly, download them into the repo's weights/ directory (the default head goes to weights/kestrel_sf_lw58k/gen.safetensors):

from huggingface_hub import snapshot_download
snapshot_download("mchen04/kestrel-tts", local_dir="weights", allow_patterns="*.safetensors")
# then: mkdir -p weights/kestrel_sf_lw58k && mv weights/kestrel_sf_lw58k.safetensors weights/kestrel_sf_lw58k/gen.safetensors

student-fast is self-contained. student additionally loads the original Kokoro-82M weights (fetched from the Hub on first run) for its bit-exact phoneme/duration path.

Training

Distilled entirely on one M2 MacBook (16 GB) from the frozen fp32 Kokoro-82M teacher: ~5 h of captured teacher renders and intermediate features, multi-resolution STFT + mel + cepstral losses, then adversarial training against a 7-lens discriminator ensemble (MPD + MSD + multi-resolution log-spectrogram lenses, gradient-balanced) with best-of-snapshots selection under a three-instrument battery (UTMOS + NISQA + DNSMOS, two-instrument agreement required for any shipped claim). Single voice (af_heart), English only.

Limitations

  • One voice, English only; other languages/voices not trained or evaluated.
  • The frame-wise spectral gate fails (MCD 13.89 vs the 3.98 control bar) — texture is not claimed identical to the teacher.
  • student-fast duration drift is 4.97 % mean but up to 50.3 % on adversarial punctuation-dense text (measured cause: the distilled duration path lacks the teacher's style-conditioned response; seven experiment cycles closed this as inherent to the 80 fps representation).
  • speed != 1.0 is supported (matching the teacher's duration/speed semantics); slowing below 1.0 is the weaker direction (+0.38 dB MCD at 0.8×).
  • The included G2P lookup tables are tuned to an audiobook corpus; out-of-domain words fall back to espeak (slower first pass, then memoized).

Provenance & license

Apache-2.0, matching the Kokoro-82M teacher from which these weights are distilled. Full engineering report, the complete 113-cycle decision trail with every measured dead end, and an independent "did we cheat?" audit are in the GitHub repo's docs/ and experiments/LEDGER.md.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · mlx

Нельзя запустить

MLX-модели работают только на Apple Silicon.

Ревизия весов
cac6cb6

0 моделей