Негативные запросы и исключения
Что следует исключить: размытость, водяной знак, уродливые и искажённые элементы — эффективное использование негативных запросов.
«Негативные запросы и исключения» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.
Что такое негативные промпты
Негативные промпты указывают модели изображений, что не следует включать в сгенерированное изображение. Они отделены от позитивного промпта и направляют процесс генерации в сторону от нежелательных артефактов, стилей и элементов. Изначально это была функция Stable Diffusion, но затем идея распространилась на другие модели генерации изображений.
Синтаксис негативного промпта в Stable Diffusion
В Stable Diffusion негативные промпты передаются как отдельный параметр. Модель воспринимает их как антиуправление: во время генерации она активно отдаляется от понятий, указанных в негативном промпте.
import requests
SD_API_URL = 'http://localhost:7860/sdapi/v1/txt2img'
def generate_sd_image(positive_prompt, negative_prompt, steps=30, cfg_scale=7):
payload = {
'prompt': positive_prompt,
'negative_prompt': negative_prompt,
'steps': steps,
'cfg_scale': cfg_scale, # 7-12 recommended
'width': 512,
'height': 512,
'sampler_name': 'DPM++ 2M Karras'
}
response = requests.post(SD_API_URL, json=payload)
return response.json()
# Example call with negative prompt
positive = (
'portrait of a young woman, soft natural light, '
'professional photography, sharp focus, elegant'
)
negative = (
'blurry, watermark, text, logo, ugly, distorted, '
'deformed, extra fingers, extra limbs, bad anatomy, '
'low quality, low resolution, grainy, noisy, '
'oversaturated, harsh shadows'
)
result = generate_sd_image(positive, negative)
print('Generated:', len(result.get('images', [])), 'images')Универсальный негативный промпт для качества
Стандартный набор терминов для негативного промпта повышает качество результата почти для любой темы. Запомните его или сохраните как отправную точку по умолчанию.
# Universal quality negative prompt
QUALITY_NEGATIVES = [
# Technical quality issues
'blurry', 'out of focus', 'low quality', 'low resolution',
'pixelated', 'grainy', 'noisy', 'compressed artifacts', 'jpeg artifacts',
# Anatomical distortions (common AI failure mode)
'extra fingers', 'extra limbs', 'extra arms', 'deformed hands',
'bad anatomy', 'malformed', 'mutated', 'disfigured',
# Unwanted elements
'watermark', 'text', 'logo', 'signature', 'caption',
'border', 'frame', 'username',
# Stylistic failures
'ugly', 'poorly drawn', 'amateur', 'sketch',
'unfinished', 'rough draft',
# Color problems
'oversaturated', 'washed out', 'overexposed', 'underexposed'
]
UNIVERSAL_NEGATIVE = ', '.join(QUALITY_NEGATIVES)
print('Universal negative prompt:')
print(UNIVERSAL_NEGATIVE[:200], '...')Негативные промпты для анатомии и тела
Модели ИИ для генерации изображений известны тем, что плохо справляются с кистями рук и пальцами. Специальные негативные промпты для анатомии значительно уменьшают количество таких артефактов при создании изображений человеческих фигур.
ANATOMY_NEGATIVES = [
# Hand and finger issues
'extra fingers', 'missing fingers', 'deformed fingers',
'fused fingers', 'too many fingers', 'six fingers',
'wrong number of fingers', 'extra hands', 'floating hand',
# Face issues
'distorted face', 'asymmetrical face', 'multiple faces',
'merged faces', 'duplicate head', 'two heads',
'extra eyes', 'missing eyes', 'heterochromia (if not desired)',
# Body proportions
'extra legs', 'extra arms', 'floating limbs',
'bad proportions', 'unrealistic body proportions',
'torso too long', 'missing torso',
# Skin
'skin blemishes', 'skin texture issues'
]
BODY_NEGATIVE = ', '.join(ANATOMY_NEGATIVES)
# Full portrait negative prompt combining quality + anatomy
PORTRAIT_NEGATIVE = UNIVERSAL_NEGATIVE + ', ' + BODY_NEGATIVE
print('Portrait negative length:', len(PORTRAIT_NEGATIVE.split(',')), 'terms')Исключение стилей с помощью негативных промптов
Негативные промпты позволяют исключать нежелательные стили — это особенно полезно, когда термины стиля в позитивном промпте привлекают близкие стили, которых вы хотите избежать. Распространённые исключения стилей:
style_exclusion_examples = [
{
'goal': 'Oil painting portrait without cartoonish look',
'positive': 'oil painting portrait, classical technique, highly detailed',
'negative': 'cartoon, anime, illustration, flat colors, cel-shaded, vector'
},
{
'goal': 'Photorealistic image without HDR over-processing',
'positive': 'photorealistic landscape, natural light, DSLR quality',
'negative': 'HDR, hyper-saturated, over-processed, Instagram filter, tone-mapped'
},
{
'goal': 'Dark fantasy without gore',
'positive': 'dark fantasy warrior, dramatic lighting, detailed armor',
'negative': 'gore, blood, violence, disturbing content, horror'
},
{
'goal': 'Vintage look without actual age degradation',
'positive': 'vintage 1960s photograph, film grain, warm tones',
'negative': 'deteriorated, damaged, torn, stains, yellowed, faded'
}
]
for ex in style_exclusion_examples[:2]:
print(f'Goal: {ex["goal"]}')
print(f'Negative: {ex["negative"][:60]}...')
print()Синтаксис исключений в DALL-E
В DALL-E 3 нет отдельного поля для негативного промпта. Вместо этого исключения естественно формулируются в позитивном промпте с помощью слов «avoid», «without», «no» или «do not include».
import openai
client = openai.OpenAI(api_key='YOUR_API_KEY')
# DALL-E 3: exclusions in the positive prompt
dalle_prompt_with_exclusions = (
'A professional portrait photograph of a businesswoman in a modern office. '
'Natural window light, shallow depth of field, warm tones. '
'Do not include: any text, watermarks, logos, or captions. '
'Avoid: cartoon or illustrated style, anime, artificial-looking skin. '
'The image should have no distracting background elements. '
'Realistic and natural — not over-processed or filtered.'
)
response = client.images.generate(
model='dall-e-3',
prompt=dalle_prompt_with_exclusions,
size='1024x1024',
quality='hd',
n=1
)
image_url = response.data[0].url
print('Generated image URL:', image_url[:60], '...')Сила негативного промпта и шкала CFG
В Stable Diffusion шкала CFG (управление без классификатора) определяет, насколько сильно промпт — как позитивный, так и негативный — влияет на генерацию. Чем выше CFG, тем точнее соблюдается промпт, но тем выше вероятность появления артефактов.
# CFG scale guide for Stable Diffusion
cfg_guide = {
3: 'Very loose adherence, creative/random, may ignore negative prompts',
5: 'Balanced: creative but follows prompts generally',
7: 'Standard: good balance of quality and adherence (recommended default)',
10: 'Strong adherence: follows both positive and negative prompts closely',
12: 'Very strong: highly literal, may oversaturate colors or cause artifacts',
15: 'Extreme: usually causes artifacts, rarely useful'
}
# Parenthetical weighting in Stable Diffusion
# Surround a term with () to increase its weight
# surround with [] to decrease its weight
weighted_negative = (
'(blurry:1.3), (extra fingers:1.5), watermark, '
'[slight noise:0.5], text'
# extra fingers gets 1.5x negative weight (most important to avoid)
# blurry gets 1.3x negative weight
# slight noise gets reduced 0.5x weight (tolerate a little)
)
print('CFG=7 (recommended default) balances quality and prompt adherence')
print('Weighted negative example:', weighted_negative[:80], '...')Создание библиотеки негативных промптов
Для разных сценариев использования нужны разные наборы негативных промптов. Создайте библиотеку негативных промптов для отдельных предметных областей, которые можно сочетать друг с другом для любой задачи генерации.
NEGATIVE_PROMPT_LIBRARY = {
'quality_base': (
'blurry, low quality, low resolution, pixelated, '
'watermark, text, logo, signature'
),
'anatomy': (
'extra fingers, deformed hands, bad anatomy, '
'extra limbs, distorted face'
),
'portrait_specific': (
'double chin exaggerated, skin blemishes, '
'red eye, harsh shadows on face'
),
'landscape_specific': (
'overcast flat light, washed out colors, '
'lens flare, chromatic aberration'
),
'product_photo': (
'shadow on product, uneven background, '
'reflection glare, dust spots'
),
'no_style_bleed': (
'anime, cartoon, illustration, painting, '
'sketch (when photorealism is desired)'
)
}
def compose_negative(*keys):
return ', '.join(NEGATIVE_PROMPT_LIBRARY[k] for k in keys)
# Portrait generation
portrait_neg = compose_negative('quality_base', 'anatomy', 'portrait_specific')
print('Portrait negative:', portrait_neg[:100], '...')
# Product photo generation
product_neg = compose_negative('quality_base', 'product_photo', 'no_style_bleed')
print('Product negative:', product_neg[:100], '...')Когда негативные промпты не срабатывают
Негативные промпты не дают гарантии: они снижают вероятность появления нежелательных элементов, но не устраняют их полностью. Понимание причин сбоев помогает формировать реалистичные ожидания.
negative_prompt_limitations = {
'Failure: Concept too abstract': {
'problem': '"bad" is too vague for the model to act on',
'fix': 'Use specific concrete terms: "blurry", "deformed", "watermark"'
},
'Failure: Contradiction with positive prompt': {
'problem': 'Positive: "detailed painting" | Negative: "painting"',
'fix': 'Narrow negative to the specific aspect: negative: "amateur painting, rough sketch"'
},
'Failure: Too many negative terms dilute effect': {
'problem': '200-word negative prompt where each term gets minimal weight',
'fix': 'Limit to 15-20 terms. Use weighting for most critical: "(extra fingers:1.5)"'
},
'Failure: Watermarks still appear': {
'problem': 'Some model checkpoints are strongly trained on watermarked data',
'fix': 'Use a different model checkpoint or use an inpainting pass to remove'
}
}
for failure, info in negative_prompt_limitations.items():
print(f'{failure}')
print(f' Problem: {info["problem"]}')
print(f' Fix: {info["fix"]}')
print()Проверка эффективности негативных промптов
Систематически проверяйте, какие негативные промпты действительно улучшают результаты в вашем конкретном сценарии. Выполняйте генерацию с негативными промптами и без них, а затем сравнивайте результаты при фиксированном начальном значении.
import requests
SD_API_URL = 'http://localhost:7860/sdapi/v1/txt2img'
def test_negative_prompts(positive, negative_variants, seed=42, steps=30):
results = []
for label, negative in negative_variants.items():
payload = {
'prompt': positive,
'negative_prompt': negative,
'seed': seed, # fixed seed for fair comparison
'steps': steps,
'cfg_scale': 7
}
response = requests.post(SD_API_URL, json=payload)
results.append({
'label': label,
'negative': negative[:60] + '...',
'image_count': len(response.json().get('images', []))
})
return results
# Test different negative prompt levels
variants = {
'no_negative': '',
'quality_only': 'blurry, low quality, watermark',
'anatomy_added': 'blurry, low quality, watermark, extra fingers, bad anatomy',
'full_library': compose_negative('quality_base', 'anatomy', 'portrait_specific')
}
print('Testing negative prompt variants with fixed seed...')
print('Compare output images to identify which negative terms have the most impact.')Параметр --no в Midjourney
Midjourney использует параметр --no как эквивалент негативного промпта. Синтаксис отличается, но идея та же: добавляйте --no [term1] [term2] в конец промпта.
# Midjourney negative prompt syntax using --no parameter
midjourney_prompts = [
# Basic exclusion
'professional headshot portrait, soft studio lighting, --no text watermark logo background',
# Style exclusion
'oil painting of a medieval castle, dramatic lighting --no modern cars people telephone wires',
# Anatomy
'full body character art, hero pose --no extra fingers deformed limbs bad anatomy',
# Content exclusion
'children\'s book illustration of a forest --no violence scary dark horror'
]
# Midjourney also supports emphasis with :: weighting
weighted_midjourney = (
'A serene Japanese garden::2, cherry blossoms::1.5, '
'koi pond, stone lantern --no people tourists modern buildings::3'
# ::2 = 2x weight on the garden
# ::3 on the no-people exclusion = very strong exclusion
)
for prompt in midjourney_prompts[:3]:
print('Midjourney:', prompt[:70], '...')Быстрая проверка
Какая техника Stable Diffusion усиливает влияние определённого негативного термина по сравнению с остальными?
Кратко о негативных промптах
Негативные промпты — мощный инструмент для управления генерацией изображений и устранения нежелательных качеств:
- Stable Diffusion: отдельный параметр
negative_prompt; поддерживает взвешивание в скобках - DALL-E 3: используйте «avoid», «without» и «do not include» в позитивном промпте
- Midjourney: добавляйте
--no [terms]к промпту - Универсальные негативные термины: размытость, низкое качество, водяной знак, текст, лишние пальцы
- Шкала CFG: определяет, насколько сильно позитивные и негативные промпты направляют генерацию
- Ограничения: снижают вероятность появления нежелательных элементов, но не гарантируют их исключение; максимум 15–20 терминов
Изучай AI Prompt Engineering с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 53
- Уроки
- 199
Часто задаваемые вопросы
Урок «Негативные запросы и исключения» бесплатный?
Да — полный текст урока «Негативные запросы и исключения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.
Чему я научусь в уроке «Негативные запросы и исключения»?
Что следует исключить: размытость, водяной знак, уродливые и искажённые элементы — эффективное использование негативных запросов. Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Prompt Engineering?
Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Негативные запросы и исключения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Prompt Engineering?
Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Анатомия запроса для генерации изображений
- Описание стиля и художественного материала
- Негативные запросы и исключения
- Итеративное уточнение запросов для изображений