Product

One photo. A full EU 1169/2011 compliance sheet.

1 · What goes in, what comes out

From a label photo to a decision-ready sheet

Etiq accepts the artefacts a small food producer actually has on hand — a phone photo of the jar, a supplier PDF, a design proof — and returns one artefact: the compliance sheet.

Inputs
  • Jar
    Phone photo of a curved glass jar under shop lighting.
  • Pouch
    Flexible pouch, crinkled surface, matte or gloss.
  • Bottle
    Cylindrical bottle, foil label, partial reflections.
  • Artwork PDF
    Vector proof exported from Illustrator or InDesign.
Output
Compliance sheet

Product identity, mandatory mentions, allergen check, findings with rule references, and a print-ready corrected copy — in the target market's language.

Confiture d'abricot 350 g
France · EU 1169/2011
74 / 100
RuleSeverityFindingFix
Art. 21 §1(b)ViolationTrace allergens (hazelnuts, milk) are declared but not emphasised in the ingredient list.Bold 'fruits à coque' and 'lait' in the 'peut contenir des traces' statement.
Art. 24 §2ViolationDurability date reads 'DDM 09/2026' — missing the 'À consommer de préférence avant' wording required by Annex X.Print as 'À consommer de préférence avant fin 09/2026'.
Art. 9(1)(e)ReviewNet quantity '350 g' present, but the metrological '℮' sign is missing.Print '350 g ℮' if the container is filled by weight.
Annex XIIIOKNutrition declaration per 100 g present (energy, carbs, sugars, protein, salt).No change required.
Corrected label copy
Confiture d'abricot — 350 g ℮
Ingrédients : abricots 55 g/100 g, sucre, gélifiant (pectines), acidifiant : acide citrique. Peut contenir des traces de **fruits à coque** et de **lait**.
À consommer de préférence avant fin 09/2026 · Lot AB-2409
Après ouverture, à conserver au réfrigérateur.
Conserverie du Verger, 12 rue des Abricots, 84000 Avignon (France).
2 · Why this needs a vision model

The parts a keyword scanner can't reach

Rule-based tools handle the mechanical checks. A vision model is needed for the judgement calls that make or break a label audit.

What rule-based software can do here
  • Check ingredient text against a keyword list of known allergens.
  • Validate date syntax (DD/MM/YYYY, MM/YYYY, YYYY).
  • Flag missing fields when the label is already structured data.
  • Compare declared net quantity against a numeric range.
What only a vision model can do
  • +Read a curved foil label under uneven lighting where OCR alone gives up.
  • +Decide whether allergen emphasis is visually adequate — bold weight, contrast, size relative to the ingredient list.
  • +Judge whether a claim like "NO ADDED SUGAR" is substantiated when honey appears in the ingredients.
  • +Infer the legal denomination from a stylised brand name when the required generic name is missing.
3 · The pipeline

Five stages from photo to sheet

  1. 01
    Photo
    PNG or JPG of the label, up to 8 MB, uploaded directly from the browser.
  2. 02
    GPT-4o vision
    The image is sent to OpenAI with a system prompt scoped to EU 1169/2011.
  3. 03
    Structured Outputs
    A strict JSON schema forces every field to be present and typed.
  4. 04
    INCO rule pack
    Post-processing maps each finding to the exact article and severity.
  5. 05
    Compliance sheet
    The sheet and corrected copy are rendered in the market's language.
4 · The output schema

What the edge function actually returns

The same JSON shape powers the demo, the private dashboard and any future API. Every field is required by the schema; unknown values return null rather than being omitted.

response_format · json_schema · strict
{
  "product_name": "string",              // Legal denomination as printed, not the brand.
  "ingredients": ["string"],             // Ordered list, decreasing by weight, as read from the label.
  "allergens_detected": ["string"],      // Allergens found in the ingredient list, mapped to Annex II.
  "allergen_emphasis_ok": boolean,       // True only if each allergen is visually emphasised.
  "mandatory_mentions": {                // Presence check for the four Art. 9 mentions.
    "net_quantity": boolean,
    "durability_date": boolean,
    "storage_conditions": boolean,
    "operator_name_address": boolean
  },
  "violations": [                        // One entry per finding, with rule reference and suggested fix.
    {
      "rule_ref": "string",
      "severity": "ok" | "review" | "violation",
      "finding": "string",
      "fix": "string"
    }
  ],
  "compliance_score": 0-100,             // 0 to 100; deductions are weighted by severity.
  "corrected_label_text": "string"       // A print-ready block of copy that resolves every violation.
}
5 · Accuracy and limits

What it handles well, what it doesn't

Handles well
  • Flat or lightly curved labels shot straight on.
  • Printed type at 4 pt or larger, in a standard European language.
  • Ingredient lists, net quantities, durability dates, allergen emphasis.
  • French and EU-generic market at launch.
Still struggles with
  • Heavy glare, foil reflections that erase whole lines of type.
  • Handwritten labels and hand-stamped batch codes.
  • Type smaller than 4 pt, or dark ink on a dark background.
  • Non-Latin scripts and languages not yet in the rule pack.
Measured demo latency
18 to 24 seconds end-to-end per label, dominated by the vision call.
Etiq is an audit assistant, not legal advice. Every output must be reviewed by a qualified labelling expert before printing.