# Reading notes

## The short version

If you only take three lines:

1. Open the instruction with the deletion — name the occluding object as
   something to remove — before describing the object you want.
2. Encode an uncertain detail as a ceiling ("show nothing beyond X"), never as
   an instruction ("add X"). The first degrades into a plainer object, the
   second into a fabricated one.
3. Name what must be absent. No lapel, no hood, no logo, no second fabric
   through the gap. An unmentioned zipper is a zipper the model may add.

## Where to slow down

**The section on the reader.** It is tempting to skip to the extraction prompt,
but the extraction step can only delete an occluder it was told about. The
`covered_by` / `covers` asymmetry — models fill the outer garment's `covers`
reliably and the inner garment's `covered_by` only sometimes — is the kind of
detail that silently removes your best clause on a third of inputs.

**Hardware as a ceiling.** This is the single most portable idea in the article
and the easiest to get backwards. Read it twice.

**The final list of thirteen clauses.** The order is not decorative. The
deletion is first because it wins that way, and the exclusions are last because
they are a check on everything above them.

## What this is not

Not a benchmark. There are no numbers, no ablations and no held-out set — the
evidence is which phrasings survived contact with real photographs and which
specific wrong answer each clause was written against. Treat it as a field
report from one pipeline, not as a measured comparison.

Not model-agnostic in its specifics. The reading pass is an OpenAI vision call
with a strict JSON schema; extraction is Pruna `p-image-edit`. The clauses are
tuned to how those two behave. The *failure modes* — surviving occluders,
invented details, upgraded finishes, drifting silhouettes — are likely to be
universal; the exact wording that defeats them may not be.

Not a tutorial. It assumes you already know how to call an image editing model
and are asking why your isolated objects come back subtly wrong.

## Read it with the code open

`src/domains.js` holds the reading prompts and the JSON schemas for every
subject. `src/pruna.js` holds `prunaPiecePrompt`, the fashion extraction
instruction, with a comment above each clause naming the failure it prevents —
those comments are the primary source this article was written from.
`src/domains.js` also holds `genericPiecePrompt`, the same argument with the
garment vocabulary removed, which is the clearest way to see which parts were
about clothes and which were about photographs.
