jetskibayConnect
← All resources

ARTICLE / ENGINEERING

Ask for the shirt, get the vest.

Extracting one object from a photograph of several: why "extract the shirt on a white background" is not a specification, and the thirteen clauses that replaced it.

Mock studioPublic information
Ask for the shirt, get the vest
OverviewReading notesExamples & promptsFormats & downloads

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.

Open Markdown source

Published by Inspired. Fictional brand, working prototype.