Кампания
549 файлов
548 файлов соответствовали актуальным материалам сайта; один исторический вариант был корректно исключён.
Аудиоверсии сайта раньше создавал платный API Яндекса. Каждый новый материал означал внешний вызов, расходы и зависимость от чужой инфраструктуры. Задача была не просто поставить локальную модель, а заменить штатный маршрут без риска для уже работающего сайта.
На Mac mini развернули OmniVoice, создали голосовой профильsergey-v1 и собрали производственный контур с очередью, проверкой качества, наблюдением и аварийным резервом. Codex помог провести систему от первого образца до массовой публикации и внешней проверки.

549 файлов
548 файлов соответствовали актуальным материалам сайта; один исторический вариант был корректно исключён.
28,6 часа
102 972 секунды аудио общим объёмом около 824 МБ.
548 из 548
Все актуальные материалы получили правильный новый адрес аудио; ошибок в финальной проверке не было.

Архитектура
Локальная машина не получила доступ к Directus и ключам Яндекса. Она видит только защищённую SFTP-очередь, забирает одно задание, создаёт аудио и возвращает результат. Координатор на VPS проверяет актуальность, публикует файл и пересобирает сайт.
sergey-v1.Качество
Синтезатор может выдать нормальный по длительности и размеру файл, но проглотить слово или повторить фрагмент. Поэтому контроль построили вокруг содержания, а не только вокруг технических параметров.

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

Безопасная миграция
Массовый проход не менял Directus, публичные адреса и текущие аудиоверсии. Все файлы сначала создавались в режиме предварительной генерации, а публикация началась только после полной сверки.
Новая коллекция не влияла на пользователей, пока генерация, распознавание и контрольные проверки не завершились.
Идентификатор, хеш текста и версия маршрутизации дали 548 точных совпадений, один исторический вариант и ни одного пропуска.
Только после сверки система обновила 548 материалов, пересобрала сайт и прочитала результат обратно.
Файлы Яндекса не удаляли: они сохранились как вариант отката и временный маршрут при недоступности Mac mini.
Надёжность
За 76,75 часа кампания встретилась с гонкой при записи состояния, истёкшим токеном, ростом служебных каталогов, заполнением диска и отключением электричества. Каждый сбой превратился в проверяемое ограничение системы.
Гонка вокруг .worker-state.json.tmp перезапускала LaunchAgent. Запись исправили и отдельно проверили восстановление процесса.
Перед удалением повторных проходов проверили 3422 отчёта и убедились, что загрузок и записей в Directus не происходило.
Вместо примерно 8,7 МБ служебных данных каждые пять минут координатор теперь сохраняет компактное резюме.
После возвращения электричества LaunchAgent поднялся, прочитал сохранённое состояние и продолжил работу.

Роль Codex
Работа не свелась к генерации кода. Codex помог проектировать очередь, сверять хеши и состояния, разбирать журналы VPS и Mac mini, собирать тесты, готовить откат и проверять уже опубликованный результат.
Финальный набор дал 313 из 313 успешных тестов, а локальная сборка Astro создала 65 страниц.
Контрольное задание получило статус mac_published, страница вернула 200, а аудиофайл корректно ответил на запрос фрагмента.
Результат
Mac mini с 48 ГБ памяти теперь ежедневно создаёт штатный голос сайта. Основной маршрут работает через OmniVoice, а Яндекс включается только как аварийный резерв, если локальный обработчик давно не подавал контрольный сигнал или задание вышло за срок.

У неё есть очередь, ограниченная зона доступа, проверка качества, наблюдение, восстановление и понятное право публикации.
Внешний TTS больше не нужен для каждого материала, но сохранён как осознанная страховка, а не удалён ради красивой схемы.
Предварительная генерация, сверка хешей, отдельный gate публикации и обратное чтение результата защитили сайт во время миграции.
Проект подтвердил, что один измеримый ИИ-процесс можно перенести на собственное железо и оставить управляемым в ежедневной эксплуатации.
В статье есть архитектура очереди, параметры голоса, двухступенчатая проверка, инциденты большой кампании, безопасная публикация и выводы после переноса первого процесса на собственное железо.
Как мы с Codex развернули OmniVoice на Mac mini, клонировали мой голос, проверили 549 аудиофайлов и заменили платный API Яндекса.
Спасибо, что дочитали. Если хотите применить прочитанное к своей задаче, приходите обсудить её со мной. Для регулярной практики, общения и вебинаров есть Перезагрузка.
