anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow with a webhook. Post it a picture, as a public address or as base64, and gpt-4o-mini writes a stock marketplace title, a description and up to 40 keywords. The reply holds them with a ready CSV row.
Stock photo title, description and keywords from a webhook is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Webhook request
It starts when something sends a POST request to the webhook path stock-image-meta with:
A JSON reply with the title, description, keyword list and keyword count, plus a CSV row and a CSV text with its header
What you need before you start.
Vision language model
Looks at the picture with gpt-4o-mini and writes the title, description and keywords as JSON.
NeedsOpenAI API key, typed into the Authorization header
Checked by Mindket on 13 Nov 2026
This n8n workflow writes the metadata a stock marketplace asks for. Something posts it a picture, either as a public address or as base64 text. gpt-4o-mini looks at the picture and returns a title, a short description and 20 to 40 keywords. The workflow cleans the answer, builds a CSV row from it and replies to the same call. Seven nodes do the work, with no form and no sticky notes.
Stock photographers and illustrators, small agencies that upload for them, and teams with a library of images to describe. A script or an upload tool can call the webhook for each file. Skip it if your marketplace needs categories, model releases or its own fixed keyword list.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Stock photography | Contributors | Call the webhook for each new photo and paste the CSV rows into an upload sheet | A contributor posts a harbor photo and gets a title, a description and a keyword list to paste. |
| Illustration and design | Designers who sell their work | Describe each new artwork before listing it | An illustrator sends a flat vector of a mountain trail and edits the title it returns. |
| Image libraries | Marketing teams | Add searchable titles and keywords to a folder of old photos | A team loops a script over a folder and keeps every reply in one CSV. |
| Agencies | Production assistants | Prepare a client’s batch for a marketplace | An assistant runs a client’s fifty product shots through it before the upload. |
You need little n8n: import a file, paste one key and send a test request. Anything that can post JSON can call it.
Any n8n with an address the caller can reach will run it. n8n Cloud does, and so does your own server on the internet.
Build CSV Row to append the row to a sheetDownload saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. One OpenAI key is all it needs.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key that can use gpt-4o-mini |
| A caller | A script or a tool that posts JSON to the webhook |
| A picture | A public address, or base64 text |
workflow.json.Vision LLM. In its Authorization header, replace <YOUR_OPENAI_API_KEY> with your key. The brackets go, and Bearer and its space stay.Webhook and copy its test address. It ends in stock-image-meta.{ "imageUrl": "https://example.com/photo.jpg" }Post a JSON body with imageUrl for a public address, or imageBase64 for the picture itself. The call stays open while OpenAI looks at the picture, and the reply comes back in the same call. Use the reply’s csv_row for a sheet and the other fields for anything else.
| To change | Where |
|---|---|
| What the metadata asks for | The two messages in Build Vision Request |
| The model | model in Build Vision Request |
| The answer’s length | max_tokens in the same node |
| The CSV’s separator and columns | Build CSV Row |
| The address people post to | path in Webhook |
A contributor posts the address of a photo of fishing boats in a harbor at dawn.
The reply is a JSON array with one object. It holds a title of fewer than 12 words and a description of two or three sentences about the boats and the light. A lowercase keywords list follows, with its keyword_count. csv carries the same three fields as a header and one row. Read the keywords before you upload them, since a model can name something the photo does not show.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one is a straight line: take the picture, ask OpenAI, clean the answer, build the CSV, reply. Send one picture first and read the reply.
For experts. The OpenAI call is a plain HTTP request with the key in a header, and the reply sends every incoming item back as JSON.
| Node | What it does | What to know |
|---|---|---|
Parse Input | Reads the picture from imageUrl, image_url, image or imageBase64 | Bare base64 is wrapped as a data: link of type image/jpeg |
Vision LLM | Posts the request to chat completions | The timeout is 120 seconds |
Parse Metadata | Removes code fences and reads the JSON | It stops the run when the description or the keywords are missing |
Respond to Webhook | Replies with all incoming items | Its response text is not used with this setting |
The webhook is open, the reply is an array, and the model has a shutdown date.
gpt-4o-mini version for shutdown on 14 January 2027, with gpt-6-luna as the replacement. It does not list the bare name gpt-4o-mini, which Mindket’s copy keeps. Check that a new model accepts max_tokens and temperature before you swap it inresponseBody text in that node, which would add a success flag, is not usedkeyword_count reports what came backimage/jpeggpt-4o-mini call for each pictureAn n8n workflow with a webhook. You post it a picture, either as a public address or as base64, and gpt-4o-mini
looks at the picture and writes a title, a description and a list of keywords for a stock marketplace. The reply holds
them as fields and as a ready CSV row.
workflow.json: the workflow as n8n exports it, 7 nodes and no sticky notes. It holds no credential.README.md: these notes.The Authorization header of Vision LLM held the text Bearer YOUR_OPENAI_API_KEY. It now readsBearer <YOUR_OPENAI_API_KEY>, so a key pasted over the brackets is easy to spot. The rest is as the original copy had it.
gpt-4o-mini.workflow.json.Vision LLM. In its Authorization header, replace <YOUR_OPENAI_API_KEY> with your key. The brackets go. KeepWebhook and copy its test address. It ends in stock-image-meta.{ "imageUrl": "https://example.com/photo.jpg" }
/webhook/.Webhook takes a POST on the path stock-image-meta. It waits for a node to answer, so the sender gets the resultParse Input reads imageUrl, image_url or image from the body. It also accepts imageBase64, and when thatdata: start it adds data:image/jpeg;base64,. With no picture it stops with an error that says so.Build Vision Request writes the request for OpenAI's chat completions API. The system message makes the model atitle under 12 words, a 2 to 3 sentencedescription and 20 to 40 lowercase keywords. It sets gpt-4o-mini, a temperature of 0.3 and 800 tokens.Vision LLM posts that body to https://api.openai.com/v1/chat/completions with a 120 second timeout.Parse Metadata takes the model's text, removes code fences, reads the JSON, and falls back to the first {...}Untitled. A missing description or an empty keyword list stops the run.Build CSV Row doubles any quote marks, joins the keywords with a semicolon and a space, and builds csv_row and acsv text that starts with the header "title","description","keywords".Respond to Webhook answers with every incoming item as JSON.Build Vision Request. Change the title length, the keyword count or themodel in the same node. A newer model may refuse max_tokens or temperature, so check that it acceptsmax_tokens in that node.Build CSV Row. Change its separator to a comma if your marketplace wants one.path in Webhook.gpt-4o-mini version for shutdown on 14gpt-6-luna as the replacement. It does not list the bare name gpt-4o-mini, which this copyRespond to Webhook is set to answer with all incoming items, so the reply is a JSON array with one object holdingtitle, description, keywords, keyword_count, csv_row and csv. The responseBody text in that node, whichsuccess flag, is not used with this setting.keyword_count reports what cameimageUrl must be reachable by OpenAI, so a link behind a login or on a private network fails. A bareimage/jpeg, whatever the file is.gpt-4o-mini call runs for each picture, and every picture goes to OpenAI.NOTICE.md 592 B README.md 5 KB workflow.json 7 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
nerijs · Kit
A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…
LiconStudio · Kit
Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…