AutomationFlowsGeneral › Extract License Plate Number From Image Uploaded via an N8n Form

Extract License Plate Number From Image Uploaded via an N8n Form

ByDaniel Nolde @dnolde on n8n.io

This is a simplistic demo workflow showing how to extract a license plate number from an image of a car submitted via a form – or in more general terms showcasing how you can: use a form trigger to upload files and feed it into an LLM use a changeable LLM model for image-to-text…

Event trigger★★☆☆☆ complexityAI-powered5 nodesChain LlmFormOpenRouter ChatForm Trigger
General Trigger: Event Nodes: 5 Complexity: ★★☆☆☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #2911 — we link there as the canonical source.

This workflow follows the Chainllm → Form Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "B37wvB0tdKgjuabw",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Image to license plate number",
  "tags": [],
  "nodes": [
    {
      "id": "a656334a-0135-4d93-a6df-ca97222c9753",
      "name": "Basic LLM Chain",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -140,
        -380
      ],
      "parameters": {
        "text": "={{ $json.prompt }}",
        "messages": {
          "messageValues": [
            {
              "type": "HumanMessagePromptTemplate",
              "messageType": "imageBinary",
              "binaryImageDataKey": "Image"
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.5
    },
    {
      "id": "41a90592-2a91-40ff-abf4-3a795733d521",
      "name": "FormResultPage",
      "type": "n8n-nodes-base.form",
      "position": [
        220,
        -380
      ],
      "parameters": {
        "options": {
          "formTitle": ""
        },
        "operation": "completion",
        "completionTitle": "Extracted information:",
        "completionMessage": "={{ $json.text }}"
      },
      "typeVersion": 1
    },
    {
      "id": "c23b95d9-b7a2-4e9e-a019-5724a9662abd",
      "name": "OpenRouter LLM",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -60,
        -180
      ],
      "parameters": {
        "model": "={{ $json.model }}",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8298cd51-8c47-4bc4-af78-2c216207ef76",
      "name": "Settings",
      "type": "n8n-nodes-base.set",
      "position": [
        -340,
        -380
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1b8381dc-5b9a-42a2-8a67-cc706b433180",
              "name": "model",
              "type": "string",
              "value": "openai/gpt-4o"
            },
            {
              "id": "72aec130-ab56-4e61-b60b-9a31dd8d02e6",
              "name": "prompt",
              "type": "string",
              "value": "Extract the number of the license plate on the front-most car depicted in the attached image and return only the extracted characters without any other text or structure."
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "fae79fc9-b510-44a4-beec-4dc26dc2a13a",
      "name": "FromTrigger",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -560,
        -380
      ],
      "parameters": {
        "options": {},
        "formTitle": "Analyse image",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Image",
              "requiredField": true,
              "acceptFileTypes": ".jpg, .png"
            }
          ]
        },
        "responseMode": "lastNode",
        "formDescription": "To analyse an image, upload it here."
      },
      "typeVersion": 2.2
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "5b9c53b9-3998-4676-999d-1ba117bf6695",
  "connections": {
    "Settings": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "FromTrigger": {
      "main": [
        [
          {
            "node": "Settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter LLM": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "FormResultPage",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This is a simplistic demo workflow showing how to extract a license plate number from an image of a car submitted via a form – or in more general terms showcasing how you can: use a form trigger to upload files and feed it into an LLM use a changeable LLM model for image-to-text…

Source: https://n8n.io/workflows/2911/ — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

Image to license plate number. Uses chainLlm, form, lmChatOpenRouter, formTrigger. Event-driven trigger; 5 nodes.

Chain Llm, Form, OpenRouter Chat +1
General

This workflow uses AI to automatically generate clear and descriptive names for every node in your n8n workflows. It analyzes each node's type, parameters, and connections to create meaningful names,

n8n, Chain Llm, Output Parser Structured +4
General

This workflow generates a Product Requirements Document (PRD) and test scenarios from structured form inputs. It uses OpenRouter LLMs (GPT/Claude) for natural language generation and APITemplate.io fo

OpenRouter Chat, Chain Llm, Form Trigger +2
General

High-Level Service Page SEO Blueprint Report. Uses formTrigger, splitInBatches, httpRequest, lmChatGoogleGemini. Event-driven trigger; 33 nodes.

Form Trigger, HTTP Request, Google Gemini Chat +1
General

CV Tailor + Cover Letter (easybits). Uses formTrigger, googleSheets, @easybits/n8n-nodes-extractor, googleGemini. Event-driven trigger; 25 nodes.

Form Trigger, Google Sheets, @Easybits/N8N Nodes Extractor +3