Skip to content

Latest commit

 

History

History
147 lines (100 loc) · 8.38 KB

File metadata and controls

147 lines (100 loc) · 8.38 KB

🍞 Whisper Toaster

Максимально простой АК47-подобный тостероподобный бинарный перевариватель аудио в текст.

Засунул → дёрнул → получил.

README_ru может отставать по актуальности от README.md

тостер с красным рычагом


simple

Зачем это

Вы тратите гигабайты на голосовухи в мессенджерах? Бекапите переписки и хотите сохранить содержимое, но вернуть место на диске? Любите скармливать текст из голосовых нейросетям на упорядочивание, а потом хранить или передавать в сжатой форме?

WhisperToaster — офлайн-инструмент, который берёт аудиофайлы и возвращает текст. Без облаков, без Python, без лишних кнопок. Один бинарь, одна задача.

Установка

Зависимости

# Arch
sudo pacman -S qt6-base ffmpeg

ffmpeg нужен только в рантайме — для предварительной конвертации аудио форматов, которые 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 файл

Скопируйте .desktop файл из репозитория (папка /integration) в папку локальных приложений:

cp whisper-toaster.desktop ~/.local/share/applications/

Если положили бинарь не в ~/.local/bin/ — отредактируйте строку Exec= в .desktop файле под свой путь.

Использование

Через GUI

  1. Запустите whisper-toaster
  2. Перетащите аудиофайлы в зону дропа или нажмите на неё для выбора файлов
  3. Нажмите Start Transcription
  4. Дождитесь окончания — текст появится в окне
  5. Сохраните результат: Save → "As single file" (один txt) или "As batch of files" (по txt рядом с каждым исходником)

#### Через терминал (Пока не реализовано)

Передайте пути к файлам аргументами командной строки — откроется GUI с предзагруженным списком файлов:

whisper-toaster audio1.mp3 audio2.wav ~/Music/lecture.m4a

detailed

Что тут есть

  • Полный офлайн — никаких облачных 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