# История изменений

## 4.0.0 — 2026-07-30

Крупное обновление. Каждый пункт проверен рендером или измерением на реальном
материале.

### Найденные и исправленные ошибки

Первые шесть означали, что предыдущая версия молча выдавала не тот результат.

- **libass не читала шрифтовой пак.** `fontsdir` не рекурсивный, а пак лежал папками
  по семействам — значит ни один прожиг субтитров не использовал локальные шрифты и
  уходил на системные. Теперь собирается плоский пак `assets/fonts/all/`, а
  `burn_ass_captions.py` отказывается стартовать на папке с подпапками.
- **`Fontname: Montserrat` не находил Montserrat.** libass ищет по `name ID 1`, а у
  вариативного файла Google это `"Montserrat Thin"` — стиль падал на Arial. Теперь
  генерируются статические начертания с корректными RIBBI-именами.
- **Ширина строки считалась в полтора раза больше реальной.** `Fontsize` в ASS не
  равен размеру em: libass использует `FT_SIZE_REQUEST_TYPE_REAL_DIM`, и em выходит
  `Fontsize × unitsPerEm / (winAscent + winDescent)` — для Montserrat 0.64. Средняя
  ошибка предсказания ширины теперь 0.64%, максимум 1.6%.
- **Регистр применялся после измерения**, поэтому в пословных режимах заглавные слова
  налезали друг на друга.
- **Плашка за словом стояла выше и левее слова**: `n5` не центрирует `\p`-фигуру,
  libass смещает её на половину габарита.
- **Звук становился на два кадра длиннее видео на каждом шаге цепочки**: обрезка шла
  по длительности контейнера, то есть по максимуму из потоков.
- **Синтезированные SFX были щелчками** — overlap-add нормализация взрывалась на краях
  буфера. Ловится только проверкой крест-фактора, теперь встроенной в генератор.
- **SFX были не слышны в миксе**: уровень выравнивался по пику, а свуш с
  крест-фактором 16 дБ на слух тише удара с тем же пиком.
- **`--only` у установщика шрифтов стирал весь пак.**
- **Проверка дрейфа в дуальной синхронизации находила дрейф, которого нет** —
  сравнивались одни и те же индексы невыровненных огибающих.
- **Выбор микрофона предпочитал худший**: оценка награждала долю речевой полосы, а
  обрезание полосы её повышает.
- **Липсинк расходился на длинной нарезке**: границы сегментов не были выровнены по
  кадрам, на семнадцати сегментах накапливалась треть секунды.
- **`concat` не находил чанки**: демультиплексор разрешает относительные пути от папки
  списка, а не от рабочего каталога.
- **Ворота ложно падали на числах**: Whisper отдаёт запятую приклеенной к следующему
  слову, сравнение по токенам этого не переживало.

### Шрифты

- 61 семейство, 159 статических начертаний, 24 МБ, вся кириллица проверена.
- Каталог с ролями и уровнями (`core` / `pro` / `fx`), загрузка с повторами.
- Инстанцирование вариативных шрифтов с подгонкой веса к именованным начертаниям и
  субсеттингом до латиницы с кириллицей.
- `font_tables.py`: чтение `cmap`, `name`, `fvar`, `OS/2`, `hmtx` без зависимостей.
- `font_audit.py`: три независимые проверки, включая реальный прогон через libass.
- Исключён Pixelify Sans: в апстриме нет букв О и П.

### Субтитры

- 25 пресетов, 5 режимов подсветки слова, любое разрешение из канваса.
- Перенос по метрикам, уменьшение кегля только когда перенос не помогает, явный флаг
  `overflow`.
- Анимация появления, RGB-смещение, свечение, плашка за активным словом.
- `preview_caption_styles.py`: контактный лист с рамкой безопасной зоны платформы.

### Речь

- `speech_analysis.py`: классификация каждой паузы по уровню, спектру и форме.
- Защита от вырезания речи, не попавшей в границы слов.
- Звуки хезитации удаляются, слова-филлеры только показываются человеку.
- Скоростные рампы 0.90–1.20 через `rubberband`, смена скорости только на склейках,
  границы выровнены по кадрам.

### Переходы и звук

- 30 рецептов, 9 семей, бюджет энергии, планировщик с объяснением каждого решения.
- 4 перехода на custom-выражениях ffmpeg с обходом трёх ловушек: обратный прогресс,
  доступ к плоскости, геометрия при субсемплинге.
- 22 синтезированных звука с самопроверкой, SFX-шина с дакингом под речь.
- 9 обработок голоса и 6 акцентов по интервалам.

### Ядро и производительность

- `render_core.py`: пробинг кодеров настоящим кодированием, разбор причины отказа,
  4 профиля качества, честный замер выгоды от GPU-декода.
