Бот вырезает то, что резать не надо

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

9
слоёв, которые режут
1
откат — и только на шаг назад
0
кнопок «не режь этот кусок»
7
«дублей и брошенных заходов» на одном ролике из лога

1 Слой дублей верит нейронке на слово

Повторы ищет модель (find_semantic_dupes) и говорит «этот кусок — повтор того». Но риторический повтор («Никогда. Никогда так не делай»), перечисление с анафорой и приём «повторил, чтобы вбить» выглядят для неё одинаково с настоящим дублем-переснятием.

  1. ✅ есть: провенанс — текст обязан звучать в речи
  2. Резать дубль только если ДВА движка распознавания согласны
  3. Требовать сходство ≥90% по словам, а не «по смыслу»
  4. Не считать дублем куски дальше 25с друг от друга
  5. Риторический повтор: два подряд коротких — это приём, не дубль
  6. Анафора (одинаковое начало у 3+ фраз) — защищённый паттерн
  7. Первый заход не резать, если он длиннее и чище второго
  8. Порог: не больше 25% хронометража одним слоем
  9. Показывать список дублей до сборки и давать снять галочку
  10. Копить «отменённые» решения как обучающие примеры

2 Нет видимой кнопки «не резать»

Режим существует (trim_off), но включается только словами в брифе — то есть человек должен догадаться сказать «не режь». По умолчанию всегда режем.

  1. ✅ внедряю: кнопка «✂️ Не резать» на экране сборки
  2. Спрашивать один раз на первом ролике и запоминать выбор
  3. Режим «только оформление»: субтитры и графика, нарезки ноль
  4. Автоопределение: речь без пауз и дублей → не резать вообще
  5. Ролик короче 25с — не резать по умолчанию
  6. Слово «сценарий» или «по тексту» в брифе → режим без резов
  7. Отдельный режим для читки с телесуфлёра
  8. Показывать в отчёте «резов: 0» как нормальный исход
  9. Помнить выбор по конкретному клиенту, а не по ролику
  10. Кнопка «вернуть как было» рядом с результатом

3 Откат одноразовый и молчаливый

Копия плана (plan_bak) хранится ровно одна: вторая правка стирает возможность вернуться. В коде прямо написано «ничего не резать уже не собрать обратно».

  1. → делаю: история планов, откат на любой шаг
  2. Хранить исходный «нулевой» план всегда до конца сессии
  3. Кнопка «Вернуть исходник целиком»
  4. Отдельно: «вернуть только этот кусок»
  5. Не перезаписывать исходник результатом сборки
  6. Помечать версии: черновик 1, 2, 3 с длиной каждой
  7. Хранить решения резов отдельно от плана — их проще отменить
  8. Показывать в сообщении «откатить» после каждой правки
  9. Хранить историю 7 дней, а не до перезапуска
  10. Экспорт исходной склейки одной кнопкой

4 Хвост после призыва режется по стоп-словам

Есть отдельный слой, который отрезает всё после CTA — по списку слов и признакам «выхода из роли». Если после призыва идёт ещё мысль или вторая часть — она исчезает.

  1. Резать хвост только если после CTA тишина > 2с
  2. Не резать, если после CTA ещё 8+ слов связной речи
  3. Спрашивать: «после призыва ещё говоришь по делу?»
  4. Резать только явный выход из роли («стоп», «снято», «ну как?»)
  5. Показывать отрезанный хвост текстом в отчёте
  6. Кнопка «вернуть хвост»
  7. Не применять слой к роликам короче 30с
  8. Не применять, если CTA в первой половине ролика
  9. Учитывать интонацию: обрыв на восходящем тоне — продолжение
  10. Класс «двойной CTA» — оба сохранять

5 Детект «отвернулся от камеры» выгрызает куски

Слой offcam удаляет места, где спикер смотрит в сторону — а на докладе, демонстрации экрана или чтении с листа это половина ролика. Кейс уже ловили: детект выгрызал 70% доклада.

  1. ✅ есть: выключатель cut_offcam=False для докладов
  2. Включать слой только когда лицо в кадре ≥80% времени
  3. Не резать, если речь в этот момент непрерывна
  4. Потолок: слой не может убрать больше 15% ролика
  5. Автовыключение при демонстрации экрана
  6. Спрашивать при первом длинном выгрызании
  7. Мягкий вариант: не резать, а прикрыть перебивкой
  8. Учитывать, что взгляд в сторону — часть подачи
  9. Отдельный профиль «интервью» без слоя
  10. Писать в отчёт, сколько именно съел этот слой

6 Подгонка под длину режет смысл

