Skip to main content

polza-stt

Транскрибация длинного аудио через Polza.ai — с терминальным интерфейсом, выбором модели по цене и подсчётом того, сколько это стоило.

Файл режется ffmpeg на куски по 5 минут, все куски уходят в API одновременно (asyncio + httpx, без потоков), результат склеивается в один текстовый файл, временные нарезки удаляются.

Неофициальный клиент. Проект не связан с Polza.ai, нужен свой API-ключ.

Возможности

  • Параллельно — все куски в сети одновременно, длинная лекция обрабатывается за время одного куска.
  • Выбор файла стрелками — список аудио в каталоге с размерами и длительностью, плюс системный диалог (tkinter, с запасными zenity/kdialog) и ручной ввод пути.
  • Выбор модели с ценами — таблица STT-моделей из API: рублей за минуту и сколько выйдет именно этот файл.
  • Деньги на виду — оценка до запуска, факт после: сумма из usage API, а если провайдер её не вернул — тариф × фактически отправленная длительность.
  • Живой прогресс — статус каждого куска, счётчик слов, повторы при сбоях, общий прогресс-бар.
  • Ошибка куска не рушит прогон — остальной текст сохраняется, упавшие перечисляются, код возврата 2.

Установка

Нужен ffmpeg в PATH (apt install ffmpeg, brew install ffmpeg, winget install Gyan.FFmpeg).

uv tool install polza-stt      # или: pipx install polza-stt

Разовый запуск без установки:

uvx polza-stt

Настройка

При первом запуске утилита спросит только API-ключ и сохранит его в одно постоянное место, не зависящее от текущего каталога:

ОС Путь
Linux ~/.config/polza-stt/config.env (или $XDG_CONFIG_HOME)
macOS ~/Library/Application Support/polza-stt/config.env
Windows %APPDATA%\polza-stt\config.env

Права на файл — 600. Посмотреть путь: polza-stt --config-path. Переопределить глобально: переменная POLZA_STT_CONFIG, разово — флаг --config путь. Если в текущем каталоге лежит готовый ./.env, при первом запуске он автоматически переедет в постоянное хранилище.

Формат простой:

BASE_URL=https://polza.ai/api/v2
TOKEN=ваш_ключ
MODEL=ai-sage/gigaam-v3

BASE_URL подставляется сам (https://polza.ai/api/v2) — менять его нужно, только если Polza сменит адрес или вы работаете через свой прокси; тогда просто поправьте строку в файле.

MODEL заполнять не нужно: строка появляется сама и обновляется на ту модель, которой вы транскрибировали в последний раз. В меню выбора эта модель помечена и стоит под курсором, так что повторный запуск — это просто два Enter.

Те же значения можно передать переменными окружения BASE_URL / TOKEN / MODEL (или POLZA_BASE_URL и т.д.). Перенастроить: polza-stt --reconfigure.

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

polza-stt                                  # выбрать файл и модель в интерфейсе
polza-stt lecture.mp3                       # файл задан, модель выбрать в UI
polza-stt lecture.mp3 -y                    # без вопросов, модель из конфига
polza-stt lecture.mp3 -y --model openai/whisper-large-v3-turbo -o out.txt

Клавиши в меню: /j/k) — выбор, Enter — подтвердить, цифры — быстрый прыжок, q/Esc — выход.

Аргументы

Аргумент Значение
audio путь к файлу; без него — выбор в интерфейсе
-o, --output куда писать текст (по умолчанию <audio>.txt)
--chunk длина куска в секундах (по умолчанию 300)
--jobs ограничение одновременных запросов (0 — авто, не более 16)
--language ISO-639-1 (ru, en, …) или auto — определить самому (по умолчанию)
--model ID модели, пропускает выбор
--config путь к конфигу (синоним --env)
--config-path показать путь к конфигу и выйти
--dir каталог для выбора файла
--reconfigure перезаписать конфиг
-y, --yes без подтверждения и без выбора модели

Коды возврата: 0 — успех, 1 — ошибка запуска (нет ffmpeg, нет файла, нет конфига), 2 — часть кусков не транскрибировалась.

Как считается стоимость

Цены берутся из GET {base_url}/models — поле stt_per_minute у моделей с type: stt, в рублях. Оценка до запуска = длительность × тариф. После прогона, если API вернул usage.cost_rub, показывается его сумма («по данным API»), иначе считается по тарифу и фактической длительности отправленных кусков. Если /models недоступен, берётся небольшой встроенный список моделей.

Технические детали

  • Куски перекодируются в mono MP3 16 кГц / 64 кбит/с — пятиминутный фрагмент весит ~2.5 МБ и после base64 укладывается в лимит тела запроса (~15 МБ).
  • Порядок текста сохраняется по индексу куска независимо от порядка ответов.
  • Три попытки на кусок с паузами 2 и 4 секунды.
  • Временный каталог удаляется в finally — промежуточные тексты на диск не пишутся вообще.
  • Одновременно в полёте держится не более 16 запросов: каждый несёт ~3 МБ base64, и без потолка десятичасовой файл (120 кусков) занял бы под гигабайт памяти. Сами тексты крошечные — 10 часов речи это ~0.5 МБ. Потолок меняется флагом --jobs.
  • Нарезки на диске: ~29 МБ на час аудио (моно MP3 64 кбит/с), для 10 часов ~290 МБ во временном каталоге на время работы.

Лицензия

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polza_stt-0.3.0.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

polza_stt-0.3.0-py3-none-any.whl (22.9 kB view details)

Uploaded Python 3

File details

Details for the file polza_stt-0.3.0.tar.gz.

File metadata

  • Download URL: polza_stt-0.3.0.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.11

File hashes

Hashes for polza_stt-0.3.0.tar.gz
Algorithm Hash digest
SHA256 3b013d73f9177cc0d03a8221e5611e296afb9a1e513528a1ff5d9b2a279f566a
MD5 c81cd9a0b5ab7f5ff5f652085015e7d6
BLAKE2b-256 6c18ed51855ec7efdbd44cc1cee90a39da5796d31e26897d4abaeb839ff0e4e4

See more details on using hashes here.

File details

Details for the file polza_stt-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: polza_stt-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 22.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.11

File hashes

Hashes for polza_stt-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fb3bbd2ad229f1fcf8b49a8d870fe5873ccb6d70bf972c32d9b8241a3054af4a
MD5 0a8c2934a01db3b3d67976f5f79fefd5
BLAKE2b-256 dfab0f38fa0ac5d3a70c5de9ba62ca0fa9d373a707a4c89ee8659c3a437bc0bb

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page