AI Prompt Engineering · Lezione

Prompt negativi ed esclusioni

Cosa escludere: sfocature, filigrane, elementi sgradevoli e deformità; prompting negativo efficace

Lezione 3 di 413 passaggi

Prompt negativi ed esclusioni è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa sono i prompt negativi?

I prompt negativi indicano a un modello di immagini cosa non includere nell'immagine generata. Sono separati dal prompt positivo e indirizzano la generazione lontano da artefatti, stili ed elementi indesiderati. Inizialmente una funzionalità di Stable Diffusion, il concetto si è diffuso tra i modelli di generazione delle immagini.

Sintassi dei prompt negativi in Stable Diffusion

In Stable Diffusion, i prompt negativi vengono passati come parametro separato. Il modello li tratta come una guida inversa: durante la generazione, i concetti presenti nel prompt negativo vengono attivamente evitati.

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')

Il prompt negativo universale per la qualità

Un insieme standard di termini per i prompt negativi migliora la qualità dell'output per quasi qualsiasi soggetto. Lo memorizzi o lo salvi come punto di partenza predefinito.

# 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], '...')

Prompt negativi per anatomia e corpo

I modelli di immagini basati sull'IA hanno notoriamente difficoltà con mani e dita. Prompt negativi anatomici specifici riducono significativamente questi artefatti nella generazione di figure umane.

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')

Escludere gli stili con i prompt negativi

I prompt negativi possono escludere gli stili indesiderati: è utile quando i termini relativi allo stile presenti nel prompt positivo attirano stili affini che si desidera evitare. Esclusioni di stile comuni:

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()

Sintassi di esclusione per DALL-E

DALL-E 3 non dispone di un campo separato per il prompt negativo. Le esclusioni vengono invece scritte naturalmente nel prompt positivo usando espressioni come 'avoid', 'without', 'no' o '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], '...')

Intensità del prompt negativo e scala CFG

In Stable Diffusion, la scala CFG (Classifier-Free Guidance) controlla quanto il prompt, sia positivo sia negativo, influenzi la generazione. Un CFG più alto comporta un'aderenza maggiore, ma può causare artefatti.

# 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], '...')

Creare una libreria di prompt negativi

Casi d'uso diversi richiedono insiemi diversi di prompt negativi. Crei una libreria di prompt negativi specifici per il dominio, da combinare per qualsiasi attività di generazione.

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], '...')

Quando i prompt negativi non funzionano

I prompt negativi non sono una garanzia: riducono la probabilità che compaiano elementi indesiderati, ma non li eliminano. Comprendere quando non funzionano aiuta a definire aspettative realistiche.

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()

Verificare l'efficacia dei prompt negativi

Verifichi sistematicamente quali prompt negativi migliorano davvero i risultati per il suo caso d'uso specifico. Generi immagini con e senza prompt negativi e confronti gli output usando un seed fisso.

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.')

Parametro --no di Midjourney

Midjourney usa il parametro --no come equivalente del prompt negativo. La sintassi è diversa, ma il concetto è identico: aggiunga --no [term1] [term2] alla fine del prompt.

# 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], '...')

Verifica rapida

Quale tecnica di Stable Diffusion aumenta l'influenza di uno specifico termine negativo rispetto agli altri?

Riepilogo dei prompt negativi

I prompt negativi sono uno strumento potente per allontanare la generazione delle immagini dalle qualità indesiderate:

  • Stable Diffusion: parametro negative_prompt separato; supporta la ponderazione tra parentesi
  • DALL-E 3: usi 'avoid', 'without', 'do not include' nel prompt positivo
  • Midjourney: --no [terms] aggiunto al prompt
  • Termini negativi universali: sfocato, bassa qualità, filigrana, testo, dita in più
  • Scala CFG: controlla quanto i prompt, positivi e negativi, guidano la generazione
  • Limitazioni: riducono la probabilità, ma non garantiscono l'esclusione; massimo 15-20 termini
Gratis per iniziare

Impara AI Prompt Engineering con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
53
Lezioni
199

Domande Frequenti

La lezione «Prompt negativi ed esclusioni» è gratuita?

Sì — il testo completo di «Prompt negativi ed esclusioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Prompt negativi ed esclusioni»?

Cosa escludere: sfocature, filigrane, elementi sgradevoli e deformità; prompting negativo efficace Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Prompt Engineering?

Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Prompt negativi ed esclusioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?

Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Anatomia di un prompt per la generazione di immagini
  2. Specificazione dello stile e della tecnica artistica
  3. Prompt negativi ed esclusioni
  4. Miglioramento iterativo dei prompt per immagini
← Torna a AI Prompt Engineering