- `render_chunked.py`: чанковый рендер с возобновлением по содержимому, чистые швы.
- `media_probe.py`: поворот, VFR, неквадратные пиксели, HDR, длительности по потокам.

### Новое

- Дуальный монтаж: синхронизация по звуку с оценкой уверенности, 7 раскладок.
- Стоки: один запрос во все провайдеры, контактный лист, полный провенанс.
- 12 грейдов с измерением изменения и предупреждением о потере теней.
- Главы длинного видео по паузе и лексическому сдвигу.
- `validate_delivery.py`: громкость, геометрия, хвост, безопасная зона.

### Документация

Девять новых справочников с разбором всех измеренных особенностей libass и ffmpeg.
SKILL.md переписан под 4.0.

## 3.2.0 — 2026-07-28

- Добавлен `build_pause_safe_recut.py`: детерминированный план сокращения пауз с
  гарантией 1:1 для каждого распознанного слова.
- Добавлен `render_timeline_base.py`: единая FFmpeg-сборка A-roll, B-roll, цвета,
  sidechain-дакинга, loudness-мастеринга и 48 kHz stereo-аудио.
- Добавлен `burn_ass_captions.py` с локальным font-dir, 48 kHz stereo и реальным
  NVENC-preflight с fallback на `libx264`.
- Генератор ASS теперь ограничивает блоки и по словам, и по символам, а хвост
  каждого события зажимается по началу следующего — без двойных субтитров.
- Faster-Whisper получил проверку CUDA/CUBLAS до загрузки модели и безопасный
  fallback `auto → CPU int8`.
- Исправлен Windows-crash `environment_doctor.py` на нестандартных executable.
- Pexels/Pixabay теперь ведут накопительный provenance-манифест и используют
  кэш, привязанный к корню скилла.
- Добавлен рабочий recovery-процесс HyperFrames для повреждённого Chrome и
  ошибки `spawn EFTYPE`.
- Версия проверена на реальном вертикальном монтаже 1080×1920 с 221 словом,
  десятью смысловыми B-roll-интервалами и HyperFrames-графикой.

## 3.1.0 — 2026-07-28

- Добавлен режиссёрский recut длинных пауз с гарантией сохранения каждого слова.
- Зафиксирован спокойный cold open: установочный план 2–4 секунды и не более двух склеек в первые 5 секунд.
- Разделены lip-sync и voice-over: видимое лицо запрещено поверх перенесённой фразы.
- Пользовательские исходники получили явный приоритет над скачанным стоком.
- Добавлен реальный рабочий процесс музыки Pixabay с локальной копией, лицензией, SHA-256 и предупреждением Content ID.
- Добавлены `remap_recut_timeline.py`, `register_music_asset.py`, `DIRECTORIAL_RECUT.md` и `PIXABAY_MUSIC.md`.
- Уточнены дакинг, J/L-cut, ambience и музыкальный подъём после последнего слова.

## 3.0.0 — 2026-07-28

- Добавлен обязательный полноформатный анализ роликов длиннее 90 секунд.
- Добавлен рейтинг окон по движению, резкости и экспозиции без зависимости от OpenCV.
- Pexels/Pixabay переведены на безопасный двухэтапный поиск: сначала кандидаты, затем выбранные ID.
- Добавлен 24-часовой кэш запросов и лицензионный манифест сетевых материалов.
- Настоящие ключи читаются только из игнорируемого `.env`; статус не раскрывает значения.
- Добавлен набор из шести кириллических OFL-шрифтов из официального Google Fonts.
- Добавлен автономный аудит кириллицы и локальных лицензий шрифтов.
- Добавлены пять готовых стилевых идентичностей титров, включая референсный RGB/neon и moto.
- Генератор ASS научился читать пресеты и строить аккуратный регистрационный fringe.
- Зафиксировано, что публичный Pixabay API не является API музыкальных треков.
- Добавлены `agents/openai.yaml`, новые руководства и расширенные проверки Windows/Unicode.

## 2.1.0 — 2026-07-28

- Удалён опасный выбор крупнейшего видео из архива.
- Добавлен реестр всех исходников и SHA-256.
- Добавлена пословная транскрибация Faster-Whisper.
- Добавлен поиск повторов на стыке нескольких исходников.
- Добавлена единая глобальная шкала слов.
- Добавлена безопасная склейка видео и родного звука одним фильтром.
- Добавлены пословные ASS-субтитры и карта титров.
- Добавлены проверки выдуманного текста, покрытия слов и первого титра.
- Добавлена проверка полного окончания, последнего кадра и аудиопакета.
- Добавлены кадры контроля на точных временных метках слов.
- Добавлены правила движения статичных б-роллов без деформации.
- Обновлены официальный процесс и навыки HyperFrames.
- Удалён файл с настоящим ключом Pixabay.