Когда задана целевая длина, конвейер выбрасывает куски, чтобы уложиться. Смысловой ценз при этом слабее арифметики: «надо 30 секунд» побеждает «здесь главная мысль».

  1. Спрашивать, что важнее: длина или полнота
  2. Не резать смысловые блоки — только паузы и дубли
  3. Уложиться ускорением речи на 3-5% вместо резов
  4. Предлагать разделить на два ролика
  5. Показывать «чтобы уложиться, уйдёт вот это» до сборки
  6. Никогда не резать хук и CTA ради длины
  7. Целевую длину считать пожеланием, а не законом
  8. Порог: если для длины надо срезать >20% — отказ и вопрос
  9. Резать по границам мыслей, а не по секундам
  10. Помнить, что Reels до 90с — потолка можно не бояться

7 Пере-нарезка уже смонтированного

Если прислать готовый ролик, слой дублей видит хард-каты и принимает их за повторы: режет по живому монтажу. Дефект известен и записан, но не закрыт.

  1. → делаю: детект «это уже смонтировано» → слой дублей глушится
  2. Признак: склейки чаще раза в 4 секунды
  3. Признак: есть вшитые субтитры на кадре
  4. Признак: музыка ровным фоном без пауз
  5. Спрашивать прямо: «это сырьё или готовый ролик?»
  6. Для готового — только оформление, без нарезки
  7. Не резать паузы короче 0.5с в смонтированном
  8. Не доверять «дублям» рядом со сменой плана
  9. Разбор такого файла предлагать вместо пересборки
  10. Помечать файл как «готовый» в сессии до конца

8 Паузы: режем дыхание вместо мусора

Порог тишины один для всех. У медленного спикера пауза между мыслями — приём и воздух, а конвейер видит «тишину под рез» и склеивает мысли встык.

  1. ✅ есть: внутри фразы жмём до 0.12с, между мыслями оставляем 0.28с
  2. Профиль под конкретного человека по его правкам
  3. Не трогать паузу перед сильной фразой (там акцент)
  4. Не трогать паузу после вопроса
  5. Считать темп речи и подстраивать порог
  6. Ролик медленнее 110 слов/мин — паузы почти не жать
  7. Ручка «дыхание: живое / плотное / жёстко» в брифе
  8. Показывать, сколько секунд ушло на паузы
  9. Не жать паузы в первых 3 секундах
  10. Держать минимум 0.2с на любом стыке мыслей

9 Ошибка распознавания = ложный дубль

Решения о резе принимаются по тексту, а текста два: у Groq и Deepgram расхождения. Ослышка превращает разные фразы в «одинаковые» — и живой кусок уходит как повтор.

  1. ✅ есть: сверка двух движков на дублях
  2. Резать только при согласии обоих
  3. Сравнивать не текст, а звук куска (акустическое сходство)
  4. Игнорировать разницу в одну-две буквы как ослышку
  5. Не резать по фразам короче 4 слов
  6. Третий движок как арбитр в спорных
  7. Не резать, если распознавание уверено меньше 70%
  8. Учитывать язык: на украинском ошибок больше
  9. Логировать «спорные» и показывать их человеку
  10. При споре — оставлять кусок, а не удалять

10 Человек не видит, что вырежут, до сборки

Сценарий на согласование показывает, что ВОЙДЁТ, но не показывает, что УЙДЁТ и почему. Ошибку видно только на готовом ролике, когда возвращать уже нечего.

  1. → делаю: экран «что уйдёт» списком до сборки
  2. Каждый рез — строкой с текстом и причиной
  3. Галочки: снять рез, который не нравится
  4. Кнопка «оставить всё» одним нажатием
  5. Показывать суммарно: «уйдёт 12с из 60»
  6. Порог тревоги: уходит больше 30% — спросить обязательно
  7. Помечать резы по слоям (паузы / дубли / хвост)
  8. Голосом: «верни про клиентов» — снять конкретный рез
  9. Хранить снятые резы, чтобы не предлагать их снова
  10. В отчёте после сборки — тот же список с кнопкой отката

Что делаю прямо сейчас, по порядку

  1. Кнопка «✂️ Не резать» на экране сборки — режим «только оформление», ноль резов. Плюс автоправило: ролик короче 25 секунд и без дублей не режется вовсе.
  2. Полный откат. Исходный план хранится всю сессию, кнопка «Вернуть как было» возвращает ролик целиком, сколько бы правок ни прошло.
  3. Экран «что уйдёт» перед сборкой: список резов с текстом и причиной, галочки — снять любой, кнопка «оставить всё».
  4. Детект готового ролика — если прислали смонтированное, слой дублей глушится сам.
  5. Потолки на слои: ни один слой не может съесть больше своей доли, и каждый отчитывается в лог, сколько именно вырезал.

Reel$$$hot · Монтажёр · разбор «режет лишнее» · 20.08.2026. Источники: код конвейера (девять режущих слоёв), живой bot.log, ночной прогон эталона.