Максимально простой АК47-подобный тостероподобный бинарный перевариватель аудио в текст.
Засунул → дёрнул → получил.
README_ru может отставать по актуальности от README.md
Вы тратите гигабайты на голосовухи в мессенджерах? Бекапите переписки и хотите сохранить содержимое, но вернуть место на диске? Любите скармливать текст из голосовых нейросетям на упорядочивание, а потом хранить или передавать в сжатой форме?
WhisperToaster — офлайн-инструмент, который берёт аудиофайлы и возвращает текст. Без облаков, без Python, без лишних кнопок. Один бинарь, одна задача.
# Arch
sudo pacman -S qt6-base ffmpegffmpeg нужен только в рантайме — для предварительной конвертации аудио форматов, которые whisper не понимает напрямую. Для сборки не требуется, но без него только .wav, и то не любой.
Модели whisper лежат на HuggingFace: https://huggingface.co/ggerganov/whisper.cpp
Скачайте нужный .bin-файл (рекомендуется ggml-medium-q8_0.bin как сбалансированный вариант) и положите в папку моделей:
mkdir -p ~/.local/share/pywhispercpp/models
wget -O ~/.local/share/pywhispercpp/models/ggml-medium-q8_0.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium-q8_0.binПриложение само найдёт модель в этой папке, а также в:
~/.local/share/whisper-toaster/models/~/whisper.cpp/models/
git clone https://github.com/hopsayer/whisper-toaster whisper-toaster
cd whisper-toaster
git submodule add https://github.com/ggerganov/whisper.cpp third_party/whisper.cpp
git submodule update --init --recursive
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . -j$(nproc)Скомпилированный бинарь — whisper-toaster — можно запускать из любого места. Рекомендуемая установка:
cp whisper-toaster ~/.local/bin/Скопируйте .desktop файл из репозитория (папка /integration) в папку локальных приложений:
cp whisper-toaster.desktop ~/.local/share/applications/Если положили бинарь не в ~/.local/bin/ — отредактируйте строку Exec= в .desktop файле под свой путь.
- Запустите
whisper-toaster - Перетащите аудиофайлы в зону дропа или нажмите на неё для выбора файлов
- Нажмите Start Transcription
- Дождитесь окончания — текст появится в окне
- Сохраните результат: Save → "As single file" (один txt) или "As batch of files" (по txt рядом с каждым исходником)
#### Через терминал (Пока не реализовано)
Передайте пути к файлам аргументами командной строки — откроется GUI с предзагруженным списком файлов:
whisper-toaster audio1.mp3 audio2.wav ~/Music/lecture.m4a- Полный офлайн — никаких облачных API, всё на вашем железе
- Drag & drop аудиофайлов (
.wav,.mp3,.m4a,.aac,.flac,.ogg,.opus,.wma,.aiff) - Автоконвертация неподходящих форматов через ffmpeg в 16kHz 16-bit моно WAV
- Стриминг результатов: текст появляется по мере обработки, а не в конце
- Прогресс-бары: общий и текущего файла
- Множество файлов за один запуск — обрабатываются последовательно
- Сохранение: одним файлом или рядом с каждым оригиналом
- Выбор модели whisper из списка (tiny → large-v3-turbo)
- Переключатель GPU/CPU
- Тёмная и светлая темы
- Автосохранение последней сессии — при следующем запуске текст не теряется
- Естественная сортировка файлов:
file2передfile10
- Докачка моделей из GUI — пока только через ручное размещение файлов
- Beam search — только greedy (быстрее, проще, достаточен для бытовых задач)
- Кастомные/нестандартные модели — только известные кванты из официального репозитория whisper.cpp
- Кнопка Stop во время обработки — только завершение процесса (появится позже)
- Упаковка в deb/rpm/pkg.tar.zst — будет, когда проект стабилизируется
- Лог-вьюер — ошибки видны в статусной строке и диалогах
- Таймаут ffmpeg: сейчас висит бесконечно, если ffmpeg зависает (редкий случай на битых файлах). Пока не критично — воркер работает в фоновом потоке и не вешает GUI.
- Язык:
"auto"— модель сама определяет язык. Раньше был хардкод"ru", исправлено. - WAV-загрузчик: только 16-bit PCM, без ресемплинга. Всё остальное ffmpeg приводит к нужному формату автоматически.
- Модели четырёхлетней давности: whisper — не самая новая модель, но на C++ альтернатив с сопоставимым качеством и скоростью пока нет. Если появятся — рассмотрю отвязку от whisper и по названию, и по коду.
- Иконка помощи
(?): текущий вариант — QLabel с "?" на круглом фоне. Не идеален, но лучше нативной иконки Qt на моей системе. Если знаете решение получше — PR приветствуется.
TranscribeWorker— отдельныйQThread, UI не фризится- Прогресс и стриминг текста — нативные колбэки whisper.cpp (
progress_callback,new_segment_callback) - Отмена (в планах) — через
abort_callback, который whisper проверяет между шагами инференса - Модели ищутся в порядке:
~/.local/share/pywhispercpp/models/→~/.local/share/whisper-toaster/models/→~/whisper.cpp/models/
Поставьте звезду этому проекту на GitHub: https://github.com/hopsayer/whisper-toaster
Поставьте звезду проекту движка whisper.cpp: https://github.com/ggml-org/whisper.cpp
