Бот вырезает то, что резать не надо
Разбор по коду конвейера и живым логам. Главное открытие: куски удаляют девять независимых слоёв, каждый со своей логикой, и почти все решают молча — человек видит только результат и не может вернуть кусок обратно.
1
откат — и только на шаг назад
0
кнопок «не режь этот кусок»
7
«дублей и брошенных заходов» на одном ролике из лога
1 Слой дублей верит нейронке на слово
Повторы ищет модель (find_semantic_dupes) и говорит «этот кусок — повтор того». Но риторический повтор («Никогда. Никогда так не делай»), перечисление с анафорой и приём «повторил, чтобы вбить» выглядят для неё одинаково с настоящим дублем-переснятием.
- ✅ есть: провенанс — текст обязан звучать в речи
- Резать дубль только если ДВА движка распознавания согласны
- Требовать сходство ≥90% по словам, а не «по смыслу»
- Не считать дублем куски дальше 25с друг от друга
- Риторический повтор: два подряд коротких — это приём, не дубль
- Анафора (одинаковое начало у 3+ фраз) — защищённый паттерн
- Первый заход не резать, если он длиннее и чище второго
- Порог: не больше 25% хронометража одним слоем
- Показывать список дублей до сборки и давать снять галочку
- Копить «отменённые» решения как обучающие примеры
2 Нет видимой кнопки «не резать»
Режим существует (trim_off), но включается только словами в брифе — то есть человек должен догадаться сказать «не режь». По умолчанию всегда режем.
- ✅ внедряю: кнопка «✂️ Не резать» на экране сборки
- Спрашивать один раз на первом ролике и запоминать выбор
- Режим «только оформление»: субтитры и графика, нарезки ноль
- Автоопределение: речь без пауз и дублей → не резать вообще
- Ролик короче 25с — не резать по умолчанию
- Слово «сценарий» или «по тексту» в брифе → режим без резов
- Отдельный режим для читки с телесуфлёра
- Показывать в отчёте «резов: 0» как нормальный исход
- Помнить выбор по конкретному клиенту, а не по ролику
- Кнопка «вернуть как было» рядом с результатом
3 Откат одноразовый и молчаливый
Копия плана (plan_bak) хранится ровно одна: вторая правка стирает возможность вернуться. В коде прямо написано «ничего не резать уже не собрать обратно».
- → делаю: история планов, откат на любой шаг
- Хранить исходный «нулевой» план всегда до конца сессии
- Кнопка «Вернуть исходник целиком»
- Отдельно: «вернуть только этот кусок»
- Не перезаписывать исходник результатом сборки
- Помечать версии: черновик 1, 2, 3 с длиной каждой
- Хранить решения резов отдельно от плана — их проще отменить
- Показывать в сообщении «откатить» после каждой правки
- Хранить историю 7 дней, а не до перезапуска
- Экспорт исходной склейки одной кнопкой
4 Хвост после призыва режется по стоп-словам
Есть отдельный слой, который отрезает всё после CTA — по списку слов и признакам «выхода из роли». Если после призыва идёт ещё мысль или вторая часть — она исчезает.
- Резать хвост только если после CTA тишина > 2с
- Не резать, если после CTA ещё 8+ слов связной речи
- Спрашивать: «после призыва ещё говоришь по делу?»
- Резать только явный выход из роли («стоп», «снято», «ну как?»)
- Показывать отрезанный хвост текстом в отчёте
- Кнопка «вернуть хвост»
- Не применять слой к роликам короче 30с
- Не применять, если CTA в первой половине ролика
- Учитывать интонацию: обрыв на восходящем тоне — продолжение
- Класс «двойной CTA» — оба сохранять
5 Детект «отвернулся от камеры» выгрызает куски
Слой offcam удаляет места, где спикер смотрит в сторону — а на докладе, демонстрации экрана или чтении с листа это половина ролика. Кейс уже ловили: детект выгрызал 70% доклада.
- ✅ есть: выключатель
cut_offcam=False для докладов
- Включать слой только когда лицо в кадре ≥80% времени
- Не резать, если речь в этот момент непрерывна
- Потолок: слой не может убрать больше 15% ролика
- Автовыключение при демонстрации экрана
- Спрашивать при первом длинном выгрызании
- Мягкий вариант: не резать, а прикрыть перебивкой
- Учитывать, что взгляд в сторону — часть подачи
- Отдельный профиль «интервью» без слоя
- Писать в отчёт, сколько именно съел этот слой
6 Подгонка под длину режет смысл
Когда задана целевая длина, конвейер выбрасывает куски, чтобы уложиться. Смысловой ценз при этом слабее арифметики: «надо 30 секунд» побеждает «здесь главная мысль».
- Спрашивать, что важнее: длина или полнота
- Не резать смысловые блоки — только паузы и дубли
- Уложиться ускорением речи на 3-5% вместо резов
- Предлагать разделить на два ролика
- Показывать «чтобы уложиться, уйдёт вот это» до сборки
- Никогда не резать хук и CTA ради длины
- Целевую длину считать пожеланием, а не законом
- Порог: если для длины надо срезать >20% — отказ и вопрос
- Резать по границам мыслей, а не по секундам
- Помнить, что Reels до 90с — потолка можно не бояться
7 Пере-нарезка уже смонтированного
Если прислать готовый ролик, слой дублей видит хард-каты и принимает их за повторы: режет по живому монтажу. Дефект известен и записан, но не закрыт.
- → делаю: детект «это уже смонтировано» → слой дублей глушится
- Признак: склейки чаще раза в 4 секунды
- Признак: есть вшитые субтитры на кадре
- Признак: музыка ровным фоном без пауз
- Спрашивать прямо: «это сырьё или готовый ролик?»
- Для готового — только оформление, без нарезки
- Не резать паузы короче 0.5с в смонтированном
- Не доверять «дублям» рядом со сменой плана
- Разбор такого файла предлагать вместо пересборки
- Помечать файл как «готовый» в сессии до конца
8 Паузы: режем дыхание вместо мусора
Порог тишины один для всех. У медленного спикера пауза между мыслями — приём и воздух, а конвейер видит «тишину под рез» и склеивает мысли встык.
- ✅ есть: внутри фразы жмём до 0.12с, между мыслями оставляем 0.28с
- Профиль под конкретного человека по его правкам
- Не трогать паузу перед сильной фразой (там акцент)
- Не трогать паузу после вопроса
- Считать темп речи и подстраивать порог
- Ролик медленнее 110 слов/мин — паузы почти не жать
- Ручка «дыхание: живое / плотное / жёстко» в брифе
- Показывать, сколько секунд ушло на паузы
- Не жать паузы в первых 3 секундах
- Держать минимум 0.2с на любом стыке мыслей
9 Ошибка распознавания = ложный дубль
Решения о резе принимаются по тексту, а текста два: у Groq и Deepgram расхождения. Ослышка превращает разные фразы в «одинаковые» — и живой кусок уходит как повтор.
- ✅ есть: сверка двух движков на дублях
- Резать только при согласии обоих
- Сравнивать не текст, а звук куска (акустическое сходство)
- Игнорировать разницу в одну-две буквы как ослышку
- Не резать по фразам короче 4 слов
- Третий движок как арбитр в спорных
- Не резать, если распознавание уверено меньше 70%
- Учитывать язык: на украинском ошибок больше
- Логировать «спорные» и показывать их человеку
- При споре — оставлять кусок, а не удалять
10 Человек не видит, что вырежут, до сборки
Сценарий на согласование показывает, что ВОЙДЁТ, но не показывает, что УЙДЁТ и почему. Ошибку видно только на готовом ролике, когда возвращать уже нечего.
- → делаю: экран «что уйдёт» списком до сборки
- Каждый рез — строкой с текстом и причиной
- Галочки: снять рез, который не нравится
- Кнопка «оставить всё» одним нажатием
- Показывать суммарно: «уйдёт 12с из 60»
- Порог тревоги: уходит больше 30% — спросить обязательно
- Помечать резы по слоям (паузы / дубли / хвост)
- Голосом: «верни про клиентов» — снять конкретный рез
- Хранить снятые резы, чтобы не предлагать их снова
- В отчёте после сборки — тот же список с кнопкой отката
Что делаю прямо сейчас, по порядку
- Кнопка «✂️ Не резать» на экране сборки — режим «только оформление», ноль резов. Плюс автоправило: ролик короче 25 секунд и без дублей не режется вовсе.
- Полный откат. Исходный план хранится всю сессию, кнопка «Вернуть как было» возвращает ролик целиком, сколько бы правок ни прошло.
- Экран «что уйдёт» перед сборкой: список резов с текстом и причиной, галочки — снять любой, кнопка «оставить всё».
- Детект готового ролика — если прислали смонтированное, слой дублей глушится сам.
- Потолки на слои: ни один слой не может съесть больше своей доли, и каждый отчитывается в лог, сколько именно вырезал.