Q-scribe (Quick Transcription) появился как быстрый, независимый и легковесный конвейер «приемлемого качества» для расшифровки видеозаписей встреч. Полученный текст можно использовать для создания протоколов, кратких сводок или дальнейшей обработки.
Условия, с которыми мы столкнулись, были простыми и вполне реальными:
Мы — небольшая удаленная команда из двух человек.
Мы не хотим платить за облачные подписки для транскрибации.
Мы не хотим сливать аудио встреч на внешние сервера.
У одного из нас (у меня) имеется ноутбук с NVIDIA GeForce RTX 4080.
Я нахожусь в России, что накладывает ограничения на пользование многими сервисами.
В итоге мы собрали компактное прагматичное решение: локальное Python-приложение, которое запускает модель OpenAI Whisper на моей машине. Коллега использует временное хост-соединение, чтобы зайти в интерфейс, загрузить файл, нажать «Транскрибировать» и скачать результат — и всё это не выходя из браузера.
Никакого «пинг-понга» файлами. Никаких счетов за облака. Никакой утечки данных. Никаких геоблокировок.
«Быстрое и грязное» решение, которое на удивление полезно
Этот подход не заменит корпоративные платформы вроде Otter.ai, Fireflies.ai, Google Speech-to-Text или Zoom AI Companion. Но для маленьких команд и частных лиц он попадает в «золотую середину»:
Бесплатная эксплуатация (если у вас уже есть железо).
Локальный хостинг.
Работает всего на нескольких Python-библиотеках.
Данные и весь процесс под вашим полным контролем.
Можно запускать откуда угодно (без привязки к локациям и блокировкам).
Обзор приложения: крошечный UI, который работает
Фронтенд намеренно минималистичен: он разработан с помощью Streamlit, так как этот Python-фреймворк позволяет создать веб-интерфейс без разработки «настоящего» веб-приложения. Интерфейс состоит всего из трёх кнопок:
Upload: выбор видео- или аудиофайла.
Transcribe: запуск модели.
Download: получение расшифровки в формате .txt.
Дополнительный функционал (не обязательно, но удобно):
Выбор размера модели Whisper (small/medium/large).
Выбор языка (ru/en/de/fr/es).
Настройка длины фрагментов (chunks) для стабильности и производительности.
Регулировка Beam search (баланс качества и скорости).
Очистка кэша CUDA, чтобы избежать переполнения памяти GPU.

Устройство бэкенда
Конвейер состоит из четырех основных блоков:
Видео → Аудио → Фрагменты. Чтобы не «скармливать» модели один огромный аудиофайл, приложение: (i) извлекает звук с помощью pydub (используя ffmpeg), (ii) делит его на фрагменты (обычно по 10–30 секунд), (iii) сохраняет их как WAV-файлы. Нарезка повышает надежность, предотвращает скачки по��ребления памяти и позволяет видеть прогресс.
OpenAI Whisper. Whisper — это «движок» транскрибации. Мы загружаем одну из доступных моделей c Hugging Face:
openai/whisper-small,openai/whisper-mediumилиopenai/whisper-large-v3. Модель скачивается один раз и кэшируется локально, после чего работает полностью на вашем ПК. Whisper мультиязычен (в частности, поддерживается русский), так что языки можно переключать.Интерфейс Streamlit. Обеспечивает удобство в стиле «загрузил / расшифровал / скачал». Также позволяет легко выводить индикаторы выполнения (progress bars) задачи.
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. Перейдите в Users → Invite 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
