惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
DataBreaches.Net
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
F
Full Disclosure
V2EX - 技术
V2EX - 技术
N
News and Events Feed by Topic
Help Net Security
Help Net Security
L
LangChain Blog
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
B
Blog RSS Feed
N
Netflix TechBlog - Medium
N
News | PayPal Newsroom
TaoSecurity Blog
TaoSecurity Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Vulnerabilities – Threatpost
B
Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
AI
AI
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyberwarzone
Cyberwarzone
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
G
GRAHAM CLULEY
Vercel News
Vercel News
罗磊的独立博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
博客园 - 司徒正美
C
CERT Recently Published Vulnerability Notes
GbyAI
GbyAI
Scott Helme
Scott Helme
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
A
About on SuperTechFans
P
Privacy International News Feed

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как я за пять месяцев собрал Znich — ИИ-аналитику для авторов видео, в которой каждая фича родилась из боли
Alextos · 2026-05-02 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение11 мин

Охват и читатели12

Кейс

Как понять, почему один видос залетел, а другой нет?

Я задавал себе этот вопрос примерно полгода назад. Я маркетолог, и одна из задач, которую я регулярно решал, — понять, что именно делает у конкурента ролик с миллионом просмотров. YouTube Studio честно показывает цифры — удержание, источники трафика, CTR. Но цельного ответа в этих цифрах нет: его нужно собирать руками — что в ролике с этим CTR такого, чего нет у других, как это связано с обложкой, заголовком, первыми пятнадцатью секундами, ВИСП-структурой и тем, на какой ступеньке Лестницы Ханта стоит зритель.

Сначала я искал ответы у блогеров-продюсеров. Получались крупицы — отдельные правила, иногда противоречащие друг другу. Потом начал мучить нейронку. И вот тут оказалось интересно: на одной транскрипции LLM уже выдавала вменяемый разбор. А когда я добавил к ней компьютерное зрение — чтобы модель видела ещё и кадры обложки, и отдельные сцены, — разбор стал качественно другим. Она начала объяснять не только «о чём это видео», но и «как оно сделано».

В декабре 2025 года я собрал из этого Telegram-бота для себя. К концу января он вырос в публичный сервис znich.ru. К апрелю в нём четырнадцать модулей, и для каждой фичи у меня была конкретная причина её сделать — обычно очень бытовая, в духе «блин, неудобно». Расскажу по порядку.

Сразу одна оговорка. Я маркетолог, не разработчик. То, что я называю кодом, опытный человек назовёт вайбкодингом, и это будет справедливо. Поэтому в статье я не показываю, «как правильно» с архитектурной точки зрения. Здесь история другого жанра: что не получалось, во что я упирался, что переделывал.

Оглавление

1. Анализ видео — точка, с которой всё началось

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

Архитектурно это работает так. Через yt-dlp (без скачивания) забираем метаданные — просмотры, лайки, ER, возраст ролика. Скачиваем самый лёгкий вариант видео (worst[ext=mp4] хватает: нам нужны кадры, а не качество). Через OpenCV вытаскиваем четыре кадра в позициях 5%, 35%, 65% и 90% — старт, развитие, кульминация, концовка. Параллельно гоним аудио через Whisper. Vision LLM (через RouterAI) получает метаданные, транскрипт и четыре base64-кадра — на выходе структурированный HTML-отчёт.

Четыре кадра — эмпирический оптимум: меньше — модель не видит структуру, больше — растёт стоимость токенов без выигрыша.

Структура отчёта — самая ценная часть в этой главе. Я долго подбирал, чтобы он не был «10 советов», а отвечал ровно на три вопроса: почему это видео залетело, что мне учесть в своей работе, к чему это приведёт. Плюс маркетинговый разрез — Лестница Ханта, ВИСП, целевые действия, — плюс отдельный блок по обложке: тип, человек/эмоция, текст, цвета, композиция.

Пример отчета. https://app.znich.ru/share/ALeymy7AV_pCq1E0DWVBN_2vS3C6cgT5

Пример отчета. https://app.znich.ru/share/ALeymy7AV_pCq1E0DWVBN_2vS3C6cgT5

