Зачем вообще конвертировать текст в аудио?

Представьте: у вас накопилось 40 непрочитанных статей в Pocket, три PDF-отчёта и пять рассылок из Substack. Читать всё это — несколько часов. А что, если запустить это фоном во время пробежки или поездки в метро?

Именно с такой болью пришёл автор одного из самых обсуждаемых постов на Reddit-сообществе r/ClaudeAI: он построил приложение, которое принимает на вход что угодно текстовое — от ссылки на Medium до фотографии страницы книги — и выдаёт качественный аудиофайл. Весь процесс сборки занял несколько часов благодаря Claude Code. Разберём, как это работает, что внутри, и как повторить самому.

ℹ Что такое Claude Code?
Claude Code — это AI-агент от Anthropic для разработки прямо в терминале. Он читает файлы, пишет и запускает код, исправляет ошибки и итерирует — без ручного копипаста между чатом и редактором. Подходит для “vibe coding”: описываешь задачу словами, Claude строит решение.

Архитектура приложения: что происходит под капотом

Логика приложения состоит из нескольких последовательных шагов. Сначала нужно извлечь текст из источника (каким бы он ни был), затем очистить и подготовить его для синтеза речи, и наконец — передать в TTS-движок и сохранить аудиофайл.


graph TD
    A[Источник входных данных] --> B{Тип источника?}
    B -->|PDF-файл| C[PyMuPDF / pdfplumber]
    B -->|URL блога / Medium / Substack| D[Web Scraper + Readability]
    B -->|Фото или скан текста| E[OCR — Tesseract / Vision API]
    B -->|Обычный текст| F[Прямая передача]
    C --> G[Очистка текста]
    D --> G
    E --> G
    F --> G
    G --> H[Разбивка на чанки]
    H --> I[TTS API — ElevenLabs / OpenAI]
    I --> J[Сборка аудиофайла MP3/WAV]
    J --> K[Готово: слушай!]

Извлечение текста из разных источников

Главная сложность задачи — не синтез речи (с этим сегодня справляются десятки API), а универсальный парсинг входных данных.

PDF-файлы обрабатываются библиотеками типа pdfplumber или PyMuPDF. Они умеют извлекать текст из большинства PDF, включая многоколоночные документы. Проблема возникает со сканами — там нужен OCR.

Ссылки на блог-посты, Substack и Medium требуют веб-скрейпинга. Здесь Claude Code генерирует код на базе requests + BeautifulSoup или более мощного trafilatura, который специализируется на извлечении «основного контента» страницы, отбрасывая навигацию, рекламу и футеры.

Фотографии и сканы — самый интересный случай. С помощью OCR Claude может вытащить текст из любого изображения. Для этого используется либо классический Tesseract (бесплатно, работает локально), либо более точные облачные Vision API от Google или OpenAI.

# Пример: извлечение текста из фото с помощью pytesseract
import pytesseract
from PIL import Image

def extract_text_from_image(image_path: str) -> str:
    img = Image.open(image_path)
    text = pytesseract.image_to_string(img, lang='rus+eng')
    return text.strip()

# Пример: извлечение текста из URL
import trafilatura

def extract_text_from_url(url: str) -> str:
    downloaded = trafilatura.fetch_url(url)
    text = trafilatura.extract(downloaded)
    return text or ""

Подготовка текста к озвучке

Сырой текст нельзя просто засунуть в TTS-движок — результат будет ужасным. Текст проходит через конвейер очистки перед передачей в TTS-движок: стрелки, операторы и markdown-разметка конвертируются в естественную речь. Это удивительно большой объём обработки для задачи, которая «просто читает текст вслух», но разница между сырым и обработанным выводом — огромная.

