Repository navigation
Releases: pytraveler/MiniMax-H3-Prompt-Rewriter-ComfyUI
Release list
MiniMax-H3 Prompt Rewriter 0.30.0
Added
- A clip's own sound can be a reference of its own. Click a clip's label
band in the strip of the Universal Writer or the Prompt Rewriter Omni, or tick
the new speaker box on the Universal Rewriter'sreference_videorow. On
Ref2VA the clip's sound then takes an<Audio N>of its own, numbered ahead of
every standalone sound - the order MiniMaxH3ReferenceToVideo and LightX2V's
runner number them in - and the square readsvid+a1. The Universal Writer
has the sound described as anAudio Nline just before the clip. The Omni
adapter hears it, handed over as a separate sound right before the clip, which
is the only way its upstream inference ever passes a clip's sound. A
standalone sound ahead of a sounding clip in the strip is presented after it,
so the numbers agree.referencessays which clips were counted, and
Reference Slots puts exactly those sounds onvideo_audio_N. A captioner that
cannot hear is refused before anything loads, and a clip with no sound track
is said on the node and left unnumbered. - Notices for references LightX2V's runner refuses. A Ref2VA set of sounds
alone, and a reference picture or clip narrower or wider than 1:4 to 4:1, are
both errors there. ComfyUI's MiniMaxH3ReferenceToVideo takes them without
checking, so the writers say so in a toast before they start rather than
refusing.
Changed
- Reference Slots follows the writer. With
soundtracksoff, a clip's sound
goes across exactly when the writer counted it. On, every clip gets its sound
as before, and the warning about moved labels counts only the clips the
writer left silent. - A reference clip is described over what the generator keeps of it.
MiniMaxH3ReferenceToVideo keeps no more of a reference clip than the length of
the video it makes, and LightX2V's runner cuts it there too. On Ref2VA the
Omni rewriter and the Universal Writer's captioners now sample a clip's frames
from that stretch alone, not across the whole file, and a batch of frames used
as a clip is cut to the same count. Standalone sounds are still passed whole,
because ComfyUI's generator encodes the whole of one. - The self-check lets a Ref2VA prompt cite up to
<Audio 6>, three standalone
sounds and three clip sounds. The sockets still take three standalone sounds.
Fixed
- The Omni rewriter's snapped duration agrees with LightX2V. The length is
now rounded to a whole frame before it moves up to the 17n+5 grid, which is
the order LightX2V's runner works in. Aligning the fraction instead pushed
6.6 s to 7.29 s (175 frames where H3 makes 158), 7.3 s to 8.00 s, and 15.1 s
to 15.79 s, past the 362 frames H3 makes at most - and the alignment line
quoted those lengths. The duration widget's tooltip did the same arithmetic
and has the same fix. - Two sounds or two clips on the Omni rewriter no longer show the model the
last one twice. Every reference was written into one folder under one name
per kind - each sound asaudio.wav, each clip's frames asframe_000.png
onwards - so the second overwrote the first before llama.cpp read them. Each
file is now named by its place in the turn. - A trimmed VIDEO is described over its trim. The captioners and the Omni
rewriter read a clip from the start of its file while Reference Slots handed
the generator the trimmed stretch, so the description and the clip could be
two different parts of one file. Previews and the library's thumbnails start
at the trim as well. - The Universal Rewriter's Omni tab tooltip said clips, sound and Ref2AV
were only on the Prompt Rewriter Omni node. The tab has had Ref2VA with its
clip and sound rows for a while.
Добавлено
- Собственный звук клипа может быть отдельным референсом. Щёлкните по полосе
подписи клипа в стрипе Universal Writer или Prompt Rewriter Omni либо
поставьте новую галочку с динамиком на строкеreference_videoу Universal
Rewriter. На Ref2VA звук клипа тогда получает собственный<Audio N>, раньше
всех отдельных звуков - в таком порядке их нумеруют MiniMaxH3ReferenceToVideo
и раннер LightX2V, - а квадратик читаетсяvid+a1. Universal Writer
описывает этот звук строкойAudio Nпрямо перед клипом. Omni-адаптер его
слышит: звук подаётся отдельной записью прямо перед клипом, другого способа
передать звук клипа в его исходном инференсе нет. Отдельный звук, стоящий в
стрипе раньше звучащего клипа, подаётся после него, чтобы номера сошлись.
referencesсообщает, какие клипы засчитаны, и Reference Slots кладёт на
video_audio_Nровно эти звуки. Неслышащий капшенер останавливается с
объяснением до загрузки, а клип без звуковой дорожки нода назовёт и оставит
без номера. - Уведомления о референсах, которые отклоняет раннер LightX2V. Набор Ref2VA
из одних звуков и картинка или клип уже 1:4 или шире 4:1 там считаются
ошибкой. MiniMaxH3ReferenceToVideo в ComfyUI берёт их без проверки, поэтому
писатели говорят об этом всплывающим сообщением перед запуском, а не
останавливаются.
Изменено
- Reference Slots следует писателю. С выключенным
soundtracksзвук клипа
уходит дальше ровно тогда, когда его засчитал писатель. Со включённым, как и
раньше, звук получают все клипы, а предупреждение о сдвинутых метках считает
только клипы, которые писатель оставил беззвучными. - Референсный клип описывается по той части, которую оставит генератор.
MiniMaxH3ReferenceToVideo берёт из референсного клипа не больше длины видео,
которое делает, и раннер LightX2V обрезает его там же. На Ref2VA Omni-ререйтер
и капшенеры Universal Writer теперь берут кадры клипа только из этого отрезка,
а не по всему файлу, а пачка кадров, работающая клипом, обрезается до того же
числа кадров. Отдельные звуки по-прежнему передаются целиком, потому что
генератор в ComfyUI кодирует такой звук целиком. - Самопроверка разрешает промту Ref2VA ссылаться до
<Audio 6>: три
отдельных звука и три звука клипов. Сокетов для отдельных звуков по-прежнему
три.
Исправлено
- Длительность, подогнанная Omni-ререйтером, совпадает с LightX2V. Длина
теперь сначала округляется до целого кадра и только потом поднимается до
сетки 17n+5 - в таком порядке это делает раннер LightX2V. Выравнивание дробной
части уводило 6.6 с в 7.29 с (175 кадров там, где H3 делает 158), 7.3 с в
8.00 с, а 15.1 с в 15.79 с, дальше 362 кадров, больше которых H3 не делает, -
и строка выравнивания цитировала эти длины. Подсказка виджета длительности
считала так же и исправлена так же. - Два звука или два клипа у Omni-ререйтера больше не показывают модели
последний дважды. Все референсы писались в одну папку под одним именем на
вид - каждый звук какaudio.wav, кадры каждого клипа какframe_000.pngи
дальше, - так что второй затирал первый раньше, чем llama.cpp их читал.
Теперь каждый файл назван по своему месту в запросе. - Обрезанное VIDEO описывается по своей обрезке. Капшенеры и
Omni-ререйтер читали клип с начала файла, а Reference Slots отдавал генератору
обрезанный отрезок, так что описание и клип могли быть разными частями одного
файла. Превью и миниатюры библиотеки теперь тоже начинаются с точки обрезки. - Подсказка вкладки Omni у Universal Rewriter говорила, что клипы, звук и
Ref2AV есть только на ноде Prompt Rewriter Omni. Ref2VA со строками клипа и
звука на этой вкладке есть уже давно.
MiniMax-H3 Prompt Rewriter 0.29.0
Added
- Unload model. A button on every node that has
keep_model_loaded. It
unloads what the pack is keeping in memory, at once and without a run. Until
now the only way to let a kept model go was to turn the switch off, and the
switch is an input: the node ran again and wrote the same text a second time
before it unloaded. Pressed while a node is still writing, the button waits
for that run and unloads after it. Suggested in issue #20. - ComfyUI's
Unload Modelsunloads this pack's models too. They are not
ComfyUI models, so its model management walked past them. The pack now hooks
itself intocomfy.model_management.unload_all_models, which also covers the
/freeroute, ComfyUI's out-of-memory handler and the clean-up nodes of other
packs: one of those between the writer and the sampler takes the writer out
before the video model loads.
Changed
repeat_lastreadskeep_model_loaded. A node handing back a kept
prompt, its own or one from the library, never reached the engine that
honours the switch, so the model stayed whatever the switch said. With the
switch off, such a run now unloads what the pack holds and says so in the
caption under the node.repeat_laston andkeep_model_loadedoff gives the
card back with nothing written twice.- A kept model no longer outlives a request to unload everything. This
follows from the hook, and it matters in two cases. A sampler that clears the
card for itself by calling ComfyUI's unload takes a kept writer with it, where
before the two competed for VRAM. And under--disable-smart-memoryComfyUI
unloads all models after every workflow run, sokeep_model_loadedholds
within a run and not across runs.
Добавлено
- Unload model. Кнопка на каждой ноде, у которой есть
keep_model_loaded.
Сразу и без прогона выгружает то, что пакет держит в памяти. До сих пор
отпустить оставленную модель можно было только выключив переключатель, а он
вход ноды: нода запускалась заново и писала тот же текст второй раз, прежде
чем выгрузить модель. Если нажать кнопку, пока нода ещё пишет, она дождётся
конца этого прогона и выгрузит модель после него. Предложено в issue #20. Unload Modelsв ComfyUI выгружает и модели этого пакета. Это не модели
ComfyUI, и его управление памятью проходило мимо них. Теперь пакет
встраивается вcomfy.model_management.unload_all_models, а это ещё и маршрут
/free, обработчик нехватки памяти в ComfyUI и ноды-чистильщики из других
паков: такая нода между райтером и сэмплером убирает райтера раньше, чем
загрузится видеомодель.
Изменено
repeat_lastчитаетkeep_model_loaded. Нода, которая отдаёт готовый
промт, свой или из библиотеки, не доходила до движка, где этот переключатель
соблюдается, и модель оставалась, что бы он ни говорил. Теперь при выключенном
переключателе такой запуск выгружает то, что держит пакет, и пишет об этом в
подписи под нодой. Включённыйrepeat_lastи выключенныйkeep_model_loaded
возвращают карту, и ничего не пишется дважды.- Оставленная модель больше не переживает просьбу выгрузить всё. Это
следствие хука, и оно заметно в двух случаях. Сэмплер, который расчищает
карту под себя вызовом выгрузки ComfyUI, заберёт и оставленного райтера, а
раньше они делили видеопамять. А с--disable-smart-memoryComfyUI выгружает
все модели после каждого запуска воркфлоу, так чтоkeep_model_loaded
действует внутри запуска, но не между запусками.
MiniMax-H3 Prompt Rewriter 0.28.1
Fixed
- Qwen2.5-Omni runs on Transformers 4.57. The Omni rewriter on a folder of
safetensors stopped atUnrecognized configuration class Qwen2_5OmniConfig for this kind of AutoModel: AutoModelForImageTextToText. The checkpoint is a
wrapper, and only the thinker inside it writes text; the pack found the
thinker's class through the image-text-to-text auto mapping, which lists it
from Transformers 5 on and not before. 4.57 ships the class all the same,
beside the wrapper, and when no mapping names it the pack now finds it there
by the config it is built from. Past that, a reference picture met the next
4.57 difference: its Omni processor reads the system turn as a list of parts
and failed on a plain string withstring indices must be integers. The
processor now gets every turn as parts, which the chat templates of all three
bases render exactly as they rendered the string. The requirement stays at
4.57.1. Issue #20.
Исправлено
- Qwen2.5-Omni работает на Transformers 4.57. Omni-рерайтер на папке
safetensors останавливался наUnrecognized configuration class Qwen2_5OmniConfig for this kind of AutoModel: AutoModelForImageTextToText.
Чекпоинт -- это обёртка, а текст пишет только thinker внутри неё; пакет искал
класс thinker'а через auto-маппинг image-text-to-text, а там thinker появился
только в Transformers 5. Сам класс в 4.57 есть, рядом с обёрткой, и теперь,
когда ни один маппинг его не называет, пакет находит его там по конфигу, из
которого тот строится. Дальше картинка-референс натыкалась на следующее
отличие 4.57: Omni-процессор читает системную реплику как список частей и
падал на обычной строке сstring indices must be integers. Теперь процессор
получает все реплики частями, а шаблоны чата всех трёх баз рендерят их ровно
так же, как строку. Минимальная версия остаётся 4.57.1. Issue #20.
MiniMax-H3 Prompt Rewriter 0.28.0
Added
-
Check it lists what a repository holds. A GGUF entry with a repository and
no file used to be refused for having no file -- and for having no name, if
none was typed yet. Now Check it answers the question that was being asked:
the GGUF files in that repository, as buttons, smallest first. A click puts the
file into the form, and a name in the style of the packaged entries
(Qwen2.5-Omni-7B Q4_K_M) while none of your own is typed. The lists that run a
pair get the projectors in a row of their own, formmproj, filled in by
themselves when the repository holds only one; once both halves are there the
check runs and adds up the download. A model split into parts
(-00001-of-00003.gguf) is counted and left out, because an entry names one
file and only that file is downloaded. A folder on this machine inrepois
listed the same way, and a file name the repository does not have brings up
the same buttons. A name or a size typed by hand is never replaced; a size that
disagrees with the files gets a warning instead. -
The windows can be resized. The prompt editor, the prompt library, the
Model list and the bundled prompts drag from any edge or corner, fill the
browser tab from a button in their top corner, and each kind remembers its own
size. The prompt box in the editor grows with the window. -
The library and the bundled prompts answer the keyboard. The arrow keys
walk the list without leaving the search box, Enter uses the lit record -- or
picks the lit preset -- and a double click does the same. Both open scrolled to
what the node is pointed at, preset #850 of the thousand included. -
A line in the footer says what happened. The library counts its prompts, or
how many a search has left, and says what an edit or a delete did. The Model
list counts the entries and says what was saved, deleted or put back, and how
many nodes in this graph moved to an entry's new label. All of this used to go
to the browser console, where nobody saw it.
Changed
-
Nothing typed is thrown away without a question. Escape or Cancel in the
prompt editor, in "Save the last prompt" and in the Model list's entry form
asks before closing on unsaved typing, and closes at once when nothing was
typed. Escape is ignored while a save is on its way. "Save the last prompt" no
longer closes on a click beside it. -
Delete in the library asks first. The record is gone for good -- the
library keeps no other copy -- and the question says so, and says when the
node's own choice goes with it. -
Questions and failures come in the pack's own windows rather than the
browser'salertandconfirmboxes. A dangerous question starts on Cancel,
so a reflexive Enter does not answer it. -
A change made from a window counts at once. ComfyUI looks for changes on
mouseup, which comes before the click, so Use in the library, an edited answer
switchingrepeat_laston, an+ instrquestion set with its button and the
like marked the workflow as modified only at the next click -- and Ctrl+Z took
them back together with whatever came next. They now count straight away, one
step each. Typing in a LoRA Triggers row counts as one step when the field is
left, rather than one per letter. -
The Model list's entry form no longer underlines repository ids as spelling
mistakes or offers the browser's typing history.
Fixed
-
Deleting a model entry no longer clears the nodes that use it. With nothing
on disk to fall back to, the server leaves those nodes holding the old name, so
that a run says the entry is gone rather than picking another model for them --
and the window then wrote an empty value into them anyway. They keep the name
now, and the footer says how many do. -
A server that cannot be reached no longer leaves a window stuck. Every
request from the windows now comes back with an answer while ComfyUI restarts
or is gone, so a Save button no longer stays greyed out for good. "New prompt
file" says why a file was not made, "Edit the last prompt" says why the answer
could not be read instead of opening an empty editor, a library that could not
be read says so instead of "This set is empty", and the bundled prompts try
again on the next open instead of remembering the failure. -
"Opened" on the Open models.json button appears only when the file did
open, and Open guide folder says so too.
Добавлено
-
Check it показывает, что лежит в репозитории. GGUF-запись с репозиторием,
но без файла раньше отклонялась за отсутствие файла -- и имени, если его ещё не
набрали. Теперь Check it отвечает на вопрос, который на самом деле задавался:
GGUF-файлы этого репозитория кнопками, от меньшего к большему. Клик ставит файл
в форму, а пока своего имени нет -- ещё и имя в стиле записей из пакета
(Qwen2.5-Omni-7B Q4_K_M). Спискам, которым нужна пара, проекторы показываются
отдельной строкой дляmmproj; если проектор в репозитории один, он
подставляется сам, а когда на месте обе половины, проверка запускается и
складывает размер загрузки. Модель, разбитая на части
(-00001-of-00003.gguf), подсчитывается и пропускается: запись называет один
файл, и скачивается только он. Папка на этом компьютере вrepoперечисляется
так же, а имя файла, которого в репозитории нет, выводит те же кнопки. Имя и
размер, набранные вручную, не заменяются; если размер расходится с файлами,
форма об этом предупреждает. -
Окна меняют размер. Редактор промта, библиотека, Model list и встроенные
промты тянутся за любой край или угол, кнопкой в верхнем углу разворачиваются на
всю вкладку браузера, и каждое окно запоминает свой размер. Поле промта в
редакторе растёт вместе с окном. -
Библиотеку и встроенные промты можно листать с клавиатуры. Стрелки ходят по
списку, не уводя курсор из строки поиска, Enter применяет подсвеченную запись
(или выбирает подсвеченный пресет), двойной клик делает то же самое. Оба окна
открываются прокрученными к тому, на что наведена нода, будь это хоть пресет
#850 из тысячи. -
Строка внизу окна говорит, что произошло. Библиотека считает свои промты
или сколько их осталось после поиска и говорит, что сделали правка или удаление.
Model list считает записи, говорит, что сохранено, удалено или восстановлено, и
сколько нод этого графа перешли на новую подпись записи. Раньше всё это уходило
в консоль браузера, где его никто не видел.
Изменено
-
Набранное не выбрасывается без вопроса. Escape и Cancel в редакторе промта,
в "Save the last prompt" и в форме записи Model list спрашивают, прежде чем
закрыть окно с несохранённым текстом, а если ничего не набрано, закрывают сразу.
Пока идёт сохранение, Escape не срабатывает. "Save the last prompt" больше не
закрывается кликом мимо окна. -
Delete в библиотеке сначала спрашивает. Запись удаляется насовсем: другой
копии у библиотеки нет. Вопрос так и говорит, а заодно предупреждает, если
вместе с записью сбросится выбор ноды. -
Вопросы и ошибки выводятся в собственных окнах пакета, а не в системных
alertиconfirmбраузера. В опасном вопросе фокус стоит на Cancel, чтобы
случайный Enter ничего не подтвердил. -
Изменение из окна засчитывается сразу. ComfyUI ищет изменения на mouseup,
который приходит раньше клика, поэтому Use в библиотеке, правка ответа, которая
включаетrepeat_last, вопрос+ instr, заданный кнопкой, и подобное помечали
воркфлоу изменённым только при следующем клике -- а Ctrl+Z откатывал их вместе со
следующим действием. Теперь они засчитываются сразу, каждое отдельным шагом.
Набор текста в строке LoRA Triggers становится одним шагом, когда уходишь с
поля, а не шагом на каждую букву. -
Форма записи Model list больше не подчёркивает id репозиториев как опечатки и не
подсказывает из истории ввода браузера.
Исправлено
-
Удаление записи модели больше не сбрасывает ноды, которые её используют.
Когда на диске нет файла, на который можно перейти, сервер оставляет таким нодам
старое имя, чтобы запуск сказал, что записи нет, а не выбрал за них другую
модель. Окно же всё равно записывало в них пустое значение. Теперь имя остаётся,
и внизу окна написано, сколько нод его держат. -
Недоступный сервер больше не подвешивает окна. Каждый запрос из окон теперь
получает ответ, даже когда ComfyUI перезапускается или упал, поэтому кнопка Save
больше не остаётся серой навсегда. "New prompt file" говорит, почему файл не
создан; "Edit the last prompt" говорит, почему ответ не прочитался, вместо того
чтобы открыть пустой редактор; библиотека, которую не удалось прочитать, так и
говорит вместо "This set is empty"; а встроенные промты при следующем открытии
пробуют снова, а не помнят неудачу. -
"Opened" на кнопке Open models.json появляется только тогда, когда файл
действительно открылся, и Open guide folder теперь тоже это сообщает.
MiniMax-H3 Prompt Rewriter 0.27.1
Fixed
- An MTP build of the right base is no longer the wrong size. A GGUF that
carries a speculative-decoding draft head counts it inblock_count, so a
Qwen3.6-27B built with one read as 65 blocks and the rewriter refused it as
(wrong size for the adapter). The header records the head separately, in
nextn_predict_layers; llama.cpp loads it only for--spec-type draft-mtp,
which the pack never passes, and the adapter has no tensors for it. The shape
check now compares the blocks without the head, and Check it mentions the head
when there is one. Issue #18.
Added
- A warning when the header names another model. The shape check cannot
tell Qwen3.8-27B from Qwen3.6-27B: same architecture, 64 blocks of 5120.
llama.cpp attaches the LoRA to it, to weights the LoRA was never trained on,
and until now nothing said so. The 27B, 8B and Omni rewriters now read the
names a GGUF gives itself (general.name,general.basenamewith its size
label, everygeneral.base_model) and say so on the node and in Check it when
none of them is the adapter's base. It warns and does not refuse: those fields
are optional and written by whoever quantised the file, so a file that names
nothing gets no warning, and a fine-tune that names the base is taken at its
word.
Исправлено
- MTP-сборка правильной базы больше не считается моделью не того размера.
GGUF с драфт-головой для спекулятивного декодирования включает её в
block_count, поэтому Qwen3.6-27B с такой головой читалась как 65 блоков, и
рерайтер отказывал ей с пометкой(wrong size for the adapter). Заголовок
записывает голову отдельно, вnextn_predict_layers; llama.cpp грузит её
только при--spec-type draft-mtp, который пакет никогда не передаёт, а у
адаптера для неё нет тензоров. Теперь проверка формы сравнивает блоки без
головы, а Check it упоминает голову, если она есть. Issue #18.
Добавлено
- Предупреждение, когда заголовок называет другую модель. Проверка формы не
отличает Qwen3.8-27B от Qwen3.6-27B: та же архитектура, 64 блока шириной 5120.
llama.cpp цепляет к ней LoRA, то есть к весам, на которых LoRA не обучалась, и
до сих пор об этом ничего не говорилось. Рерайтеры 27B, 8B и Omni теперь
читают имена, которые GGUF даёт сам себе (general.name,general.basename
вместе с размером, всеgeneral.base_model), и если ни одно из них не
совпадает с базой адаптера, говорят об этом на ноде и в Check it. Это
предупреждение, а не отказ: поля необязательные и заполняются тем, кто
квантовал файл, поэтому файл без имён предупреждения не получает, а файнтюну,
который называет базу, пакет верит на слово.
MiniMax-H3 Prompt Rewriter 0.27.0
Added
-
Check it reads the chat template. The 27B rewriter and the guided writers
build their prompt from the model's own template, so a GGUF without one -- the
base conversion of a model rather than the instruct one, typically -- passed
every check and then stopped on the first run with "this GGUF has no embedded
chat template". On those lists Check it now refuses such a file, and renders
the template once on a system and a user turn, so one the pack cannot render
is refused too. The captioners and the 8B and Omni rewriters leave the template
tollama-mtmd-cli, which falls back to ChatML, so there a missing one is a
warning. -
The Prompt Reducer has the Model list button. It reads the writer list, but
was missing from the table of nodes that do: no button, and an entry added in
the window never reached its dropdown until the page was reloaded. -
An
on disktag in the Model list window on every entry whose files are
already here, so choosing it downloads nothing.
Changed
-
One row per model. An entry that had downloaded its file was offered twice:
under its own name, and again as theon disk:row the folder scan found for
that same file. The scanned row is now left out when an entry already stands
for it -- on the machine this was written on, six such pairs across the five
lists. A workflow saved with theon disk:label keeps running the same file,
and is moved to the entry's label when it is opened. -
A label saved before an edit keeps working. Changing an entry's download
size, VRAM note or note changed its label, and every workflow saved with the
old one stopped at ComfyUI's "Value not in list". An entry is now found by its
name: the old label passes validation, runs the entry, and is replaced by the
new one when the workflow is opened. Renaming the entry itself still loses the
choice in other workflows, and the edit form says which of the two a change is. -
A model that is gone says so in words. A dropdown value the list no longer
has failed with "Value not in list" and forty labels; it now fails with what
to do about it -- pick another entry, or add it back with the Model list
button. Only what the dropdown can name passes: a path typed into an API
prompt is refused as before. -
Deleting an entry whose file is here moves its nodes to that file. Its
on disk:row comes back into the dropdown, and the nodes in the open graph
that used the entry move to it. With nothing on disk they keep the value and
the run says the entry is gone, rather than picking another model and starting
a download. -
The Universal Rewriter checks only the base the chosen tab runs. An 8B entry
deleted from the list stopped a graph that was running the 27B. -
Editing the list reaches every node, not just the ones on the canvas. A node
added from the library afterwards, a workflow tab switched to later and a combo
promoted out of a subgraph all went on offering the old list until the page
was reloaded. The window now has ComfyUI re-read the node definitions after
every change, in both renderers; it used to do that under Nodes 2.0 only.
Fixed
-
A model already downloaded was downloaded again once
extra_model_paths.yaml
named anLLMfolder of its own. ComfyUI puts such a folder first, and the
nodes looked for an entry's files in the firstLLMfolder only -- so
everything fetched intoComfyUI/models/LLMbefore the line was added counted
as missing, 19.5 GB for the 27B. Files are now looked for in everyLLM
folder, and only a new download goes to the first one. An interrupted second
copy may have left a.partfile in the new folder; it can be deleted. -
A model and its projector put flat in an
LLMfolder were downloaded
again. A pair is fetched into a folder named after its repository, and that
folder was the only place a pair was looked for -- so a pair sitting flat in
models/LLM, fetched by an older version or by hand, counted as missing while
Check it reported it on disk. 5 GB of Qwen3-VL-8B started downloading beside an
exact copy of itself. A flat pair now counts when both files are in the same
folder, and Check it asks the same question the node does. A single GGUF put by
hand into a folder named after its repository is found too. -
Downloads work behind an antivirus that inspects HTTPS. An antivirus that
scans encrypted connections re-signs huggingface.co with a root certificate it
installs in the Windows store, so the browser opens the site and every
download from this pack stopped at "self-signed certificate in certificate
chain":requestschecks certifi's bundle and nothing else. The pack's own
requests -- the file listing, the transfer, Check it, the guides, the llama.cpp
binaries -- now trust the system store as well as certifi. Verification stays
on. A certificate that neither trusts gets a message saying what is likely in
the way, and does not spend five retries on it.huggingface_hubandhf_xet
bring their own TLS, so thehuggingface_hubdownloader still fails there; its
error now says so and points at the built-in transfer. -
The Universal Writer's self-check counted sockets, not labels. A picture
whose badge in the strip makes it a clip isVideo Nin the block the writer
reads, and one made a subject isSubject N; the check still counted it as a
picture. So a correct<Video 2>was reported as "cited, but only 1 video(s)
reached this node", a<Picture 5>that was never written was reported as not
cited -- and withfix_onceon, the writer was asked to write the answer again
to agree. Labels carried in onpreviouswere not counted either. The check
now reads the block the writer was given, and the memory and library checks
count a badged picture as what the prompt calls it. -
A download leaves lines in the console. Only the caption under the node
showed one, so a run that sat on a download for a minute and was cancelled left
the console blank. It now says what is fetched into which folder, where a
transfer stopped and that the next run carries on from there, and how many
files arrived.
Добавлено
-
Check it читает шаблон чата. Ререйтер 27B и писатели собирают промт по
собственному шаблону модели, поэтому GGUF без него (обычно базовая конвертация
модели, а не instruct) проходил все проверки и останавливался на первом же
запуске с "this GGUF has no embedded chat template". В этих списках Check it
теперь такой файл отклоняет, а шаблон один раз прогоняет на системной и
пользовательской репликах, так что отклоняется и шаблон, который пак не может
отрендерить. Капшенеры и ререйтеры 8B и Omni оставляют шаблон
llama-mtmd-cli, а тот без шаблона берёт ChatML, так что там его отсутствие -
предупреждение. -
У Prompt Reducer появилась кнопка Model list. Он читает список писателей,
но в таблице нод, которые это делают, его не было: ни кнопки, ни записи,
добавленной в окне, в его выпадающем списке до перезагрузки страницы. -
Метка
on diskв окне Model list у каждой записи, чьи файлы уже здесь:
выбор такой записи ничего не скачивает.
Изменено
-
Одна строка на модель. Запись, которая уже скачала свой файл, предлагалась
дважды: под своим именем и ещё раз строкойon disk:, которую сканирование
папок нашло для того же файла. Теперь строка сканирования не показывается, если
за этот файл уже отвечает запись; на машине, где это писалось, таких пар было
шесть на пять списков. Воркфлоу, сохранённый с подписьюon disk:, запускает
тот же файл, а при открытии переходит на подпись записи. -
Подпись, сохранённая до правки, продолжает работать. Смена размера загрузки,
заметки о VRAM или примечания меняла подпись записи, и каждый воркфлоу со
старой подписью останавливался на "Value not in list" ComfyUI. Теперь запись
находится по имени: старая подпись проходит проверку, запускает запись и при
открытии воркфлоу заменяется новой. Переименование самой записи по-прежнему
лишает выбора другие воркфлоу, и форма правки говорит, какой из двух случаев
перед вами. -
Пропавшая модель объясняет себя словами. Значение, которого в списке больше
нет, падало с "Value not in list" и сорока подписями; теперь - с тем, что
делать: выбрать другую запись или вернуть эту кнопкой Model list. Проходит
только то, что может назвать выпадающий список: путь, вписанный в промт через
API, отклоняется, как и раньше. -
Удаление записи, чей файл уже здесь, переводит её ноды на этот файл. Его
строкаon disk:возвращается в выпадающий список, и ноды открытого графа,
использовавшие запись, переходят на неё. Если на диске ничего нет, ноды
сохраняют значение, а запуск говорит, что записи больше нет, вместо того чтобы
подставить другую модель и начать загрузку. -
Universal Rewriter проверяет только базу выбранной вкладки. Запись 8B,
удалённая из списка, останавливала граф, который запускал 27B. -
Правка списка доходит до всех нод, а не только до стоящих на холсте. Нода,
добавленная из библиотеки после правки, вкладка воркфлоу, на которую
переключились позже, и combo, вынесенный из сабграфа, продолжали предлагать
старый список до перезагрузки страницы. Теперь после каждой правки окно просит
ComfyUI перечитать определения нод в обоих рендерерах; раньше это делалось
только под Nodes 2.0.
Исправлено
- Уже скачанная модель скачивалась заново, как только
extra_model_paths.yaml
называл свою папкуLLM. ComfyUI ставит такую папку первой, а ноды искали
файлы записи только в первой папкеLLM, поэтому всё, что было скачано в
ComfyUI/models/LLMдо появления этой строки, считалось отсутствующим - для
27B это 19.5 ГБ. Теперь файлы ищутся во всех папкахLLM, и только новая
загрузка идёт в первую. От прерванной второй копии в новой папке мог остаться
файл.part; его можно ...
MiniMax-H3 Prompt Rewriter 0.26.0
Added
-
The reference squares show what is plugged into them. On Universal Writer,
Prompt Rewriter Omni and Multi Reference Caption, a picture shows its
thumbnail, a clip its first frame with a play mark in the corner, and a sound
its waveform with a speaker and the file name. Hovering plays a clip and flips
through a batch of frames; the tooltip adds the file, the size, the frame count
and the length. A sound, after a short hover, plays its first six seconds and
lights its wave up as it goes; a press on the square stops it. The number moves
to a corner of the preview.A square wired to a loader -- Load Image, Load Video, Load Audio or
VideoHelperSuite's loaders, through reroutes too -- shows the file before
anything runs. One fed through other nodes shows what reached the node on its
last run: small JPEG thumbnails, 24 waveform bars and a six-second MP3 of each
sound are sent to the page, not the media, and a reloaded page asks for them
again.
Changed
- A reference with its own instruction is hard to miss. The band under it is
amber for+ instrand orange for= instr, and the whole square gets a ring
of the same colour. It used to be a slightly lighter band, and a question set
on one reference could go unnoticed for hours.
Fixed
-
Reference Adapter: a clip from a bundle is a clip again.
That pack puts its clips in the bundle as frames. Read by value they were
pictures and, withsplit_batcheson, one picture a frame:video_Nstayed
empty, the pictures ran over capacity, and the clip's paired soundtrack took
the place of the first standalone sound. The frames now go out as a VIDEO at
24 fps with the paired soundtrack inside it. A track not paired with a clip is
still a sound of its own. -
Captioning a high-resolution clip no longer overflows the context. The
captioner took a clip's frames at full size, and llama.cpp charges a picture
by its resolution: eight frames of a 1080p clip are over twenty thousand
tokens, and a context of 8192 refused the request whole. The pictures are now
shrunk to share what the context has left once the answer and the text are set
aside -- never more than 768 tokens a frame, which is what Qwen's own video
processor allows, and never fewer than 128. A single picture is shrunk only
when it would not fit otherwise. This is the captioning in Universal Writer,
Multi Reference Caption and Reference Caption.
Добавлено
-
Квадратики референсов показывают, что в них подключено. В Universal Writer,
Prompt Rewriter Omni и Multi Reference Caption у картинки видна миниатюра, у
клипа первый кадр со значком воспроизведения в углу, у звука волна со значком
динамика и названием файла. При наведении клип проигрывается, а батч кадров
перелистывается; подсказка добавляет файл, размер, число кадров и длительность.
Звук после короткой задержки играет первые шесть секунд, и волна загорается по
мере проигрывания; нажатие на квадратик его глушит. Номер уезжает в угол
превью.Квадратик, подключённый к загрузчику (Load Image, Load Video, Load Audio или
загрузчики VideoHelperSuite, в том числе через reroute), показывает файл ещё до
запуска. Подключённый через другие ноды показывает то, что пришло в ноду при
последнем запуске: на страницу уходят маленькие JPEG-миниатюры, 24 столбика
волны и шестисекундный MP3 каждого звука, а не само медиа, и перезагруженная страница запрашивает их заново.
Изменено
- Референс со своей инструкцией трудно не заметить. Полоса под ним янтарная
для+ instrи оранжевая для= instr, а весь квадратик обведён рамкой того же
цвета. Раньше полоса становилась лишь чуть светлее, и вопрос, заданный одному
референсу, можно было не замечать часами.
Исправлено
-
Reference Adapter: клип из бандла - снова клип. Этот пак
кладёт клипы в бандл кадрами. По значению они читались как картинки, а при
включённомsplit_batches- как картинка на кадр:video_Nоставался пустым,
картинки не влезали, а парная дорожка клипа занимала место первого
самостоятельного звука. Теперь кадры уходят как VIDEO на 24 fps с парной
дорожкой внутри. Дорожка без пары с клипом по-прежнему самостоятельный звук. -
Разбор клипа большого разрешения больше не переполняет контекст. Капшенер
брал кадры клипа в полном размере, а llama.cpp считает картинку по её
разрешению: восемь кадров клипа 1080p - это больше двадцати тысяч токенов, и
контекст 8192 отклонял запрос целиком. Теперь картинки ужимаются, чтобы
поделить то, что остаётся от контекста после ответа и текста: не больше 768
токенов на кадр, как позволяет собственный видеопроцессор Qwen, и не меньше
128. Одиночная картинка ужимается, только если иначе не влезает. Это разбор
референсов в Universal Writer, Multi Reference Caption и Reference Caption.
MiniMax-H3 Prompt Rewriter 0.25.0
Added
-
MiniMax-H3 Reference Slots: a writer's references, handed on in the order
its prompt numbers them. Reorder the sound squares on a Universal Writer and
the generated video speaks with the wrong voice.MiniMaxH3ReferenceToVideo
numbers its references by the socket they arrive on, the writers number theirs
by the strip, and with the same assets wired to both by hand the two orders
agree only until a square is dragged. Switching a reference off went wrong the
same way: gone from the prompt, still in the video.The writers now hand on what they numbered, and this node puts each reference
on the socket carrying its number --picture_2is<Picture 2>. Wire it
straight across toMiniMaxH3ReferenceToVideoonce and do the arranging in the
strip from then on. A switched-off reference is not handed on at all, and the
generator closes up its numbering around an empty socket the same way the
writer closed up its labels.Clips are decoded here and not in the writer: at 24 fps, on the canvas the
generator would scale them to anyway, and up to 15 seconds. A trimmed VIDEO is
read over its trim. A clip's own sound goes tovideo_audio_Nonly with
soundtrackson, and that is off by default -- the generator gives the sound
an<Audio N>of its own ahead of every standalone sound, the writers do not
count it, and so switching it on moves every<Audio N>in the prompt. The
summary says by how much.It is a node of its own rather than a mode of the Reference Adapter. The
adapter feeds the writers and hands a clip on as a VIDEO; this one feeds the
generator, which takes a clip as frames and its sound on a socket of its own. -
A
referencesoutput on Universal Writer, Prompt Rewriter Omni and
Universal Rewriter. Appended after every existing output, so no link in a
saved workflow moves. It carries what the prompt names and nothing else: every
switched-on square in strip order, nothing on a text-only task, and on the
Universal Rewriter only what the current tab reads.It is built from the live inputs on every path --
bypass, a library pick and
repeat_lastincluded -- and is never stored. The library and the node
memory keep text only, so records saved before this version load exactly as
they did.On the Universal Writer a picture badged as a subject goes after the pictures.
The prompt calls itSubject N, never<Picture N>, and the generator has no
subject socket, so the only number it can take without landing on a picture
the prompt names is one past the last of them.
Changed
- Example 6, References to video, goes through Reference Slots. The two
pictures used to be wired to the writer and to the generator separately,
which is exactly the arrangement that falls apart when a square is dragged.
They now reach the generator from the writer'sreferencesoutput, so the
order is set in the strip and nowhere else. The note on the canvas says how to
wire clips and sounds the same way.
Добавлено
-
MiniMax-H3 Reference Slots: референсы писателя передаются в том порядке, в
каком их нумерует его промт. Переставьте звуковые квадратики в Universal
Writer, и сгенерированное видео заговорит не тем голосом.
MiniMaxH3ReferenceToVideoнумерует референсы по сокету, на который они
пришли, писатели нумеруют свои по полосе, и когда одни и те же ассеты
подключены к обеим нодам руками, два порядка совпадают только до первого
перетащенного квадратика. Выключенный референс ломался так же: из промта
пропал, в видео остался.Теперь писатели отдают то, что пронумеровали, а эта нода кладёт каждый
референс на сокет с его номером --picture_2это<Picture 2>. Один раз
подключите её напрямую кMiniMaxH3ReferenceToVideo, а дальше расставляйте всё
в полосе. Выключенный референс не передаётся вовсе, а генератор смыкает
нумерацию вокруг пустого сокета так же, как писатель сомкнул свои метки.Клипы декодируются здесь, а не в писателе: в 24 fps, на холсте, до которого
генератор масштабировал бы их и сам, и не длиннее 15 секунд. Обрезанное VIDEO
читается по своей обрезке. Собственный звук клипа попадает наvideo_audio_N
только при включённомsoundtracks, а по умолчанию он выключен: генератор даёт
этому звуку собственный<Audio N>раньше всех отдельных звуков, писатели его
не считают, и включение сдвигает каждый<Audio N>в промте. На сколько --
скажет summary.Это отдельная нода, а не режим Reference Adapter. Адаптер кормит писателей и
отдаёт клип как VIDEO; эта кормит генератор, который берёт клип кадрами, а его
звук -- на отдельном сокете. -
Выход
referencesу Universal Writer, Prompt Rewriter Omni и Universal
Rewriter. Добавлен после всех существующих выходов, так что ни одна связь в
сохранённом воркфлоу не сдвигается. Несёт то, что названо в промте, и ничего
больше: каждый включённый квадратик в порядке полосы, ничего на текстовой
задаче, а у Universal Rewriter -- только то, что читает текущая вкладка.Собирается из текущих входов на каждом пути -- в том числе при
bypass, при
выборе из библиотеки и приrepeat_last-- и нигде не хранится. Библиотека и
память ноды держат только текст, поэтому записи, сохранённые до этой версии,
загружаются как раньше.В Universal Writer картинка с бейджем "субъект" встаёт после картинок. Промт
называет еёSubject Nи никогда<Picture N>, а сокета для субъектов у
генератора нет, поэтому единственный номер, который она может занять, не
попав на картинку из промта, -- следующий за последней из них.
Изменено
- Пример 6, References to video, идёт через Reference Slots. Раньше две
картинки подключались к писателю и к генератору по отдельности -- ровно та
разводка, которая разваливается, стоит перетащить квадратик. Теперь они
попадают в генератор с выходаreferencesписателя, так что порядок задаётся
в полосе и больше нигде. Заметка на холсте объясняет, как так же подключить
клипы и звуки.
MiniMax-H3 Prompt Rewriter 0.24.0
Added
-
MiniMax-H3 LoRA Triggers: the words an adapter answers to, kept with the
workflow and put back into the prompt. A LoRA trained with a trigger in the
caption prefix does nothing at all until that word is in the text, and no
other node in the pack has any reason to keep it: the writers write prose, the
reducer shortens it, the self-check judges it, and a word that exists to wake
an adapter three nodes later is exactly what all three drop. So it gets typed
in by hand after every run and lost on the next one -- the only place in the
pipeline where finished text is edited by hand, and the one part of a prompt
that cannot be regenerated.One row is one adapter: a grip, a tick, a name for your own use, the words
that go in verbatim, a mark saying which part of the prompt they go into, and
a cross. A row can hold several words separated by commas, which is what an
adapter with more than one trigger needs; they are checked and added one at a
time, so a row is never half-duplicated. Rows are dragged by the grip into the
order you want them, and that order is not decoration -- rows sharing a
placement are written into the prompt in list order. Outputs are the prompt,
the words this run actually added, andfindings.The list is drawn with the pack's own DOM toolkit rather than on the canvas,
so it survives ComfyUI's Nodes 2.0 renderer. -
Placement is per row, not per node. Five positions: the description, the
soundscape and the music open their own field after its label, and the top and
the end of the prompt are positions rather than fields -- which is why those
two still work on a text carrying no labels at all. The mark in the row is
short on purpose; seeing where every word is bound for without opening
anything is half of what the list is for. Where these overlap the effect
embeddings node they are worded identically, because they name the same place.The field set differs by task -- three for T2VA, six for Ref2VA -- and the
node only ever sees a text, so a placement naming a field this prompt has not
got falls back to the top and says so onfindings. Unlike an embedding
token, ordinary words do not flatten the line breaks under them, so the top of
the prompt is a safe place here. -
It checks for the word rather than removing it, and that is the difference
from the effect embeddings node. Those ten tokens are known strings and can
be cut back out, which is how unticking one removes it. These words are
somebody's own: cutting out a trigger spelleddetailwould eat the prose it
was sitting in. So a word already in the text is not added a second time --
matched on word boundaries, case-insensitively -- and unticking a row stops it
being added rather than taking it away, because the word may well have come
from the writer. Running the same text through twice changes nothing, which is
what the node needs to be safe at the tail of a graph that gets run again and
again. -
A field that says
N/Ais pointed out rather than mended. Ref2VA prompts
are full ofnon_diegetic_music: N/A, and words put at the start of one leave
a field that names something and then says there is none of it. The node says
so onfindingsand changes nothing else. Replacing the marker would be the
louder lie -- the field would then claim there is music, calledohwx face,
and the self-check reads that field -- and dropping the words would be the node
overruling a placement that was asked for on purpose. Both are decisions about
somebody else's prompt, which is exactly what this node does not make. -
Nothing is read out of the LoRA files, and that is not a shortfall. Of
forty-four adapters on the machine this was written on, one carried
trigger_word, one carried an emptytrigger_words, and none carried
ss_tag_frequency. The pack can read a safetensors header already
(embeddings.header), so this is not about cost -- the data is not there, and
an adapter often answers to several words where the metadata has room for one.
The list is yours. -
bypasson both of the nodes that write into a finished prompt. The
pack's own switch, with the purple badge in the title bar the writers have:
the prompt goes through untouched,tokenscomes back 0,addedand
findingsempty, and no file header is read.ComfyUI's own bypass is not the same thing on a node like this, which is why
the switch exists. It stands an input in for each output by matching types,
and there are three outputs here and one socket to fill them from. Measured on
the triggers node:promptarrives,findingsis handed the whole prompt as
though it were a finding, andaddedloses its link altogether -- leaving
whatever it fed with no input at all. On the embeddings nodetokensis an
INT with no INT input to stand in for it, so that link goes the same way.
Nothing reports any of it.Neither node runs a model, so this is not about VRAM: it is about judging a
prompt with the words in and with the words out, without unwiring anything.
Switching it on stops words being added; it does not take out words the text
arrived with. -
A seventh example workflow:
7 - LoRA triggers and effects. The bundled
presets into the check into both of the nodes that write into a finished
prompt, ending in four previews: the prompt, the words this run added, and
what each of the two noticed. It loads nothing and downloads nothing -- the
prompt comes from the thousand that ship with the pack.The list is set up with four rows, one per placement, so the marks read as a
column, and the wiring makes the ordering rule visible: the check measures the
text before either node lengthens it. The fourth row is switched off, which is
the shortest way to show what that does and what it deliberately does not. The
card the template browser draws beside it comes fromtools/template_cards.py
like the other six.
Добавлено
-
MiniMax-H3 LoRA Triggers: слова, на которые отзывается адаптер, живут
вместе с воркфлоу и возвращаются в промт. LoRA, обученная с триггером в
префиксе подписи, не делает ровно ничего, пока этого слова нет в тексте, — а
держать его в тексте незачем ни одной другой ноде пака: писатели пишут прозу,
редуктор её сокращает, самопроверка её судит, и слово, которое стоит там
только ради того, чтобы через три ноды проснулся адаптер, — ровно то, что все
трое выбрасывают. Значит, его дописывают руками после каждого прогона и теряют
на следующем. Это единственное место во всём конвейере, где готовый текст
правят вручную, и единственная часть промта, которую нельзя сгенерировать
заново.Одна строка — один адаптер: грип, галочка, имя для себя, слова, которые уйдут
в промт дословно, пометка о том, в какую часть промта они уйдут, и крестик. В
строке может стоять несколько слов через запятую — это то, что нужно адаптеру
с несколькими триггерами; проверяются и вставляются они по одному, так что
строка никогда не продублируется наполовину. Строки перетаскиваются за грип в
нужный порядок, и порядок этот не украшение: строки с одним размещением
уходят в промт в порядке списка. На выходе промт, слова, которые этот прогон
действительно вставил, иfindings.Список рисуется собственным DOM-инструментарием пака, а не на канвасе, — и
поэтому переживает рендерер Nodes 2.0. -
Размещение у каждой строки своё, а не одно на ноду. Пять позиций: описание,
звук и музыка открывают своё поле сразу после метки, а верх и конец промта —
это позиции, а не поля, поэтому только они и работают на тексте вовсе без
меток. Пометка в строке короткая намеренно: видеть с одного взгляда, куда что
уедет, ничего не раскрывая, — половина смысла списка. Там, где эти позиции
совпадают с нодой эффект-эмбеддингов, они названы теми же словами, потому что
это одно и то же место.Набор полей у задач разный — три у T2VA, шесть у Ref2VA, — а нода видит только
текст, так что размещение, для которого в этом промте поля нет, откатывается
наверх и говорит об этом вfindings. В отличие от токена эмбеддинга обычные
слова не схлопывают переносы строк под собой, так что верх промта здесь
безопасен. -
Нода проверяет наличие слова, а не удаляет его, — и этим отличается от ноды
эффект-эмбеддингов. Те десять токенов известны заранее и вырезаются
безопасно, поэтому снятая галочка там убирает эффект. Здесь слова
пользовательские: вырезать триггер, написанный какdetail, значит выесть
дыру в авторской прозе. Поэтому слово, которое в тексте уже есть, второй раз
не вставляется — поиск по границам слова, без учёта регистра, — а снятая
галочка перестаёт добавлять, но не убирает: слово могло прийти и от писателя.
Повторный прогон того же текста не меняет ничего, а это ровно то, что ноде
нужно, чтобы стоять в хвосте графа, который гоняют раз за разом. -
Поле, в котором стоит
N/A, нода отмечает, а не чинит. В промтах Ref2VA
сплошь и рядомnon_diegetic_music: N/A, и слова, поставленные в начало
такого поля, оставляют поле, которое что-то называет и тут же говорит, что
ничего этого нет. Нода пишет об этом вfindingsи больше не делает ничего.
Заменить маркер было бы ложью погромче — поле начало бы утверждать, что музыка
есть и называется «ohwx face», а это поле читает самопроверка, — а выбросить
слова значило бы отменить размещение, выбранное нарочно. И то и другое —
решения о чужом промте, а их эта нода не принимает. -
Из файлов LoRA не читается ничего, и это не компромисс. Из сорока четырёх
адаптеров на машине автораtrigger_wordнашёлся у одного,trigger_words—
у второго и пустой,ss_tag_frequency— ни у одного. Заголовок safetensors
пак читать умеет (embeddings.header), так что дело не в стоимости: данных
просто нет, а триггеров у адаптера бывает несколько там, где в метаданных
место ровно под одно. Сп...
MiniMax-H3 Prompt Rewriter 0.23.1
Added
-
README_ZH.md: the whole README in Simplified Chinese.
This is the full text rather than a summary: the same 43 sections in the same
order, the same screenshots, the same tables and the same measurements.It says at the top what it is. The author does not read Chinese, the
translation was made by an AI, mistakes are worth an issue, and where the two
pages disagree the English one is right.Node names, widget names, answer fields, paths, environment variables and
model names stay in English -- the policy the Languages section already
states for the Russian locale. They are identifiers, and a translated
identifier matches nothing on the node, in the workflow JSON, in this
changelog or in a search box. A node's section heading keeps its English name
and adds a Chinese gloss after it, so the name can still be copied into
ComfyUI's node search.tools/toc.pywrites its contents list and its anchors like it does for the
other two, and the doc tests cover it the same way: 43 sections, 43 internal
links, every one of them resolving.The node interface itself is not translated.
locales/zh/is a separate job.
Добавлено
-
README_ZH.md: весь README на упрощённом китайском.
Перевод полный, а не сокращённый: те же 43 раздела в том же порядке, те же
скриншоты, те же таблицы и те же замеры.В шапке честно сказано, что это такое. Автор не знает китайского, перевод
сделан ИИ, об ошибках стоит писать в issues, а при расхождении двух страниц
верна английская.Имена нод, виджетов, полей ответа, пути, переменные окружения и названия
моделей остаются английскими - ровно та политика, которая уже описана в
разделе Languages для русской локали. Это идентификаторы, и переведённый
идентификатор не совпадает ни с нодой, ни с JSON воркфлоу, ни с этим
changelog'ом, ни со строкой поиска. Заголовок раздела ноды сохраняет
английское имя и добавляет китайскую подпись после него, чтобы имя всё ещё
можно было скопировать в поиск нод ComfyUI.tools/toc.pyсобирает содержание и якоря так же, как для двух других
файлов, и тесты документации покрывают его так же: 43 раздела, 43 внутренние
ссылки, все разрешаются.Интерфейс самих нод не переведён.
locales/zh/- отдельная работа.