Самое неожиданное, что я обнаружил уже в процессе: ИИ замечает в обложках вещи, которые человек не вытаскивает на сознательный уровень. Например, что лицо в правом верхнем углу с эмоцией удивления статистически сильнее центрового портрета. Я знал эти эвристики и до того — но видеть, как модель регулярно выцепляет их из конкретного кадра без подсказки, было приятно.

2. Транскрибация и очередь к Whisper

Очень быстро стало понятно: для нормального анализа длинных видео LLM нужен текст. YouTube субтитры даёт нерегулярно, у TikTok и Reels их нет в принципе.

Сначала использовал OpenAI Whisper, но при переходе на единый API, перешёл на Groq Whisper-large-v3: часовое аудио он отрабатывает примерно за тридцать секунд. На этом моменте я понял, что хочу делать ещё и отдельный модуль «Транскрибация» — потому что иногда мне нужен был именно полный текст, а не разбор. Для коротких видео Znich отдаёт чистый транскрипт. Для длинных — структурированный конспект: краткая суть, ключевые моменты с таймкодами.

Пример отчета: https://app.znich.ru/share/mBcMAGGBbC_A9yT_8oCDCB1p1e-OsiPX

Пример отчета: https://app.znich.ru/share/mBcMAGGBbC_A9yT_8oCDCB1p1e-OsiPX

Здесь столкнулся с интересным моментом, о котором ранее не задумывался: у Groq есть лимит — 7200 секунд аудио в час на ключ. Когда несколько пользователей одновременно гоняют длинные видео, можно быстро упереться в лимит. Если просто слать запросы и ловить 429 — половина задач уйдёт в ошибку, пользователь увидит «попробуйте позже» и больше не вернётся.

Я сделал отдельный сервис WhisperQueue — синглтон-rate-limiter со скользящим окном. Идея простая: храним список «когда → сколько секунд аудио сожгли», чистим всё старше часа, считаем текущий расход. Если новая задача в окно не помещается — встаём в очередь и ждём, пока самая старая запись из окна выйдет. Концептуально:

class WhisperQueue:
    def __init__(self, limit_sec=7200, window_sec=3600, safety_buffer=60):
        self._limit = limit_sec - safety_buffer
        self._window = window_sec
        self._usage = []  # [(timestamp, duration_sec), ...]

    async def acquire(self, duration_sec, on_wait=None):
        while True:
            now = time.time()
            self._usage = [(t, d) for t, d in self._usage if now - t < self._window]
            used = sum(d for _, d in self._usage)
            if used + duration_sec <= self._limit:
                self._usage.append((now, duration_sec))
                return
            oldest_ts = self._usage[0][0]
            wait_sec = self._window - (now - oldest_ts) + 1
            if on_wait:
                await on_wait(wait_sec)
            await asyncio.sleep(wait_sec)

Колбэк on_wait даёт пользователю интерактив: бот пишет «жду очередь к Whisper, осталось ~40 секунд», и человек не уходит, потому что видит, что система живая.

С этой очередью я ни разу не упёрся в лимит Groq так, чтобы потерять задачу. Двести строк кода, которые сэкономили мне много седых волос.

3. SEO-описание: фича, которую пришлось вынести

Изначально я делал «Анализ видео» как комбайн: на одной странице — анализ + транскрипция + сгенерированное описание с хэштегами. Логика казалась очевидной.

Очевидной она оказалась только для меня. Через пару недель я заметил странную вещь: когда я анализировал видео конкурента, мне нужно было видеть его существующее описание — как он сам себя описал, какие хэштеги выбрал, что указал в первой строке. А мой комбайн вместо этого молча генерировал поверх новое SEO-описание для этого видео. Получалась фигня.

Разнёс на два модуля. «Анализ видео» теперь показывает оригинальное описание автора рядом с разбором. А отдельная вкладка «SEO-описание» — это уже инструмент для своего ролика: на вход ссылка, на выход — три-четыре абзаца под YouTube + ровно двадцать хэштегов с понятной структурой: пять широких + семь нишевых + пять длиннохвостовых + три брендовых.

Пример сгенерированного описания для видео

Пример сгенерированного описания для видео

