РУКОВОДСТВО

Бесплатный API озвучки текста: без ключа, без квоты, на своём сервере

Большинство API синтеза речи бесплатны лишь до поры: регистрация, API-ключ, бесплатный тариф с месячной квотой и ограничением запросов, а дальше счёт за каждый символ. Для прототипа это нормально, а для приложения, которое много говорит, бота или конвейера, озвучивающего тысячи фраз, — больно.

SuperClonica идёт другим путём: сервер речи — бесплатный Docker-образ, который вы запускаете на своём компьютере или сервере. Никакого ключа запрашивать не нужно и квоты нет, есть только ваше железо. В этом руководстве — как его запустить, как обращаться из curl, Python и JavaScript и сколько «бесплатно» стоит на самом деле.

Бесплатные тарифы и их ограничения

Актуальные условия облачных поставщиков проверяйте сами: бесплатные тарифы и цены меняются.

  • Бесплатные облачные тарифы обычно требуют аккаунт и API-ключ и ограничены месячной квотой символов и частотой запросов.
  • С каждым запросом ваш текст уходит к поставщику.
  • Собственному серверу не нужны ни ключ, ни аккаунт, и квоты у него нет.
  • Сервер SuperClonica говорит на 31 языке, у него десять бесплатных стандартных голосов и больше 170 голосов каталога.

Послушайте голоса бесплатно онлайн

На странице любого голоса впишите фразу от 30 до 100 символов, выберите язык и нажмите «Озвучить». Через несколько секунд вы услышите то, что вернёт API, без регистрации.

Запустите API и обратитесь к нему

Ответ — 16-битный моно WAV; заголовки X-Sample-Rate и X-Duration-Seconds описывают его, а GET /voices перечисляет голоса и языки.

  • Запустите сервер: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. При первом запуске скачивается модель, около 385 МБ.
  • Обратитесь через curl: curl -X POST http://localhost:8000/synthesize -H "Content-Type: application/json" -d '{"text": "Hello from a free API!", "voice": "F1", "lang": "en"}' -o hello.wav
  • Из Python без дополнительных пакетов: import json, urllib.request; req = urllib.request.Request('http://localhost:8000/synthesize', data=json.dumps({'text': 'Hello', 'voice': 'F1', 'lang': 'en'}).encode(), headers={'Content-Type': 'application/json'}); open('hello.wav', 'wb').write(urllib.request.urlopen(req).read())
  • Из JavaScript или Node.js: const r = await fetch('http://localhost:8000/synthesize', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({text: 'Hello', voice: 'F1', lang: 'en'})}); const wav = await r.arrayBuffer();

Ключи, лимиты и масштабирование

На своей машине ключ не нужен. Если сервер доступен из сети, задайте SUPERCLONICA_API_KEY и передавайте заголовок Authorization: Bearer с этим ключом либо держите сервер закрытым. По умолчанию запрос принимает до 5000 символов, это меняет SUPERCLONICA_MAX_TEXT, а SUPERCLONICA_LANES позволяет выполнять несколько запросов одновременно. Прежде чем открывать сервер наружу, поставьте перед ним HTTPS через любой обратный прокси.

Сколько стоит «бесплатно»

Программы бесплатны: движок и образ — под Apache 2.0, модель Supertonic 3 — под OpenRAIL-M, которая разрешает коммерческое использование в рамках ограничений. Платите вы за машину: процессор справляется с короткой фразой гораздо быстрее секунды, видеокарта быстрее, когда пользователей много. Голоса каталога покупаются один раз, десять стандартных голосов ничего не стоят.