Module 2 — Positive and negative prompts
Module 1 produced the BoisClair reference chair with a prompt written on gut feeling. That is enough for a demo and not enough for a brand. This module turns prompt writing into a small craft: structure, weighting, negatives that actually help, and the limits of what a text encoder understands. The chair itself does not change; what changes is the ambience it sits in.
What a prompt actually is
The text encoder (CLIP for SD 1.5, CLIP-L + OpenCLIP-G for SDXL) reads your prompt left to right and produces a fixed-length sequence of embedding vectors. The U-Net receives those vectors and steers the denoising at every scale through cross-attention. Two facts follow, and everything else in this module is a corollary.
Position matters, and earlier terms bind harder. Not because the model reads English grammar, but because early tokens dominate the average that cross-attention computes. Put the subject first, the medium second, the lighting third, the style last.
Token budget is finite. Each encoder caps at 77 tokens (SDXL sums two encoders, so effectively 154 for the SDXL base pipeline, but each still truncates at 77). "A beautifully rendered majestic oak chair, hand-crafted by a master artisan in the tradition of Danish mid-century modernism, with rich caramel patina catching the golden hour light coming through a north-facing atelier window, ..." burns the budget on adjectives before the model reaches "chair". Cut the flourishes.
The structure that works
A prompt written for consistent brand images has five slots, in this order.
- Subject. What is in the frame. "mid-century oak dining chair, four splayed legs, curved backrest".
- Medium. Photograph, illustration, render. "product photography" or "3D render, cycles".
- Composition. Framing, camera angle. "three-quarter view, eye level, centered".
- Lighting. "studio softbox lighting, soft shadow" or "golden hour, side rim light".
- Style and quality tags. "sharp focus, high detail, magazine editorial". Do not overload here — five words is a lot.
prompt = (
# subject
"mid-century oak dining chair, four splayed legs, curved backrest, "
# medium
"product photography, "
# composition
"three-quarter view, centered on neutral gray backdrop, "
# lighting
"large softbox key, gentle fill, soft ground shadow, "
# style/quality
"sharp focus, editorial catalog, high detail"
)
The gain from this structure over the paragraph form is not literary. It is that the important terms sit inside the token budget, in the position where they bind hardest, and that you can swap one slot without rewriting the whole prompt. Changing the ambience for BoisClair becomes: keep slots 1–3, change slot 4 (living-room lamp light, sunlit café terrace, minimalist showroom), keep slot 5.
Weighting terms
Two syntaxes are common. diffusers on its own accepts plain text; extensions like Compel or the prompt weighting feature of diffusers implement bracketed weights. In A1111 and ComfyUI, (term:1.4) multiplies the attention weight of term by 1.4, (term:0.6) divides it. Weights between 0.6 and 1.4 are the useful range; outside that band you either lose the term entirely or force it into a caricature that dominates the whole image.
# with the compel library, which many pipelines integrate
prompt = (
"mid-century oak (dining chair)+++, four splayed legs, "
"(warm oak wood)++, product photography, studio lighting"
)
Two heuristics survive most changes of model. Weight the subject upward when the model keeps producing a side chair instead of a dining chair. Weight the material or texture upward when the model produces plastic instead of wood. Do not weight generic quality tags — "(sharp focus:1.4)" rarely does what people hope it does.
What a negative prompt is (and is not)
The honest role of a negative prompt: it is a second, opposite conditioning signal that the sampler subtracts from the positive signal at each step. The math is noise_pos - w * (noise_neg - noise_pos) where w is the guidance scale of module 3. A negative prompt of "blurry, low quality, watermark, cropped, extra legs" pushes the trajectory away from images the encoder associates with those words.
That description already tells you two things.
A negative prompt cannot fix what the model does not know is bad. If the model has never learned that "warped perspective" looks broken, writing "warped perspective" in the negative field does very little. That is why negative prompts full of jargon copy-pasted from Reddit rarely help — they are a superstition until proven otherwise on your evaluation set.
A negative prompt cannot compose new logic. "not blurry" and "blurry" do the same thing in the negative slot: the encoder pushes away from images tagged blurry. Words like "not", "no", "without" are seen but the encoder does not obey them as logical operators. Write concrete things, not negations of things.
The negatives that reliably help are the ones that name a failure mode of the model itself: "extra fingers, deformed hands" for portraits with SD 1.5, "jpeg artifacts, low resolution" for photo-realism, "text, watermark, signature" for stock-image-adjacent prompts. For a chair, the useful negatives are "extra legs, warped seat, floating parts, cropped".
What text encoders still miss
Three limits that come up again and again on the BoisClair project.
Numeracy. "Four splayed legs" produces a chair with four legs most of the time; "seven candles on a table" produces four, five or six. Below ten, models are unreliable; above ten, unreliable and inconsistent. Do not rely on the prompt to count.
Spatial relations. "Chair to the left of a small table" is a coin toss. If the composition matters, module 6's ControlNet with a rough sketch or a depth map is the reliable path.
Multiple subjects with distinct attributes. "A red chair next to a blue chair" often produces two purple chairs, or one red-and-blue chair. Two generations combined with inpainting (module 5) beat one prompt of two subjects.
The 200-word prompts that circulate on prompt-sharing sites overfit to a specific fine-tuned model and a specific version of a UI. Ported to SDXL base with diffusers, they produce muddy results. Start from a five-slot skeleton, add one term at a time, keep what changes the image for the better.
In summary
- A prompt is a sequence of embeddings; the useful structure has five slots — subject, medium, composition, lighting, style — with the subject first and the token budget respected.
- Weight the subject and the material with values in the 0.6–1.4 band when needed; generic quality tags rarely benefit from weighting.
- A negative prompt is a second opposite conditioning signal; it can push away from named failure modes of the model, it cannot compose logic and it does not understand "not".
- Text encoders are weak at numbers, spatial relations and multiple subjects with distinct attributes; ControlNet and inpainting solve those problems better than a longer prompt.
Next module: the three knobs that decide whether the image is under-cooked, over-cooked or reproducible — steps, guidance scale, and the random seed.