Это не магия. Это шаблон, который разработал еще задолго до Znich, — но шаблон, который для своего ролика ранее заполнял минут двадцать, теперь отрабатывается за пятнадцать секунд.

Урок, который я вытащил из этой истории: «всё на одной странице» — не всегда удобно. Я этот же принцип потом применял несколько раз.

4. Анализ ниши: переход от «одного видео» к стратегии

В обратной связи стал чётко звучать другой вопрос: «А стоит ли мне вообще лезть в эту тему?». Пользователю мало понять, почему конкретный ролик залетел. Ему нужно понять, есть ли в нише место.

На вход — название ниши и до трёх каналов конкурентов. На выход — отчёт со структурой: показатели лидеров и market fit, контентные пробелы, визуальный код ниши, план действий на тридцать дней, прогноз монетизации и финальный вердикт «входить / не входить».

Пример отчета: https://app.znich.ru/share/ZG3PUKmgOO_lL83o_N53fTUAH68I9Flu

Пример отчета: https://app.znich.ru/share/ZG3PUKmgOO_lL83o_N53fTUAH68I9Flu

Технически нетривиальная часть — анализ обложки лидера. По каждому каналу-конкуренту определяем channel_id, забираем статистику, выбираем «лучшее видео» из последних тридцати, берём его обложку и прогоняем через отдельный Vision-промпт с JSON-ответом — тип, лицо/эмоция, текст, цвета, композиция. Все данные конкурентов плюс название ниши скармливаем стратегическому промпту.

Поначалу ссылки на каналы конкурентов нужно было копировать руками. Это тоже оказалось болью: пользователь часто знает свою нишу, но не знает, кто там лидер. Сделал автоподбор — channel_search.py. На вход название ниши, на выход топ релевантных каналов: LLM генерирует под нишу четыре поисковых запроса → YouTube API ищет каналы и видео по ним → собираем подписки/просмотры/частоту → фильтруем (минимум 1000 подписчиков, минимум 5 видео) → скорим по релевантности и активности.

5. Анализ канала: YouTube + Instagram, и где я сел

Следующий вопрос пришёл предсказуемо: «А можно так же, но про мой канал?». Появился модуль «Анализ канала». Сначала только YouTube, через две недели — Instagram через Apify.

Интерфейсно это две вкладки. «Анализ аккаунта» — AI-разбор «что залетает / что проваливается / паттерны заголовков / стратегия роста». «Анализ постов» — таблица с последними 30 видео, отсортированная по дате, с метриками. Когда пользователь открывает вкладку, фронтенд автоматически делает двухфазное обновление без списания баланса: подтягивает последние 30 постов, потом 31–80, мерджит со старыми по video_id. Открыл канал второй раз через неделю — увидел свежую статистику без оплаты.

Теперь про факап.

С Instagram я довольно сильно сел. Площадка планомерно усложняет жизнь сторонним инструментам аналитики: за пару месяцев работы мне приходилось неоднократно переключаться и донастраивать. Параллельно я смотрел на запросы пользователей и видел, что Instagram-анализ не востребован близко так же, как YouTube-аналитика. Соотношение примерно один к десяти, при этом стоимость поддержки — наоборот, на порядок выше.

В какой-то момент я принял неприятное решение: временно заморозить направление. Механика осталась в коде целиком — и модели в БД, и сервис, и трекинг-воркер. Когда (если) спрос пойдёт — всё включится за пару дней доработок. Пока приоритет там, где спрос больше.

Эта история мне самому хорошо вправила мозги: можно сделать фичу технически правильно и при этом упереться в неблагодарную внешнюю среду. Решение «закрыть и не трогать» в этом случае — не поражение, а нормальная продуктовая гигиена.

6. Кошелёк: тарифы, которые пришлось убрать

Начинал я с обычной подписочной модели — несколько тарифов, в каждом свой набор лимитов. Это казалось логичным: классическая SaaS-схема.

Через пару месяцев стал виден неприятный паттерн: пользователь покупает тариф, делает один-два анализа, забывает, вспоминает через три недели, заходит — а тариф уже истёк. Платить второй раз — обидно, потому что он его толком не использовал. Возвращаться — лень.

