Как я собрал TTS-приложение с Claude Code
Разбираем, как с помощью Claude Code создать приложение, превращающее PDF, блог-посты, ссылки Substack и даже фото текста в качественное аудио.
Зачем вообще конвертировать текст в аудио?
Представьте: у вас накопилось 40 непрочитанных статей в Pocket, три PDF-отчёта и пять рассылок из Substack. Читать всё это — несколько часов. А что, если запустить это фоном во время пробежки или поездки в метро?
Именно с такой болью пришёл автор одного из самых обсуждаемых постов на Reddit-сообществе r/ClaudeAI: он построил приложение, которое принимает на вход что угодно текстовое — от ссылки на Medium до фотографии страницы книги — и выдаёт качественный аудиофайл. Весь процесс сборки занял несколько часов благодаря Claude Code. Разберём, как это работает, что внутри, и как повторить самому.
Архитектура приложения: что происходит под капотом
Логика приложения состоит из нескольких последовательных шагов. Сначала нужно извлечь текст из источника (каким бы он ни был), затем очистить и подготовить его для синтеза речи, и наконец — передать в 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)
- Нормализовать числа и даты
Выбор 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 или рассылку в аудио-версию, выбрав голос из библиотеки.
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 снижает порог входа в разработку до уровня, когда любой технически грамотный человек может собрать полезный инструмент за несколько часов.
Ключевые выводы:
- Архитектура проста: парсер источника → очистка текста → TTS API → MP3.
- Самое сложное — универсальный парсинг (PDF, URL, OCR). Именно здесь Claude Code экономит максимум времени.
- Выбор TTS зависит от бюджета: для максимального качества — ElevenLabs, для бесплатного локального решения — Kokoro.
- Claude Code Skills позволяют превратить разовый скрипт в постоянно доступный инструмент.
- Практическая ценность огромна: экономия времени на чтении, доступность, мультитаскинг.
Попробуйте начать с малого — скрипта на 50 строк Python, который берёт URL и возвращает MP3. Движение vibe coding построено на одной идее: описывай что хочешь на естественном языке, и пусть AI это построит. Но большинство разработчиков всё ещё печатают свои промпты — что медленно, утомительно и прерывает творческий поток. Claude Code меняет это. Ваш первый TTS-конвертер может быть готов быстрее, чем вы думаете.