Skip to content

Reading pictures

A photograph often carries the text a workflow needs: what the object is, what it is made of, its colours, whether it is damaged, which department of a shop it belongs to, what to write under it. Four vision nodes read pictures with a language model and answer in text. They run on GPT-6 Luna by default — Claude and Gemini models can be chosen on the node — and are priced by the tokens they read and write: a few hundredths of a credit per picture.

Node Gives Use it for
Image Analysis (ai/image_analysis) an answer to your question, as text or as a JSON object anything you can ask: alt texts, attributes, a condition report, a comparison of photos
Image Classifier (ai/image_classifier) one of your categories, and a confidence sending each picture down the right branch
Product Description (ai/product_description) a shop listing: short and long description, key features, SEO description, tags product pages, marketplace listings, in eleven languages
Image to Prompt (ai/image_to_prompt) the prompt and negative prompt that would make the picture again “one more like this”, with Text to Image

The generative side — making and editing pictures — is in Images, where a lab uses the same vision nodes on four museum objects. This page is about the text they write.

Image Analysis takes 1 to 20 pictures on images (images_0, images_1, …) or in an image set, a prompt and an optional system_prompt, and answers like Text Generation — the same prompt craft, Max Tokens and models apply. Its strength is that the question is yours:

  • Alt texts. “What the photo shows, for a reader who cannot see it, at most 125 characters” — the length most screen readers handle comfortably.
  • Attributes for a catalogue. Object, material as it looks, main colours, style; with closed lists for anything a later step decides on.
  • A condition report. Visible damage yes or no, and what it is — useful before a listing goes out, or to send a photo back to a supplier.
  • Several pictures at once. “Which of these photos shows the front?”, “Are these two the same product?”, “Describe the set”: refer to the pictures by their order.
  • A list of pictures, each with a label. Besides images, the node reads an image set on image_set (madoo.image-set/v1): the frames of a video from Extract Scenes, each labelled with its time, or any list built with Generate JSON. Each label is sent just before its picture (Label Images), so the model can tell when or what each one is; wired images come first, and above 20 in all Image Set Limit keeps 20 spread over the set (even, the default), the first 20, or stops (fail). This is how a model that sees images but not video reads a video: see reading a video with a model that sees images.

With Response Format JSON Object the answer comes on the json port as an object, ready for schema checks and Extract. Ask the model to describe only what is visible and never to guess a date, a maker, a material it cannot see or a price — a model fills gaps with plausible inventions unless the prompt forbids it.

Image Classifier files one picture under one of the categories you list in categories — at least two, separated by commas — and returns it on category, with a confidence of high, medium or low. An optional prompt gives context: “An antiques dealer’s stock. Ceramics covers porcelain, faience and earthenware, whatever the shape.”

  • Add a category for everything else — other — and say in the prompt what each category covers. A photo that fits none then lands in other instead of being forced into the nearest one.
  • If the model answers something that is not one of your categories, the step fails with CATEGORY_NOT_IN_LIST and a message that names what it answered. It does not pick a category for it: a picture routed the wrong way costs more than a step that stops.
  • Use confidence where a mistake is expensive: send low to a person, or to a second, stronger model.
  • Categories are matched without regard to case; Ceramics and ceramics are the same.
  • For a probability per category instead of a confidence in words, several questions about the same picture, or checks such as focus and watermarks, use Decide with a Model: a choice gives the probability of every option, in about a third of a second.

The category is a text, made to choose a path: Select by Key picks the value or branch for it — a template per department, a background per product type, a model photo per garment — and Image Switch picks one of several pictures.

Product Description writes a complete listing from a product_image and up to five additional_images (back, label, detail), with an optional product_name and product_description as facts to start from. It answers on five ports:

Output What it holds
short_description one or two sentences, for a card or a preview
long_description the description for the product page
key_features the features, one per line, each starting with -
seo_meta_description the description for search engines
tags keywords, separated by commas
Setting What it does
language en, it, de, fr, es, pt, nl, pl, ja, ko, zh
tone professional, casual, luxury, technical, friendly, playful
targetPlatform generic, shopify, amazon, ebay, etsy, woocommerce: the conventions of that marketplace
productCategory, targetAudience, seoKeywords, additionalContext, brandGuidelines what the writer should know
maxLengthShort, maxLengthLong the lengths asked for (150 and 1000 by default)
includeCTA, avoidClaims a call to action at the end; no claims that cannot be verified (on by default)
substitutions names written as placeholders and then replaced: [BRAND_NAME] → your brand

