Решил сделать на Twitch шоу, где нельзя смеяться, с ИИ-распознованием эмоций. Рассказываю, как оно устроено внутри и с какими проблемами столкнулся.Одновременный просмотр видео с друзьями без делея. Интеграция чтения эмоций в прямом эфире. Парсинг видео и топа комментариев, которые присылают в личку. Оверлеи и влияние зрителей на игру.Первые цифры. Буду рад фидбеку. Подробности о проекте и первые цифры
Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.1K
Кейс
Решил сделать для друзей игру, где нельзя смеяться, чтобы ИИ распознавал эмоции и определял, кто засмеялся первым.

Пример того, как работает «Детектор смеха»
Я не программист, по профессии маркетолог. Всё это написано с ИИ‑агентами примерно за шесть недель: сейчас в проекте больше пятисот коммитов. Как выглядит такая работа изнутри и что агент ломал по дороге, расскажу отдельно и честно. А в этой статье — карта: из каких частей состоит шоу и какие задачи в каждой из них оказались неожиданно сложными.
Как всё началосьЯ уволился и решил повайбкодить. Начать хотел с чего‑то весёлого. У меня есть друзья, которые живут в разных странах, и я захотел сделать для нас игру. Сам формат не новый — игра вроде «Большого шоу» или японского Hitoshi Matsumoto Presents Documental: разные раунды, но единое правило — нельзя смеяться.
Сначала я попробовал посмотреть рилсы через демонстрацию экрана в Zoom, но видео приходило с опозданием: один уже смеётся, у другого ещё середина.
Когда решил эту проблему (расскажу позже как), надо было понять, кто засмеялся первым и что считать смехом. Нужно было как‑то судить. Попробовали классику с водой во рту — судит она идеально, но с водой во рту нельзя разговаривать, а часто смешны не сами видео, а разговоры и взаимодействие. Плюс, кроме просмотра видео, есть и другие раунды.
Тогда решил поискать, как можно отлавливать смех в реальном времени: камера же всё равно включена.
Из чего состоит шоу
Общая схема логики шоу.
1. Видео стартует у всех одновременноГлавное решение проекта: по сети не передаётся видео. Каждый участник заранее скачивает ролик, а сервер присылает только одно — в какой момент его нулевая секунда. Дальше у каждого свои часы, сверенные с серверными, и своя подстройка скорости, чтобы не разъехаться. Расхождение между участниками — меньше одного кадра.
2. Нейросеть ловит смехЧтобы не делать полотно, подробности про каждую большую фичу расскажу в следующих статьях. Если коротко: синхронизацию я сделал сам (общие часы и WebSocket), а камеры и голос участников идут через LiveKit — там тоже было много нюансов.
Лицо распознаёт модель прямо в браузере у каждого игрока — видео с камеры никуда не уходит, на сервер летят только числа. Из 52 «мышечных» признаков лица собираются смех, злость и страх, а сервер решает, засмеялся ли человек.

Первая игра с друзьями
Это была самая неожиданно сложная часть: нейросеть до сих пор путает со смехом гласную «А», глоток чая и многое другое. К тому же мимика у игроков разная.
3. Автоматическое скачивание рилсов от зрителей и сбор топа комментариев Instagram*Про калибровку тоже расскажу в отдельной статье. Потом проставлю сюда ссылки.
На поиск видео уходило много времени, поэтому я сделал так, чтобы в плейлист попадали рилсы, которые мне присылают в личку. Отправили рилс — через минуту ролик в очереди.
Но часто комментарии смешнее самих видео. Со сбором комментариев тоже свои нюансы на целую статью. Хочется показывать самые залайканные, а Instagram* не отдаёт программам число лайков у комментариев, так что топ по лайкам автоматически не собрать. Пять способов забрать комментарии программно не сработали, сработал шестой: ничего не автоматизировать. Расскажу об этом отдельно, как и про вывод комментариев поверх видео.

Комментарии выводятся поверх видео: их можно показывать и на паузе, и во время рилса в нужные тайминги.
4. Как работает картинка эфираВесь кадр эфира — камеры, ролик, сердца, банк, комментарии — это обычная веб‑страница, которую OBS снимает как окно. Так проще, чем собирать сцену из десятков источников в OBS. Из этого же кода получается вертикальная версия для TikTok, а маленький «режиссёр» сам переключает камеры на того, кто говорит или смеётся.
5. Первая статистика TikTok и автоматический режиссёр вертикальной версииСейчас есть одна нерешённая загадка: иногда картинка замирает ровно в момент, когда ловят смех (чаще в одном из режимов).
Залил первые видео в TikTok и удивился, как некоторые из них начали выстреливать.