Перешёл на pay-per-use через кошелёк. Минимальное пополнение — 1 ₽ (специально, чтобы человек мог попробовать с маленькой суммы), каждая операция списывает фиксированную сумму. Не пользуешься месяц — баланс лежит и ждёт.

Прайс открытый, и я сознательно не прячу его за «свяжитесь с нами». Платёжка — YooKassa, поддержка промокодов, уведомления о низком балансе на порогах 100, 50 и 0 ₽ — чтобы пользователь не уткнулся в ноль внезапно посередине рабочего дня.

7. ИИ-чат с контекстом сущности

Отчёт — это монолог. Через какое-то время становится очевидно, что пользователь хочет диалог: «Как улучшить крючок?», «Напиши пять идей для похожих видео», «Перепиши заголовок жёстче».

Сделал чат-панель прямо на странице видео, канала и ниши. Главное продуктовое решение — чат знает всю сущность целиком. Не «дайте мне ссылку, я посмотрю», а сразу: ему уже передан в системный промпт весь анализ, метрики, а для каналов — ещё и список постов с датами и метриками каждого.

Технически все модели идут через единый шлюз RouterAI. У пользователя в дропдауне Claude, GPT, Gemini и Perplexity Sonar — последний удобен, когда нужны актуальные данные с поиском. Цена за сообщение видна прямо у названия модели — от 2 ₽ до 8 ₽.

Когда история чата превышает четыре тысячи токенов, отдельная дешёвая модель сжимает её в пересказ. Не оригинальный приём, но в сценарии «пользователь ведёт диалог по одной нише неделями» он сильно экономит.

8. Трекинг постов: первые 24 часа решают

Когда автор публикует видео, самое ценное окно для понимания «залетит/не залетит» — первые 24 часа. Скорость роста просмотров в первый час, динамика лайков, появление комментариев.

Открываешь канал, на вкладке «Анализ постов» галочкой отмечаешь нужные ролики, выбираешь интервал — 15 минут / 30 минут / 1 час / 6 часов / 24 часа / неделя — и система сама ходит и снимает метрики.

Под капотом — фоновый воркер, который крутится на asyncio.create_task со старта приложения. Каждые десять минут выбирает активные записи трекинга с next_check_at <= now, ходит за свежими метриками, складывает снимок в youtube_video_snapshots, обновляет next_check_at. Стоимость одной проверки — 1 ₽. При нулевом балансе трекинг сам деактивируется, бот пишет «баланс ушёл в ноль, остановил трекинг таких-то постов, вот ссылка пополнить». Уважение к деньгам пользователя — та вещь, на которой сложно сэкономить и легко потерять доверие.

9. RouterAI и Groq: страховка от одного провайдера

Вначале у меня в коде были три разных SDK — OpenAI, Anthropic, Google. Каждый со своим клиентом, ошибками, биллингом. Когда добавлялась четвёртая модель, нужно было писать четвёртый адаптер.

В апреле я перенёс все LLM-операции на единый шлюз RouterAI и оставил Groq отдельно — только для транскрипции, потому что он пока самый быстрый Whisper по соотношению цена/время.

Что дало переключение. Один SDK (OpenAI-совместимый клиент). Один формат запросов и ответов. Один счёт за всю LLM-инфраструктуру. Добавление новой модели = строчка в БД-таблице ai_models, а не релиз кода: видишь, что у RouterAI появилась anthropic/claude-sonnet-4.7 — добавил в админку, пользователи в дропдауне видят её через пять минут. Если у одного провайдера упадёт API или вырастет цена — переключаю модели на другого без релиза. Это страховка, которая внутри маленькой команды важнее, чем кажется.

10. Скриннер ниш — самая большая фича

Все предыдущие фичи отвечали на запрос «расскажи про вот эту нишу/канал/видео». Но есть запрос принципиально другой: «найди мне нишу». Как из тысяч возможных тем выбрать пять, где низкая конкуренция и при этом растущий спрос?

