Q-scribe (Quick Transcription) появился как быстрый, независимый и легковесный конвейер «приемлемого качества» для расшифровки видеозаписей встреч. Полученный текст можно использовать для создания протоколов, кратких сводок или дальнейшей обработки.

Условия, с которыми мы столкнулись, были простыми и вполне реальными:

  1. Мы — небольшая удаленная команда из двух человек.

  2. Мы не хотим платить за облачные подписки для транскрибации.

  3. Мы не хотим сливать аудио встреч на внешние сервера.

  4. У одного из нас (у меня) имеется ноутбук с NVIDIA GeForce RTX 4080.

  5. Я нахожусь в России, что накладывает ограничения на пользование многими сервисами.

В итоге мы собрали компактное прагматичное решение: локальное Python-приложение, которое запускает модель OpenAI Whisper на моей машине. Коллега использует временное хост-соединение, чтобы зайти в интерфейс, загрузить файл, нажать «Транскрибировать» и скачать результат — и всё это не выходя из браузера.

Никакого «пинг-понга» файлами. Никаких счетов за облака. Никакой утечки данных. Никаких геоблокировок.

«Быстрое и грязное» решение, которое на удивление полезно

Этот подход не заменит корпоративные платформы вроде Otter.ai, Fireflies.ai, Google Speech-to-Text или Zoom AI Companion. Но для маленьких команд и частных лиц он попадает в «золотую середину»:

  • Бесплатная эксплуатация (если у вас уже есть железо).

  • Локальный хостинг.

  • Работает всего на нескольких Python-библиотеках.

  • Данные и весь процесс под вашим полным контролем.

  • Можно запускать откуда угодно (без привязки к локациям и блокировкам).

Обзор приложения: крошечный UI, который работает

Фронтенд намеренно минималистичен: он разработан с помощью Streamlit, так как этот Python-фреймворк позволяет создать веб-интерфейс без разработки «настоящего» веб-приложения. Интерфейс состоит всего из трёх кнопок:

  1. Upload: выбор видео- или аудиофайла.

  2. Transcribe: запуск модели.

  3. Download: получение расшифровки в формате .txt.

Дополнительный функционал (не обязательно, но удобно):

  • Выбор размера модели Whisper (small/medium/large).

  • Выбор языка (ru/en/de/fr/es).

  • Настройка длины фрагментов (chunks) для стабильности и производительности.

  • Регулировка Beam search (баланс качества и скорости).

  • Очистка кэша CUDA, чтобы избежать переполнения памяти GPU.

Устройство бэкенда

Конвейер состоит из четырех основных блоков:

  1. Видео → Аудио → Фрагменты. Чтобы не «скармливать» модели один огромный аудиофайл, приложение: (i) извлекает звук с помощью pydub (используя ffmpeg), (ii) делит его на фрагменты (обычно по 10–30 секунд), (iii) сохраняет их как WAV-файлы. Нарезка повышает надежность, предотвращает скачки по��ребления памяти и позволяет видеть прогресс.

  2. OpenAI Whisper. Whisper — это «движок» транскрибации. Мы загружаем одну из доступных моделей c Hugging Face: openai/whisper-small, openai/whisper-medium или openai/whisper-large-v3. Модель скачивается один раз и кэшируется локально, после чего работает полностью на вашем ПК. Whisper мультиязычен (в частности, поддерживается русский), так что языки можно переключать.

  3. Интерфейс Streamlit. Обеспечивает удобство в стиле «загрузил / расшифровал / скачал». Также позволяет легко выводить индикаторы выполнения (progress bars) задачи.

  4. Tailscale для связи «машина-машина». Лучшее решение — то, которое не требует открывать содержимое вашкго ПК всему интернету. Tailscale позволяет создать частную сеть между устройствами. Коллега подключается к вашему приложению на Streamlit через ваш IP в Tailscale, как если бы вы были в одной локальной сети, даже если вы находитесь в разных странах (как в нашем случае).

    Практический трюк для «удаленной команды»

    Как запустить Streamlit на вашем ноутбуке (в роли сервера) и позволить коллеге открыть его в браузере через Tailscale, не сливая ничего в интернет?

    1. Установка и вход в Tailscale (настройка хоста)

    Установите Tailscale на свой ноутбук, пройдите аутентификацию и убедитесь, что у ноутбука есть IPv4-адрес в сети Tailscale:

    sudo tailscale up
    tailscale ip -4

    Пример вывода (IP вашего ноутбука в Tailscale сети): 100.32.105.55

    2. Запуск приложения Streamlit

    Запустите Streamlit так, чтобы он «слушал» все интерфейсы (это необходимо для надежной работы NAT/IP-алиасинга при совместном использовании устройств):

    streamlit run app.py --server.address 0.0.0.0 --server.port 8080

    Примечания: Можно использовать и стандартный порт 8501, но 8080 часто оказывается более «дружелюбным». Не закрывайте терминал, пока приложение должно работать.

    3. Приглашение коллеги и совместный доступ к устройству

    В админ-панели Tailscale. Перейдите в UsersInvite user → введите почту коллеги. Коллега должен принять приглашение и войти в систему. Далее перейдите в Machines/Devices → выберите свой ноутбук → нажмите Share… (или «Device sharing»). Введите почту коллеги и отправьте запрос; коллега должен подтвердить доступ.

    4. Установка и вход в Tailscale (настройка у коллеги)

    Коллега устанавливает Tailscale и заходит под приглашенным email. В интерфейсе Tailscale у коллеги ваш ноутбук поя��ится как «общее устройство» (shared device). Обычно в его сети отобразится другой IP-адрес из диапазона 100.x (не тот, что видите вы), например: 100.89.107.55.

    5. Коллега открывает URL в браузере

    Коллега должен использовать тот IP, который отображается на его стороне, и выбранный вами порт: http://100.89.107.55:8080

Код и более подробное описание: https://github.com/yuliadm/q-scribe