pimenov.ai
Кейс / Локальный голосовой контур

Как Mac mini стал голосом всего pimenov.ai

Аудиоверсии сайта раньше создавал платный API Яндекса. Каждый новый материал означал внешний вызов, расходы и зависимость от чужой инфраструктуры. Задача была не просто поставить локальную модель, а заменить штатный маршрут без риска для уже работающего сайта.

На Mac mini развернули OmniVoice, создали голосовой профиль sergey-v1 и собрали производственный контур с очередью, проверкой качества, наблюдением и аварийным резервом. Codex помог провести систему от первого образца до массовой публикации и внешней проверки.

Кампания

549 файлов

548 файлов соответствовали актуальным материалам сайта; один исторический вариант был корректно исключён.

Готовый звук

28,6 часа

102 972 секунды аудио общим объёмом около 824 МБ.

Контроль

548 из 548

Все актуальные материалы получили правильный новый адрес аудио; ошибок в финальной проверке не было.

Иллюстрация из статьи с результатами массовой генерации аудио OmniVoice для pimenov.ai

Архитектура

Mac mini генерирует звук, а право публикации остаётся у VPS

Локальная машина не получила доступ к Directus и ключам Яндекса. Она видит только защищённую SFTP-очередь, забирает одно задание, создаёт аудио и возвращает результат. Координатор на VPS проверяет актуальность, публикует файл и пересобирает сайт.

  1. VPS сверяет материалы и создаёт задание с текстом, идентификатором и контрольными хешами.
  2. Mac mini забирает одно задание и запускает OmniVoice с профилем sergey-v1.
  3. Готовый MP3 проходит распознавание, техническую проверку и сверку с исходным текстом.
  4. VPS публикует неизменяемый файл, обновляет материал, пересобирает сайт и проверяет результат снаружи.

Качество

Технически исправного MP3 недостаточно: система должна услышать пропущенные слова

Синтезатор может выдать нормальный по длительности и размеру файл, но проглотить слово или повторить фрагмент. Поэтому контроль построили вокруг содержания, а не только вокруг технических параметров.

GigaSTT проверяет обычный поток

Распознанный текст сравнивается с исходным сценарием: система ищет смысловые расхождения, пропуски и подозрительные фрагменты.

Whisper разбирает спорные случаи

Когда 22 нормальных файла получили тревогу GigaSTT выше 30%, whisper.cpp с large-v3-turbo подтвердил их качество без лишней перегенерации.

Неуверенность не маскируется

Если два независимых распознавателя не дают уверенности, результат остаётся на ручной проверке.

Иллюстрация из статьи к двухступенчатой проверке аудиофайлов через GigaSTT и whisper.cpp

Безопасная миграция

Сначала вся коллекция росла отдельно от публичного сайта

Массовый проход не менял Directus, публичные адреса и текущие аудиоверсии. Все файлы сначала создавались в режиме предварительной генерации, а публикация началась только после полной сверки.

Сайт продолжал работать на старом аудио

Новая коллекция не влияла на пользователей, пока генерация, распознавание и контрольные проверки не завершились.

Каждый файл сверили с актуальным материалом

Идентификатор, хеш текста и версия маршрутизации дали 548 точных совпадений, один исторический вариант и ни одного пропуска.

Публикация получила отдельный gate

Только после сверки система обновила 548 материалов, пересобрала сайт и прочитала результат обратно.

Старый провайдер остался страховкой

Файлы Яндекса не удаляли: они сохранились как вариант отката и временный маршрут при недоступности Mac mini.

Надёжность

Большая очередь проверила не только голос, но и весь операционный контур

За 76,75 часа кампания встретилась с гонкой при записи состояния, истёкшим токеном, ростом служебных каталогов, заполнением диска и отключением электричества. Каждый сбой превратился в проверяемое ограничение системы.

Состояние стало атомарным

Гонка вокруг .worker-state.json.tmp перезапускала LaunchAgent. Запись исправили и отдельно проверили восстановление процесса.

Очистка началась с доказательств

Перед удалением повторных проходов проверили 3422 отчёта и убедились, что загрузок и записей в Directus не происходило.

Пустой цикл перестал раздувать диск

Вместо примерно 8,7 МБ служебных данных каждые пять минут координатор теперь сохраняет компактное резюме.

Очередь пережила отключение питания

После возвращения электричества LaunchAgent поднялся, прочитал сохранённое состояние и продолжил работу.

Иллюстрация из статьи к производственному контуру публикации аудио pimenov.ai

Роль Codex

Codex держал весь маршрут — от архитектуры до внешней проверки

Работа не свелась к генерации кода. Codex помог проектировать очередь, сверять хеши и состояния, разбирать журналы VPS и Mac mini, собирать тесты, готовить откат и проверять уже опубликованный результат.

Каждое исправление проходило узкую проверку

Финальный набор дал 313 из 313 успешных тестов, а локальная сборка Astro создала 65 страниц.

Проверка дошла до пользовательского контура

Контрольное задание получило статус mac_published, страница вернула 200, а аудиофайл корректно ответил на запрос фрагмента.

Результат

Первый платный внешний процесс переехал на собственное железо

Mac mini с 48 ГБ памяти теперь ежедневно создаёт штатный голос сайта. Основной маршрут работает через OmniVoice, а Яндекс включается только как аварийный резерв, если локальный обработчик давно не подавал контрольный сигнал или задание вышло за срок.

Локальная модель стала производственным сервисом

У неё есть очередь, ограниченная зона доступа, проверка качества, наблюдение, восстановление и понятное право публикации.

Зависимость стала управляемой

Внешний TTS больше не нужен для каждого материала, но сохранён как осознанная страховка, а не удалён ради красивой схемы.

Массовая замена не стала прыжком веры

Предварительная генерация, сверка хешей, отдельный gate публикации и обратное чтение результата защитили сайт во время миграции.

Домашний узел получил первую постоянную работу

Проект подтвердил, что один измеримый ИИ-процесс можно перенести на собственное железо и оставить управляемым в ежедневной эксплуатации.

Источник

Полная история описана в статье про Mac mini и OmniVoice

В статье есть архитектура очереди, параметры голоса, двухступенчатая проверка, инциденты большой кампании, безопасная публикация и выводы после переноса первого процесса на собственное железо.