|
6 | 6 | workflow релиза отклонит тег, который расходится с `pyproject.toml`, и тег, для |
7 | 7 | которого нет раздела ни в одном из двух changelog'ов. |
8 | 8 |
|
| 9 | +## 0.17.0 - 2026-08-26 |
| 10 | + |
| 11 | +### Добавлено |
| 12 | + |
| 13 | +- **MiniMax-H3 Prompt Rewriter Omni** - под третью лору LightX2V, первую, которая |
| 14 | + слышит. Она обучена на Qwen2.5-Omni-7B, той самой модели, которую капшенеры |
| 15 | + этого пака уже используют, поэтому референс доходит до неё самим собой, а не |
| 16 | + чьим-то предложением о нём: картинкой, клипом, звуком. И только она из трёх |
| 17 | + обучена на **Ref2AV** - задаче полного референса, которая отвечает шестью |
| 18 | + полями вместо трёх. |
| 19 | + |
| 20 | + Один растущий вход принимает IMAGE, VIDEO или AUDIO, так что неправильного |
| 21 | + гнезда здесь нет: как назовут референс, следует из того, что он такое, а |
| 22 | + картинки нумеруются среди картинок, звуки среди звуков. Стрип под ним |
| 23 | + показывает, что подключено, в каком порядке и как будет названо, - и этот |
| 24 | + порядок и есть нумерация: перетащите вторую картинку в начало, и она станет |
| 25 | + `<Picture 1>`. Переименования здесь намеренно нет, в отличие от стрипа |
| 26 | + Universal Writer: тип входа решает, что такое референс, а *субъект* - это то, |
| 27 | + что эта лора **производит** в `subject_definitions`, а не то, что ей подают. |
| 28 | + |
| 29 | + `duration` снапится перед тем, как попасть в ход. MiniMax-H3 генерирует по |
| 30 | + сетке 17n+5 кадров на 24 fps, поэтому большинства длительностей просто не |
| 31 | + существует: просишь 10 секунд - получаешь 243 кадра, 10.13 с, и именно это |
| 32 | + число модель повторяет в строке выравнивания. Виджет остаётся тем, что вы имели |
| 33 | + в виду. |
| 34 | + |
| 35 | +- **Omni-лора в формате GGUF** - сконвертирована из safetensors LightX2V через |
| 36 | + `convert_lora_to_gguf.py` из llama.cpp и опубликована в |
| 37 | + [pytraveler/MiniMax-H3-Prompt-Rewriter-LoRA-Omni-GGUF](https://huggingface.co/pytraveler/MiniMax-H3-Prompt-Rewriter-LoRA-Omni-GGUF) |
| 38 | + в `F16` (0.65 ГБ) и `Q8_0` (0.34 ГБ, ведёт себя так же). А значит, Omni-ререйтер |
| 39 | + работает по пути llama.cpp вообще без установки пакетов, при загрузке 6.2 ГБ |
| 40 | + вместо 22.4 ГБ, которые стоит база в safetensors. |
| 41 | + |
| 42 | +- **`models_omni` и `adapters_omni` в `models.json`** - базы Qwen2.5-Omni-7B в |
| 43 | + обеих формах, в которых опубликована лора. Два похожих, но неподходящих |
| 44 | + варианта помечены в списке, а не спрятаны: Qwen2.5-Omni-**3B** - это |
| 45 | + `(wrong size for the adapter)`, а **Qwen2.5-VL-7B** - та же строка |
| 46 | + архитектуры, те же 28 блоков, та же ширина, то есть лора *прикрепится*, - это |
| 47 | + `(vision only, not an Omni build)`; различает их отсутствие аудио-энкодера в |
| 48 | + проекторе. |
| 49 | + |
| 50 | +- **Третья вкладка в Universal Rewriter, и Ref2VA вместе с ней.** Тот же промпт, |
| 51 | + те же два кадра, третья лора, один клик. Вкладке принадлежат `model_omni` и |
| 52 | + `quantization_omni`, всё выше - общее, как и раньше. |
| 53 | + |
| 54 | + Вкладка приносит и пятую задачу, и два гнезда под неё: `reference_video` и |
| 55 | + `reference_audio`, которые читает только `Ref2VA` и больше никто - у двух |
| 56 | + других лор нет слуха, а четыре кадровые задачи берут одни картинки, поэтому |
| 57 | + звук, подключённый к `FL2VA`, отклоняется по имени, а не выбрасывается молча. |
| 58 | + На `Ref2VA` всё подключённое становится референсом в порядке гнёзд: |
| 59 | + `first_frame`, `last_frame`, клип, звук. |
| 60 | + |
| 61 | + Четыре её новых выхода дописаны **после** тех трёх, что заполняет любая задача, |
| 62 | + а не вставлены между ними: ComfyUI адресует связь выхода индексом слота, и |
| 63 | + `subject_definitions` посередине сдвинул бы `overall_soundscape` во всех уже |
| 64 | + собранных на этой ноде графах. Та же ловушка, что с позициями виджетов, только |
| 65 | + этажом ниже. |
| 66 | + |
| 67 | + Четыре референса и без стрипа, тогда как нода Prompt Rewriter Omni берёт |
| 68 | + двенадцать и даёт их перетаскивать: порядок - это и есть всё правило нумерации, |
| 69 | + а при четырёх гнёздах порядок задаётся самими гнёздами. |
| 70 | + |
| 71 | +### Исправлено |
| 72 | + |
| 73 | +- **Удалённая из списка моделей секция остаётся удалённой.** Удаление записей по |
| 74 | + одной работало и раньше: `seed_offered` помнит каждое имя, которое поставляемый |
| 75 | + список когда-либо предлагал, поэтому убранное не возвращается. А вот удаление |
| 76 | + секции целиком - нет: слияние читало отсутствующую секцию как «эта установка |
| 77 | + старше неё» и копировало поставляемую целиком, при каждом запуске и навсегда. |
| 78 | + То есть секция оказалась единственной правкой, которую файл не сохранял, - в |
| 79 | + файле, весь смысл которого в том, что он ваш и его можно править. |
| 80 | + |
| 81 | + Две ситуации различаются по той же записи, по которой различаются записи |
| 82 | + внутри. Установке, которая старше секции, её содержимое никогда не предлагали, |
| 83 | + и она получает всё; тому, кто секцию удалил, предлагали каждую запись, и он не |
| 84 | + получает ничего. Нашлось при проверке, доезжают ли `models_omni` и |
| 85 | + `adapters_omni` до уже существующего пользовательского файла - доезжают, а это |
| 86 | + лежало под ними. |
| 87 | + |
| 88 | +- **Референсный кадр больше не приезжает во vision-башню в полный размер.** Qwen |
| 89 | + тратит токен на блок 28x28, поэтому картинка 1616x1616 - ровно то, что |
| 90 | + воркфлоу ComfyUI отдаёт не задумываясь, - это 3249 токенов. Две таких |
| 91 | + переполняли контекст 8k раньше, чем считалось хоть одно слово промпта, и |
| 92 | + `FL2AV` падал на `decode: failed to find a memory slot for batch of size 1316`, |
| 93 | + успев закодировать обе. `I2AV` с одной картинкой выживал - из-за чего это |
| 94 | + выглядело сломанной задачей, а не исчерпанным бюджетом. |
| 95 | + |
| 96 | + Размер плох не только этим. Скрипты инференса самой LightX2V ставят потолок |
| 97 | + картинке на процессоре - 301056 пикселей для Omni, 1024x1024 для 8B, - то есть |
| 98 | + полноразмерный кадр это ещё и форма, которой ни одна из моделей не видела при |
| 99 | + обучении. Обе ноды теперь масштабируют до потолка своей лоры, а кадру из клипа |
| 100 | + потолок ниже - 100352 пикселя, по той причине, по которой клип это много |
| 101 | + картинок. |
| 102 | + |
| 103 | + Контекст после этого считается по факту - по написанным на диск файлам, а не |
| 104 | + на глаз, - поэтому `Ref2AV` с восемью референсами расширяет его, а не падает. |
| 105 | + |
| 106 | +- **База Omni в safetensors больше не отвергается как не та модель.** Проверка, |
| 107 | + читающая `config.json`, заглядывала на один уровень - в `text_config`. А |
| 108 | + Qwen2.5-Omni держит языковую модель на два уровня ниже, в |
| 109 | + `thinker_config.text_config`, потому что в чекпоинте лежат ещё talker и |
| 110 | + вокодер, - так что наверху нет вообще никакого `hidden_size`, и база, на |
| 111 | + которой лора и обучена, объявлялась «не Qwen2.5-Omni-7B». Теперь проверка |
| 112 | + спускается вниз. |
| 113 | + |
| 114 | +- **И она теперь грузится.** У `AutoModelForImageTextToText` нет записи для |
| 115 | + `qwen2_5_omni` - только для thinker'а внутри, той половины, под которую лора и |
| 116 | + вырезана, и единственной, которая вообще пишет текст. То есть даже пройдя |
| 117 | + проверку выше, загрузка упала бы на «unrecognized configuration class». |
| 118 | + Загрузчик спускается по тем же вложенным конфигам и берёт класс из собственной |
| 119 | + таблицы Transformers. |
| 120 | + |
| 121 | +- **Забитый KV-кэш больше не выдаёт себя за нечитаемый проектор.** Строки `find a |
| 122 | + memory slot` не было среди тех, что распознаёт подсказка об ошибке, поэтому она |
| 123 | + проваливалась в заметку про форматы проекторов и отправляла читателя менять |
| 124 | + модель там, где чинилось одно число. |
| 125 | + |
9 | 126 | ## 0.16.6 - 2026-08-25 |
10 | 127 |
|
11 | 128 | ### Добавлено |
|
0 commit comments