whisper-ui with external ai integration
- HTML 77.1%
- Python 21.2%
- Dockerfile 1.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .env | ||
| docker-compose.yml | ||
| Dockerfile | ||
| index.html | ||
| index.html_simple | ||
| nginx.conf | ||
| proxy.py | ||
| README.md | ||
Локальная расшифровка аудио → текст с AI-полировкой и чат-ассистентом (Whisper + Gemini 3.5 Flash)
Стек:
- Движок STT:
hwdsl2/docker-whisper(faster-whisper,large-v3-turbo, CPU, локальный кеш). - Прокси-оркестратор: FastAPI-приложение на Python 3.12, использующее асинхронный клиент SDK
google-genaiдля бесконфликтной параллельной обработки запросов. - Модель ИИ для чистки и чата:
gemini-3.5-flashс нулевой температурой (temperature=0.0) для строгого следования оригиналу и предотвращения галлюцинаций. - Веб-морда: nginx-alpine (статический SPA-интерфейс «файл → текст» с чатом по содержанию записи).
0. Архитектурные особенности
- Защита от блокировки потоков Python: Все вызовы к Gemini API осуществляются асинхронно через неблокирующий клиент
client.aio.models.generate_content. Это гарантирует стабильную работу чата без разрывов соединений и зависаний. - Маршрутизация Nginx: Все запросы на обработку (
/process) и чат (/chat) проксируются на внутренний порт оркестратора, исключая ошибки парсинга некорректных HTML-ответов от веб-сервера.
Если одель не скачивается штатно при старте контейнера движка из-за встроенного 300-секундного таймаута, то это решается однократным скачиванием весов вспомогательным контейнером (можно через VPN) в общую папку-volume. См. Шаг 4.
1. Структура директории проекта
Все файлы должны находиться в одной рабочей директории, например ~/docker/whisper:
~/docker/whisper/
├── .env # API-ключи (Gemini)
├── Dockerfile # инструкция сборки прокси-сервера
├── docker-compose.yml # описание всех сервисов стека
├── index.html # интерфейс веб-страницы
├── nginx.conf # конфигурация веб-сервера и маршрутизации
├── proxy.py # асинхронный оркестратор (FastAPI)
└── whisper-data/ # кеш модели Whisper (создается при скачивании)
2. Конфигурационные файлы проекта
Файл .env
Укажи свой API-ключ из Google AI Studio:
GEMINI_API_KEY=твой_api_ключ_от_google_ai_studio
3. Первый запуск и сборка стека
Убедись, что все файлы (Dockerfile, docker-compose.yml, proxy.py, nginx.conf, index.html, .env) лежат в одной папке.
Запусти проект с полной сборкой образов с нуля:
docker compose up -d --build
Проверь состояние контейнеров:
docker ps --format '{{.Names}}\t{{.Status}}'
# Должно быть:
# transcriber-ui Up ...
# whisper-proxy Up ...
# whisper Up ...
Посмотри логи прокси, чтобы убедиться в отсутствии ошибок импорта SDK:
docker compose logs whisper-proxy
4. Скачивание Whisper-модели вручную (ОДИН раз, можно через VPN) если они долго скачиваются или был таймаут при скачивании.
- Выполни скачивание весов во временном контейнере:
docker run --rm -it \ -v "$PWD/whisper-data:/cache" \ python:3.12-slim bash -c " pip install -q huggingface_hub && HF_HUB_DISABLE_XET=1 hf download \ mobiuslabsgmbh/faster-whisper-large-v3-turbo \ --cache-dir /cache " - Дождись завершения скачивания файлов (~1.6 ГБ).
- Проверь, что веса успешно лежат в папке:
ls -la whisper-data/models--mobiuslabsgmbh--faster-whisper-large-v3-turbo/snapshots/*/
5. Использование
- Открой в браузере
http://localhost:8090. - Перетащи или выбери любой аудиофайл.
- По умолчанию включен режим «сырого» текста.
- Поставь галочку «✨ Улучшить текст через Gemini», если хочешь убрать междометия («эээ», «ну»), заикания и разделить текст на абзацы без добавления ИИ сторонних мыслей от себя.
- При необходимости укажи контекст встречи в поле ввода, чтобы Gemini точнее восстановила сложные технические термины и сленг.
- Нажми «Запустить» и забирай готовый текст.
- После завершения распознавания пользуйся чатом внизу для извлечения тезисов, составления писем или выжимок по материалам записи.