It is the quickest way to a listing, and it writes with its own built-in brief, to which your settings are added. That brief is generous: in the lab, told to “describe only what the photo shows”, it still added that the shoe shows restorations and wear consistent with its age — neither of which the photo says. When every word must be backed by the photo — antiques, cosmetics, anything with legal weight — read the facts with Image Analysis first and write the listing with Text Generation and your own system prompt, or have a person approve it. The lengths, too, are asked for, not enforced: check them with a schema when they matter.

Image to Prompt writes a prompt and a negative_prompt that describe a picture for an image model. style chooses how: detailed (the default), concise, artistic or technical; instructions say what to stress — “describe it as a studio product photograph: the object, its glaze, the light, the background”. Connect both outputs to Text to Image to make “one more like this”; the Images lab does it with a teapot. The prompt is an ordinary text, so it can also be edited by a Replace or combined with others by a Template before it reaches the image step.

An antiques dealer photographs each new object once. The lab reads the photo three ways: the classifier files it in a department, Image Analysis writes the alt text and a catalogue record, Product Description writes the shop listing in Italian for Etsy.

The lab: one Object photo goes to three vision steps — Which department? (Image Classifier: ceramics, high), Inspect the object (Image Analysis in JSON mode: the catalogue record) and Write the listing (Product Description: short and long description, key features, tags).

On a Delftware shoe of 1697 from the Metropolitan Museum’s open-access collection, the reference run gave:

Step Result Credits
Which department? ceramics, confidence high — the prompt said ceramics covers every shape, so a shoe-shaped object is not filed as footwear 0.013
Inspect the object the record below 0.024
Write the listing the Italian listing below 0.047
{
"alt_text": "Blue-and-white glazed ceramic high-heeled shoe with floral decoration and a broken ankle section.",
"object": "Ceramic high-heeled shoe",
"material": "Glazed ceramic",
"colours": ["white", "blue", "brown"],
"visible_damage": true,
"damage_notes": "Large broken section at the ankle opening, with chips and losses along the edges and toe."
}

Scarpa ornamentale antica in ceramica smaltata bianca e blu, con tacco alto, decori floreali e segni del tempo.

  • Oggetto decorativo a forma di scarpa
  • Ceramica smaltata nei colori bianco e blu
  • Tacco alto e tomaia sagomata
  • Decorazioni floreali e motivi lineari
  • Craquelé, usura e sbeccature visibili

Tags: antiquariato, scarpa decorativa, ceramica antica, ceramica blu e bianca, decorazione floreale

The record names the break at the ankle; the listing calls the same thing “usura e sbeccature” (wear and chips), and its long description adds restorations — which is why the facts should come from the record, not from the listing. On a porcelain vase with two painted hummingbirds, the record came back with "visible_damage": false and no damage_notes key, as the prompt asked. The run costs about 0.08 credits.

Terminal window
node madoo-install-example.mjs lab-reading-pictures --api <your Madoo API URL> --key <key.json> --run

Photos: “Shoe”, 1697, Delftware; “Vase”, Greenwood Pottery Company, about 1884–93 — The Metropolitan Museum of Art, New York (Open Access, public domain).

Code or symptom Node What happened What to do
CATEGORY_NOT_IN_LIST Image Classifier the model answered a category that is not in your list add other; say in the prompt what each category covers
INVALID_STRUCTURED_RESPONSE Image Classifier, Image Analysis in JSON mode the answer was not the JSON object asked for try again or another model; for Image Analysis, describe the object key by key
MISSING_CATEGORIES, INSUFFICIENT_CATEGORIES Image Classifier no categories, or only one list at least two, separated by commas
AI_RESPONSE_INCOMPLETE all the model reached Max Tokens raise Max Tokens, or lower the reasoning effort
a detail that is not in the photo all the model filled a gap forbid guessing in the prompt; take facts from Image Analysis, not from a listing
a text longer than asked Image Analysis, Product Description lengths in a prompt are requests check them with a schema (maxLength)