Вот что нужно обработать минимально:

  • Убрать Markdown-разметку (**, ##, --- и т.д.)
  • Превратить аббревиатуры в слова (PDF → «пи-ди-эф», URL → «у-эр-эл»)
  • Разбить текст на чанки по 4 000–5 000 символов (лимиты API)
  • Нормализовать числа и даты
💡 Совет по разбивке текста
Разбивайте текст по абзацам, а не по фиксированному числу символов. Это даёт более естественные паузы в речи и избавляет от проблемы, когда слово разрезается посередине между двумя запросами к API.

Выбор TTS-движка: сравнение вариантов

От выбора синтезатора речи напрямую зависит качество результата. Вот основные варианты:

ДвижокКачествоЦенаЛокально?Лимиты
ElevenLabs⭐⭐⭐⭐⭐$5–$22+/мес$5/мес — только 30К символов; план $22/мес — 100К символов
OpenAI TTS⭐⭐⭐⭐~$15/1M симвПо символам
Google WaveNet⭐⭐⭐⭐$16/1M симвПо символам
Kokoro (локальный)⭐⭐⭐⭐БесплатноНет
Edge TTS (Microsoft)⭐⭐⭐БесплатноНеофициально

Kokoro — небольшая нейросетевая TTS-модель (82M параметров), которая работает полностью на вашей машине. После ~10-секундного холодного старта каждое высказывание синтезируется менее чем за 50 миллисекунд, и речь остаётся синхронизированной с происходящим.

Облачный TTS тарифицируется за символы, и интенсивная сессия генерирует очень много текста — тогда как Kokoro работает локально и не стоит ничего: ноль API-ключей, ноль биллинг-дашбордов, ноль неожиданных счетов.

Для продакшн-приложения с высоким качеством голоса лучший выбор — ElevenLabs. С помощью ElevenReader можно мгновенно конвертировать любую книгу в аудиокнигу и любой PDF или рассылку в аудио-версию, выбрав голос из библиотеки.

📝 Пример кода: вызов OpenAI TTS
from openai import OpenAI
import os

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

def text_to_audio(text: str, output_path: str, voice: str = "nova") -> None:
    response = client.audio.speech.create(
        model="tts-1-hd",
        voice=voice,  # alloy, echo, fable, onyx, nova, shimmer
        input=text
    )
    response.stream_to_file(output_path)

# Использование
text_to_audio("Привет, это тест!", "output.mp3", voice="nova")

Роль Claude Code в сборке: vibe coding в действии

Vibe coding — это про состояние потока: описываешь что хочешь и позволяешь AI строить это. Но ввод детальных промптов прерывает этот поток. Claude Code решает проблему иначе — он работает агентом в терминале, итеративно строя всё приложение.

Вот как выглядит типичный диалог при создании подобного приложения:

Пользователь: Создай Python-скрипт, который принимает на вход URL
или путь к PDF, извлекает текст, очищает его от markdown и
передаёт в OpenAI TTS API по чанкам 4000 символов. 
Выходной файл — MP3.

Claude Code: [Пишет requirements.txt, main.py, utils.py,
запускает pip install, тестирует на примере, исправляет ошибки,
добавляет обработку исключений...]

Claude Code Skills работают иначе, чем обычный чат с ИИ. Навык — это папка со специальным файлом SKILL.md, который учит Claude как выполнять категорию работы: не только что делать один раз, но паттерны, крайние случаи, точные инструменты и команды, и когда применять каждый подход.

Для нашего TTS-приложения можно создать такой SKILL.md:

# TTS Converter Skill

## Задача
Конвертация любого текстового источника в MP3-аудио.

## Поддерживаемые источники
- PDF (pdfplumber)
- URL (trafilatura)
- Изображения (pytesseract)
- Сырой текст

## TTS-движок
OpenAI TTS API, модель tts-1-hd, голос по умолчанию — nova.
Чанки — 4000 символов по границам абзацев.

Claude Code автоматически обнаруживает навыки в папке ~/.claude/skills/. Никакой конфигурации не нужно — просто скопируй папку и начни общаться.

⚠ Важно: лимиты и авторские права
При скрейпинге сайтов проверяйте файл robots.txt и Terms of Service. Substack и Medium разрешают чтение публичных постов, но автоматическое массовое скачивание может нарушать их политику. Используйте официальные API там, где они доступны.

Практические применения и результаты

После сборки приложения открывается несколько практических сценариев:

«Входящий аудиопоток» — все новые подписки в Substack и RSS автоматически конвертируются в аудио и синхронизируются с телефоном. Утром получаете готовый «подкаст» из свежих материалов.

Аудиокниги из PDF — академические статьи, корпоративные отчёты, электронные книги без DRM становятся аудиофайлами для прослушивания в дороге. Инструменты подобного рода позволяют слушать книги, PDF и веб-страницы в любое время с естественными голосами.

OCR + TTS для бумажных документов — фотографируете страницу книги или распечатку, приложение распознаёт и озвучивает. Особенно полезно для людей с нарушениями зрения.

Доступность контента — озвучивание является базовой функцией доступности, а людям с нарушениями зрения или с большим количеством времени на прослушивание не приходится использовать отдельный скринридер.

Главный инсайт проекта: 80% сложности не в синтезе речи, а в надёжном извлечении чистого текста из хаоса разных форматов. Решите эту задачу — и аудио станет просто финальным шагом.

Заключение: TTS-инструмент своими руками за вечер

История с Reddit наглядно демонстрирует главный тренд 2025–2026 годов: vibe coding с Claude Code снижает порог входа в разработку до уровня, когда любой технически грамотный человек может собрать полезный инструмент за несколько часов.

Ключевые выводы:

  1. Архитектура проста: парсер источника → очистка текста → TTS API → MP3.
  2. Самое сложное — универсальный парсинг (PDF, URL, OCR). Именно здесь Claude Code экономит максимум времени.
  3. Выбор TTS зависит от бюджета: для максимального качества — ElevenLabs, для бесплатного локального решения — Kokoro.
  4. Claude Code Skills позволяют превратить разовый скрипт в постоянно доступный инструмент.
  5. Практическая ценность огромна: экономия времени на чтении, доступность, мультитаскинг.

Попробуйте начать с малого — скрипта на 50 строк Python, который берёт URL и возвращает MP3. Движение vibe coding построено на одной идее: описывай что хочешь на естественном языке, и пусть AI это построит. Но большинство разработчиков всё ещё печатают свои промпты — что медленно, утомительно и прерывает творческий поток. Claude Code меняет это. Ваш первый TTS-конвертер может быть готов быстрее, чем вы думаете.