whisper-ui with external ai integration
  • HTML 77.1%
  • Python 21.2%
  • Dockerfile 1.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-14 21:08:44 +03:00
.env init 2026-06-14 20:53:01 +03:00
docker-compose.yml init 2026-06-14 20:53:01 +03:00
Dockerfile init 2026-06-14 20:53:01 +03:00
index.html . 2026-06-14 21:02:01 +03:00
index.html_simple init 2026-06-14 20:53:01 +03:00
nginx.conf init 2026-06-14 20:53:01 +03:00
proxy.py init 2026-06-14 20:53:01 +03:00
README.md more 2026-06-14 21:08:44 +03:00

Локальная расшифровка аудио → текст с 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-интерфейс «файл → текст» с чатом по содержанию записи).
image

0. Архитектурные особенности

  1. Защита от блокировки потоков Python: Все вызовы к Gemini API осуществляются асинхронно через неблокирующий клиент client.aio.models.generate_content. Это гарантирует стабильную работу чата без разрывов соединений и зависаний.
  2. Маршрутизация 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) если они долго скачиваются или был таймаут при скачивании.

  1. Выполни скачивание весов во временном контейнере:
    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
      "
    
  2. Дождись завершения скачивания файлов (~1.6 ГБ).
  3. Проверь, что веса успешно лежат в папке:
    ls -la whisper-data/models--mobiuslabsgmbh--faster-whisper-large-v3-turbo/snapshots/*/
    

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

  1. Открой в браузере http://localhost:8090.
  2. Перетащи или выбери любой аудиофайл.
  3. По умолчанию включен режим «сырого» текста.
  4. Поставь галочку «✨ Улучшить текст через Gemini», если хочешь убрать междометия («эээ», «ну»), заикания и разделить текст на абзацы без добавления ИИ сторонних мыслей от себя.
  5. При необходимости укажи контекст встречи в поле ввода, чтобы Gemini точнее восстановила сложные технические термины и сленг.
  6. Нажми «Запустить» и забирай готовый текст.
  7. После завершения распознавания пользуйся чатом внизу для извлечения тезисов, составления писем или выжимок по материалам записи.