YandexGPT помог одному разработчику собрать сервис для видео
Разработчик в одиночку сделал postvid.ru — сервис, который принимает ссылку на видео или файл и возвращает расшифровку, тезисы, таблицу, презентацию и карточки для соцсетей. По пути ему пришлось решить не только задачу с ИИ, но и вопросы отказоустойчивости, защиты ссылок и безопасных платежей.
Что умеет сервис и на чём он собран
Идея появилась из очень бытовой потребности: автору надоело вручную пересматривать видео, чтобы выписывать из них основные мысли. Из этой личной задачи вырос сервис postvid.ru, который берёт на вход ссылку или загруженный файл, а на выходе отдаёт расшифровку, тезисы, таблицу, презентацию, карточки для карусели и даже субтитры.
Технически проект собран без лишней экзотики. За веб-часть отвечает FastAPI, распознавание речи делает faster-whisper с моделью small — она выбрана потому, что сервер работает без GPU, а более тяжёлая версия на CPU была бы слишком медленной. Для извлечения тезисов используется YandexGPT или любой другой OpenAI-совместимый API, а если облачный вариант недоступен, включается локальная модель через Ollama или офлайн-алгоритм без нейросети. Для таблиц и презентаций автор использовал openpyxl и python-pptx, для картинок — Pillow, а для аккаунтов, сессий, подписок и платежей — SQLite.
Почему у проекта оказалось сразу несколько запасных вариантов
Главная проблема в таких сервисах — не только качество результата, но и стабильность. В первой версии всё завязали на облачную LLM напрямую, и одна краткая недоступность модели ночью сразу сделала сервис бесполезным для пользователей. После этого в схему добавили резервные сценарии: если облако не отвечает, запрос уходит в локальную модель, а если и она недоступна, система переключается на простой офлайн-метод, который разбивает текст на предложения и выбирает наиболее важные по эвристикам.
Чтобы не тратить время на заведомо провальные попытки, автор добавил кулдаун: если основной сервис упал, следующие задачи в ближайшую минуту сразу отправляются в запасной режим. На странице результата также показывается, какой движок сработал — cloud, local или offline. Это помогает пользователю понять, почему итог мог получиться чуть менее точным, и снижает раздражение от «магии», когда всё вроде бы работает, но непонятно как.
Безопасность, домены и платежи без лишнего риска
Отдельно пришлось продумать защиту при скачивании видео по ссылке. Сервис проверяет, что можно использовать только http или https, и не даёт обращаться к внутренним адресам сервера, чтобы не подставиться под SSRF-атаки. При необходимости можно ещё и ограничить список разрешённых доменов через белый список.
Похожая осторожность понадобилась и на уровне доменов. Если сайт запускается сразу под несколькими адресами, Caddy настраивается так, чтобы одни домены делали полную копию сайта с canonical и noindex, а другие просто перенаправляли на основной адрес через 301. Также были добавлены проверки заголовка Host, чтобы нельзя было подменить адрес и увести ссылки на вход или оплату на чужой домен.
С платежами автор тоже не стал полагаться только на вебхуки ЮKassa: перед выдачей тарифа система дополнительно сверяет сумму и статус через API. Для автопродления запущен отдельный воркер, который проверяет сроки раз в 10 минут, а если банк три раза подряд отклоняет списание, продление тихо отключается. Сейчас очередь задач и их статусы хранятся в памяти процесса: это удобно на старте, но при росте нагрузки автор уже понимает, что позже придётся вынести их во внешнюю очередь.