Скриннер принимает на вход «хочу N ниш в регионе RU» и выдаёт ранжированную таблицу с вердиктами «Отличная / Перспективная / Средняя / Слабая». Это самая дорогая в разработке фича за пять месяцев — потребовала отдельной БД-схемы, своих воркеров, SSE для прогресса, шаблонов скоринга и AI-саммари.

Два режима. Автопоиск: выбираешь шаблон скоринга, регион (RU/GLOBAL), количество ниш. Система берёт из шаблона базовые сиды → расширяет через YouTube Suggest API → прогоняет через Google Trends на pre-screen, отсеивая мёртвые и сезонные → топ оставшихся идёт в полный анализ. По вирусным видео: алгоритм, который мне самому понравился больше всего. Берём топ вирусных видео категории на YouTube, фильтруем тех, у кого канал маленький (до N подписчиков), через GPT-4o-mini вытаскиваем из заголовков нишевые темы. То есть пользователь получает ниши, в которых маленькие каналы прямо сейчас выстреливают, — это сигнал, что в нише есть пробитие.

Полный анализ одной ниши. Поиск каналов через YouTube API с фильтром «1k–20k подписчиков» — это окно, где маленькому новичку реально конкурировать. Сбор статистики каналов и видео. Google Trends за 12 месяцев через pytrends — считаем avg_level (средний уровень за год) и breakout_score — отношение пика последних четырёх недель к пику года, в процентах. Если breakout >= 70 — это явный сигнал растущего тренда. Дислайки через returnyoutubedislike.com — обратная связь аудитории, которой нет в публичном API после изменений 2021 года. Скоринг по шаблону: у каждой метрики есть вес, тип нормализации (linear / log / sigmoid / inverted) и опциональное cutoff-условие. На выходе — итоговый балл 0–10.

Прогресс через SSE. Пайплайн долгий — на батч из десяти ниш уходит несколько минут. Без обратной связи пользователь уйдёт. Сделал поток событий: prescreen_tick (один кандидат проверен), job_done (анализ одной ниши завершён, в payload — niche_name, score, verdict), batch_done. Фронтенд строит таблицу инкрементально: ниша появляется в списке сразу же, как только её анализ завершается. Это даёт ощущение, что система работает, а не зависла.

AI-саммари батча. После завершения через GPT-4o-mini генерирую короткое саммари: «самая лёгкая ниша для старта», «лучший потенциал просмотров», «самая жизнеспособная по совокупности». Три рекомендации, сравнивающие все ниши в батче между собой. Полезно, когда у пользователя десять ниш на руках и он не хочет читать полные карточки всех — нужен путеводитель.

Что сейчас в работе

Не дорожная карта, а несколько направлений, которые в работе или рядом и скоро поедут на бой:

  • Поиск трендов — модуль, который ищет вирусные видео маленьких каналов (1K–100K подписчиков) по ключевому слову. Скриннер отвечает на «куда заходить вдолгую», поиск трендов — на «что снять прямо сейчас, чтобы попасть в волну». Пайплайн собран, дорабатываю UI и формулу viral_score.

  • Свой аналитический контур. К апрелю в Znich стало больше десяти модулей, и я поймал себя на ощущении, что не понимаю своих пользователей. У меня были чужие метрики, но не было своих. Сейчас пилю единый event-лог в той же PostgreSQL, атрибуцию first/last touch через anonymous_id, событие активации (первый успешный анализ + просмотр результата минимум 30 секунд) и реферальную программу, в которой счётчик инкрементируется не при регистрации приглашённого, а при его активации. Всё это — чтобы строить триггеры и автоматизации прямо из БД.

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

И второе, неожиданное для меня самого: маленький проект на стадии «маркетолог + LLM + неловкий код» вполне может работать. Не как замена «правильного» SaaS — а как продукт, у которого внятная аудитория и понятная ценность. У меня сейчас меньше сотни платящих пользователей, средний чек 200–300 ₽, и я ими горжусь сильнее, чем гордился бы тысячей случайных регистраций в красивой админке.

Каждая фича родилась из конкретного «блин, неудобно». Если у вас в работе с видео есть собственное «блин, неудобно» — попробуйте Znich, возможно, оно уже там решено. Если нет — напишите, я добавлю.

Потыкать можно на znich.ru.