Режиссёр вертикальной сцены
Пока играл с друзьями, много времени уходило на монтаж вертикальной сцены: внизу должен отображаться рилс, а вверху — меняться камеры игроков. И тут я подумал:
У меня же эмоции трекаются много раз в секунду и есть микрофоны, значит, вертикальную сцену можно режиссировать автоматически. Я составил набор правил. Логика довольно простая: приоритет по микрофону — показываем того, кто говорит. Если никто не говорит, смотрим на детектор смеха и показываем того, кто ближе всех к срыву.
В целом эту фичу можно использовать и для вебинаров. Если будет интерес, могу написать отдельную статью.
Затем я подумал: раз в TikTok есть просмотры, можно не ограничиваться только им. Лет пять назад я работал в Wargaming и проводил стримы. Поэтому решил подумать, как вообще можно интегрировать это со зрителями. Круто, если бы зрители могли влиять на процесс.
Интерактив со зрителямиТак как я маркетолог, то начал прикидывать, какие механики могут быть интересны зрителям и повлиять на продвижение на Twitch.
Так появился банк: когда кто‑то смеётся, в банк прибавляется определённая сумма. В конце стрима банк разыгрывается между зрителями (почему в конце — это такая замануха для удержания).

Пример, как пополняется банк от смеха.
Так как я сейчас не работаю, то в качестве наград пока раздаю свои скины из CS.
Вот что есть из интерактива: банк из смеха ведущего, розыгрыш среди фолловеров, прогнозы «засмеётся или нет» с билетами за верные ответы, оценка рилсов. И отдельное решение — не использовать баллы канала Twitch: правила Twitch запрещают награды, похожие на азартную игру.
Есть ещё много интерактивных штук, о которых, возможно, расскажу отдельно, например про оценку рилса, ставки, «кто засмеётся» и так далее

Голосование за рилс

Голосование, кто засмеется
Как это всё написал не‑программистТут и так понятно, что это всё вайбкодинг. Я хочу сделать серию технических статей о том, как что устроено, и буду рад, если у кого‑то будут идеи или комментарии, что можно доработать или улучшить. Да и в целом фидбеку.
Немного цифрОколо шести недель, больше 500 коммитов, около 100 тысяч строк кода и тестов.
Ведущий и до четырёх гостей, три реакции: смех, злость, страх.
Нарезки в TikTok: 600 000 просмотров за 4 недели.
Провел первый тестовый эфир.

Статистика тестового эфира, где всё, что могло пойти не так — пошло.
Нашёл то, чем действительно загорелсяНемного лирики. Я как‑то думал, чем бы хотел заниматься, если бы вопрос был не в деньгах, — и не придумал, что искренне может меня сильно увлечь. И пока делал этот проект, понял, что по‑настоящему загорелся.
Сейчас получил оффер на новую работу, но есть внутренняя дилемма: идти в найм и пока забить на этот хобби‑проект или ещё какое‑то время тратить подушку и посмотреть, что из этого выйдет. Может, попробую совмещать, но когда погружаюсь в работу, то хобби обычно уходит на второй‑третий план. Как решу — поделюсь.
Ну и важна оценка со стороны. Друзья, понятно, говорят «топ», «весело» и так далее, но они на то и друзья. Хочется снять розовые очки и окунуться в реальность, поэтому за любой фидбек буду благодарен.
Как можно помочь (или если вы хотите затестить)Если у вас нормальный ПК, камера и звук и вы хотите попробовать поиграть — напишите мне, пожалуйста, в Telegram (ссылка ниже). Хочу провести игры не только с друзьями; это для тестов, а не для стрима.
Если у вас есть идеи — тоже пишите, буду рад. Можно комментарием под любым текстом в ТГ (там всего пара человек, я точно увижу и отвечу).
*Instagram принадлежит компании Meta, признанной в России экстремистской организацией; её деятельность в России запрещена.
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Наводишь на слово в субтитрах — видишь перевод: расширение на встроенном ИИ Chrome | 0 | 7.72 | 27-09-2026 |
| 2 | Книга из переписки без сервера: canvas, jsPDF и брошюра для печати прямо в браузере | 1 | 8.1 | 28-09-2026 |
| 3 | Daily Hacker News for 2026-09-29 | 0 | 11.19 | 30-09-2026 |
| 4 | Вайбкодинг: запретить нельзя возглавить | 0 | 11.07 | 30-09-2026 |
| 5 | ИИ-ревью, или как я себя чуть не уволил | 0 | 9.94 | 02-10-2026 |
| 6 | SaaS умер?.. Я за сутки навайбкодил аналог Discord «Calab» с помощью Fable 5.1 | 0 | 13.66 | 30-09-2026 |
| 7 | [Перевод] От тестирования релиза с высоким уровнем риска к новому ИИ-инструменту для QA | 0 | 11.89 | 26-09-2026 |
| 8 | Не трогая веса модели: как мы построили исследовательского агента Алисы AI и в разы сократили потребление GPU | 1 | 8.1 | 14-09-2026 |
| 9 | Не зовут на собеседования? Написал бота, который увеличит твои шансы на это | 0 | 6.27 | 26-09-2026 |
| 10 | «По будням в 9:30» → 30 9 * * 1–5: парсер расписаний на русском, который отказывается угадывать | 0 | 15.3 | 28-09-2026 |