Prompt Weighting
prompt weighting — локальный вес фрагментов текстового условия
Prompt Weighting усиливает или ослабляет отдельные фрагменты текстового условия до генерации. Запись вроде `(красный шарф:1.2)` работает только там, где интерфейс умеет её разобрать и передать изменённые embeddings или conditioning модели. Вес меняет влияние концепта, но не задаёт точный размер, положение или обязательное появление объекта.
Коротко
Prompt Weighting — способ изменить относительное влияние части промпта. Интерфейс выделяет фразу, применяет к соответствующим токенам или embeddings коэффициент и передаёт модели новое conditioning. Значение
1.0обычно нейтрально, больше единицы усиливает фрагмент, меньше единицы ослабляет — если выбранный parser и pipeline поддерживают такую запись.
Это мягкое управление, а не команда компоновщику. Вес может сделать красный шарф заметнее, но не гарантирует, что он займёт ровно треть кадра или окажется на нужном плече.
Где на самом деле работает вес
Иллюстратор пишет: «портрет женщины в кафе, красный шарф, медная кофемашина, тёплый свет». В результате кофемашина перетягивает внимание, а шарф едва виден. Он пробует (красный шарф:1.2) и делает новую генерацию с тем же seed.
Скобки сами по себе модель не понимает. Сначала текст получает parser интерфейса. Он распознаёт специальную запись, связывает коэффициент с фрагментом и передаёт текстовому энкодеру или следующему этапу conditioning уже изменённые данные.
Отсюда главный практический вывод: одна и та же строка может вести себя по-разному в ComfyUI, AUTOMATIC1111, Diffusers с внешней библиотекой и закрытом сервисе. Где-то синтаксис поддерживается встроенно, где-то нужен отдельный helper, а где-то скобки останутся обычными символами текста.
Что меняется внутри
Промпт сначала разбивается на токены. Одна человеческая фраза может занять несколько токенов, а одно редкое слово — распасться на части. Затем текстовый энкодер превращает последовательность в embeddings, из которых pipeline строит conditioning для модели.
Prompt weighting вмешивается в этот путь. Конкретная реализация может масштабировать токенные embeddings, нормализовать результат, обрабатывать chunks и pooled embeddings собственным способом. Поэтому объяснение «вес напрямую умножает cross-attention на 1,2» слишком буквальное: пользователь задаёт коэффициент, но место его применения определяет код pipeline.
На результат дополнительно влияют:
- tokenizer и число текстовых энкодеров;
- способ работы с длинным промптом и его chunks;
- нормализация embeddings;
- positive и negative conditioning;
- архитектура генеративной модели;
- guidance, sampler, seed и другие части workflow.
Синтаксис в ComfyUI и AUTOMATIC1111
В стандартной ноде ComfyUI CLIPTextEncode документация приводит такие формы:
(beautiful:1.2) усилить
(beautiful:0.8) ослабить
(beautiful) применить стандартное усиление интерфейса
Обычные круглые скобки дают коэффициент, заданный реализацией; в документации ComfyUI это 1.1. Если скобки нужны как буквальная часть текста, их можно экранировать обратной косой чертой: \(word\).
AUTOMATIC1111 также поддерживает emphasis через вложенные круглые скобки и явную запись (phrase:weight). Например, ((tuxedo)) и (tuxedo:1.21) показываются в официальном описании как два способа усилить фрагмент.
Внешне синтаксис похож, но это не обещает побитно одинаковое conditioning. Парсеры, обработка длинного текста и нормализация различаются. Перенос prompt между интерфейсами лучше проверять на одном checkpoint, seed, sampler и размере изображения.
Diffusers и готовые embeddings
В Diffusers weighting не следует считать свойством любой текстовой строки. Pipeline может принимать заранее подготовленные prompt_embeds и pooled_prompt_embeds, а helper-библиотека строит их из weighted prompt.
Документация Diffusers показывает такой маршрут через sd_embed; в других руководствах для подготовки embeddings встречается Compel. Поддержка зависит от конкретной функции и архитектуры. Поэтому строка с (cat:1.4) в обычном вызове pipeline не обязана автоматически получить тот же смысл, что в ComfyUI.
Некоторые helpers умеют работать с несколькими семействами, включая модели с несколькими текстовыми энкодерами. Это не означает одинаковую полезность weighting. Если модель и без него хорошо следует естественному языку, разница может быть небольшой или менее предсказуемой.
Как подбирать вес
Надёжный эксперимент начинается с нейтрального промпта. Сначала стоит убедиться, что в нём ясно названы главный объект, действие, окружение и композиция. Weighting полезен после этого — как тонкая коррекция конкурирующих концептов.
Порядок проверки простой:
- Зафиксировать модель, VAE, seed, sampler, scheduler, steps, guidance и размер.
- Сохранить исходник с нейтральным весом.
- Изменить коэффициент только у одной фразы.
- Сравнить несколько небольших шагов вокруг
1.0. - Повторить на нескольких seed, если вывод важен не для одного кадра.
Например, вместо резкого прыжка к 2.0 можно проверить 1.0, 1.1, 1.2 и 1.3. Это не универсальный рекомендуемый диапазон, а удобная сетка для диагностики. Если концепт не появляется совсем, причина может быть в формулировке, токенизации, данных модели или конфликте композиции — дальнейшее усиление не обязательно поможет.
Пример на практике
Дизайнер собирает обложку: взрослая героиня в красном шарфе сидит у окна, на заднем плане видна медная кофемашина. Первый кадр красивый, но блестящий металл становится главным объектом.
Он оставляет seed и весь workflow неизменными и делает маленькую серию:
портрет женщины, красный шарф, медная кофемашина на фоне
портрет женщины, (красный шарф:1.15), медная кофемашина на фоне
портрет женщины, (красный шарф:1.25), (медная кофемашина:0.85) на фоне
Во втором варианте шарф становится увереннее, в третьем — металл перестаёт спорить с лицом. Но героиня всё ещё сидит слишком далеко от камеры. Weighting здесь уже не тот инструмент: для крупности полезнее переписать композицию словами, использовать reference, pose/depth control или regional conditioning.
В ComfyUI такая серия удобна тем, что conditioning, seed и sampling остаются видимыми в графе. Меняется одна строка, поэтому причина различий не теряется среди десятка одновременных правок.
Что weight не гарантирует
Коэффициент не является прямым процентом площади, яркости или вероятности появления объекта. Усиление red scarf не означает «шарф станет в 1,2 раза больше». Модель может изменить цвет, материал, число объектов, позу или общий стиль — всё зависит от связей, которые она выучила.
Фраза тоже не живёт изолированно. Слова red, silk и scarf взаимодействуют с остальным prompt и друг с другом. Если усилить только red, красный может перейти на фон, волосы или свет. Группировка осмысленной фразы обычно понятнее, чем вес одного неоднозначного токена.
Крайние значения способны увести conditioning далеко от привычного режима. Возможны пересатурация, повторение мотивов, грубые формы и потеря других деталей. Точного порога нет: он зависит от parser, энкодера и модели.
С чем часто путают
- Prompt Weighting и CFG/guidance. Weighting меняет части conditioning, guidance управляет тем, как всё условие участвует в процессе генерации.
- Prompt Weighting и Negative Prompt. Вес внутри negative conditioning регулирует его фрагмент; это не жёсткий запрет объекта.
- Prompt Weighting и Prompt Order. Порядок влияет через токенизацию, контекст и truncation, но не является числовым коэффициентом.
- Weighting и повтор слова. Три повторения добавляют токены и новый контекст; это не обязательно эквивалент коэффициенту
3.0. - Weighting и Regional Prompting. Первый меняет относительное влияние концепта, второй связывает conditioning с областью изображения.
- Weighting и ControlNet. ControlNet передаёт пространственное условие; вес текста не создаёт карту позы, глубины или краёв.
Частые ошибки и заблуждения
«1.5 означает на 50% больше объекта»
Коэффициент применяется к внутреннему представлению, а не к геометрии кадра. Размер и положение остаются результатом всей генерации.
«Скобки поддерживает сама модель»
Обычно их интерпретирует интерфейс или helper до вызова модели. Без parser они могут стать обычным текстом.
«Один синтаксис одинаков во всех программах»
Похожие записи могут давать разное conditioning. Особенно заметны различия при длинных промптах, нескольких энкодерах и сильных весах.
«Если усиление не помогло, нужно ещё больше»
Концепт может быть плохо сформулирован, конфликтовать с другим условием или требовать пространственного контроля. Экстремальный вес часто добавляет артефакты, а не решает причину.
«Вес ноль равен удалению фразы»
Это зависит от parser, токенизации и нормализации. Для чистого эксперимента ненужную фразу проще убрать и сравнить результаты отдельно.
«Новая модель делает weighting бессмысленным»
Не обязательно. Некоторые современные pipelines поддерживают weighted embeddings, но практический эффект может быть меньше. Ответ даёт тест конкретной реализации, а не название архитектуры.
Связанные термины
- Prompt — исходное текстовое условие, части которого получают веса.
- Token — единица, на которую tokenizer разбивает текст перед кодированием.
- Text Encoder — превращает токены в embeddings для conditioning.
- Embedding — числовое представление текста, которое может масштабировать weighting pipeline.
- Conditioning — данные, направляющие генерацию.
- CFG Scale — глобальный механизм guidance, отличный от локальных весов фраз.
- Negative Prompt — отдельное отрицательное conditioning.
- Regional Prompting — пространственное распределение разных условий.
- ControlNet — структурный контроль по карте или изображению.
Частые вопросы
Какой вес поставить сначала?
Начните с 1.0 и проверьте несколько небольших отклонений при фиксированном workflow. Универсального «лучшего» коэффициента нет.
Работает ли ___NSLPROTECT42___ в ComfyUI?
Стандартная документация CLIPTextEncode описывает такую запись. Итог всё равно зависит от загруженного text encoder и model pipeline.
Почему тот же prompt выглядит иначе в AUTOMATIC1111?
Интерфейсы могут по-разному разбирать веса, chunks и embeddings. Проверьте также checkpoint, VAE, sampler, scheduler, seed и параметры sampling.
Работает ли weighting с несколькими text encoders?
Может работать, если helper корректно строит все необходимые embeddings и pooled representations. Поддержка определяется конкретной библиотекой и функцией.
Можно ли взвешивать negative prompt?
Если parser поддерживает тот же синтаксис в negative field, можно менять влияние его фрагментов. Это остаётся мягким conditioning, а не гарантированным удалением.
Что делать, если нужен объект в точном месте?
Использовать инструмент с пространственным условием: маску, reference, pose/depth/edge control, региональное conditioning или компоновку исходного изображения.
Главное
Prompt Weighting — локальная правка conditioning, а не универсальная шкала внимания. Запись с коэффициентом сначала проходит через parser, затем через tokenizer, text encoder и правила конкретного pipeline. Поэтому одинаковые числа сравнивают только в одном воспроизводимом workflow.
Лучший сценарий для weighting — мягко развести уже понятные концепты: чуть усилить важную фразу или ослабить фон. Когда требуется точное положение, размер или обязательное присутствие объекта, нужен более прямой способ контроля.