Image Caption & Alt Text Generator – AI, Bulk, No API Key
Pricing
from $6.00 / 1,000 image describeds
Image Caption & Alt Text Generator – AI, Bulk, No API Key
AI alt text and image captions in bulk: accessible alt text (≤125 chars), detailed caption and SEO file name for image URLs, or audit a web page's <img> tags and flag missing/poor alt. Florence-2 runs inside the Actor, no API key. $6 per 1,000 images.
Pricing
from $6.00 / 1,000 image describeds
Rating
0.0
(0)
Developer
Cemal Atakli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Image Caption & Alt Text Generator
Generate alt text and image captions in bulk with AI. Give the Actor a list of image URLs, or the URL of a web page, and it returns for every image:
- a short, accessible alt text (125 characters or less by default, no "image of..." filler),
- a detailed caption (1–3 sentences) or a longer paragraph description,
- an SEO-friendly file name suggestion such as
gray-wolf-standing-snow-trees.jpg, - for web pages: the current alt text of every
<img>, a grade (missing,empty,poor,short,ok) and a ready-to-paste<img ... alt="...">snippet.
The vision model (Microsoft Florence-2-base) runs inside the Actor on CPU. You do not need an OpenAI, Google or other API key, and your images are not sent to a third-party AI service.
What can it do?
| Feature | Details |
|---|---|
| Bulk alt text generator | Thousands of image URLs per run. Paste a list or CSV, or read URLs from another Apify dataset (e.g. an e-commerce or image scraper). |
| Image caption generator | Short caption + detailed caption, or a long paragraph (colours, background, layout). |
| Alt text audit for a website page | Collects every <img> (also srcset, <picture> and lazy-loaded data-src), reads the existing alt, flags missing / empty / poor alt text and writes a new one. Option to describe only the images that need it. |
| SEO file names | Lower-case, hyphenated, stop words removed, original extension kept. |
| Formats | JPG, PNG (transparency flattened to white), WebP, GIF (first frame), BMP, TIFF, HEIC/HEIF (iPhone), AVIF, and data:image/...;base64 URIs. |
| Fair billing | Failed downloads, 404s, HTML pages, SVGs, icons below 32 px and skipped images are free. |
Use cases
- Accessibility (WCAG 2.x, ADA, European Accessibility Act): find images without alt text and fill them in.
- SEO for images: descriptive alt text and file names for product photos, blog images and galleries.
- E-commerce catalogues: describe thousands of product images from a Shopify, WooCommerce or marketplace scraper.
- CMS migrations and DAM tagging: add captions to an image library before importing it.
- AI agents and RAG: turn images into text that an LLM or a search index can use.
Input example
{"imageUrls": ["https://raw.githubusercontent.com/xinntao/Real-ESRGAN/master/inputs/wolf_gray.jpg","https://raw.githubusercontent.com/xinntao/Real-ESRGAN/master/inputs/children-alpha.png"],"pageUrls": ["https://en.wikipedia.org/wiki/Gray_wolf"],"maxImagesPerPage": 20,"onlyImagesNeedingAlt": true,"captionDetail": "detailed","altTextMaxLength": 125,"seoFilenames": true,"quality": "standard"}
With an empty input the Actor describes two demo images, so you can see the output with one click.
Output example
{"url": "https://thumb.wikimedia.org/wikipedia/commons/thumb/6/68/Eurasian_wolf_2.jpg/250px-Eurasian_wolf_2.jpg?utm_source=en.wikipedia.org&utm_campaign=parser&utm_content=thumbnail","pageUrl": "https://en.wikipedia.org/wiki/Gray_wolf","altStatus": "missing","width": 250,"height": 194,"format": "jpeg","fileSizeBytes": 19457,"status": "ok","altText": "A gray wolf standing in the snow next to trees.","altTextLength": 47,"caption": "The image shows a gray wolf standing in the snow, surrounded by trees. The wolf is a light brown color with darker brown patches on its fur. Its eyes are alert and its ears are perked up, giving it an inquisitive look.","shortCaption": "A gray wolf standing in the snow next to trees","seoFilename": "gray-wolf-standing-snow-next-trees.jpg","altNeedsFix": true,"htmlSuggestion": "<img src=\"https://thumb.wikimedia.org/wikipedia/commons/thumb/6/68/Eurasian_wolf_2.jpg/250px-Eurasian_wolf_2.jpg?utm_source=en.wikipedia.org&utm_campaign=parser&utm_content=thumbnail\" alt=\"A gray wolf standing in the snow next to trees.\">","processingSeconds": 2.07,"model": "Florence-2-base@512px"}
The dataset has three views: Alt text & captions, Page alt text audit and Details. Export to JSON, CSV, Excel or HTML, or use the API. A run summary (images described, errors, CPU seconds per image) is saved as SUMMARY in the key-value store.
Alt text grades (web pages)
| Grade | Meaning | altNeedsFix |
|---|---|---|
missing | No alt attribute at all | yes |
empty | alt="", fine only for decorative images | yes, unless the image is marked role="presentation" / aria-hidden |
poor | Generic or file-name alt: "image", "photo", "IMG_1234", "banner.jpg", alt = file name, under 5 characters, or over 250 characters | yes |
short | One word ("Telephone"): fine for icons and buttons, usually too vague for photos | no |
ok | Looks like a real description | no (skipped when onlyImagesNeedingAlt is on) |
Pricing
Pay per event, no subscription. You pay only for images that were described.
| Event | Price |
|---|---|
| Image described (alt text + caption + SEO file name, any caption detail) | $0.006 per image ($6 per 1,000) |
High-detail add-on (only with quality: high, 768 px analysis) | $0.003 per image |
| Actor start | $0.00005 per run |
Comparison with other alt text / caption Actors in the Apify Store (prices as listed in October 2026):
| Actor | Price per image |
|---|---|
| This Actor | $0.006 ($0.009 with high detail) |
| seemuapps/image-captioner | $0.012 |
| myexcelsolution alt text generator | $0.01 |
| bewitching alt text generator | $0.006 |
| raional alt text generator | $0.005 |
Set Maximum cost per run in the run options to cap your spend: the Actor stops cleanly when the limit is reached and lists what was not processed in the summary.
Model and license
- Model: Florence-2-base by Microsoft (0.23 B parameters). We use the native Transformers checkpoint
florence-community/Florence-2-base. - License: MIT, which allows commercial use. The weights are baked into the Docker image. Nothing is downloaded from Hugging Face at run time.
- Runs on CPU. About 2 seconds per image at the default 4 GB memory (1 CPU core), plus about 5 seconds to load the model once per run.
FAQ
Which languages are the captions in? English only. Florence-2 was trained on English captions.
How accurate is it? The short alt text is usually right about the main subject, scene and colours. Detailed captions and especially paragraphs can invent small details, such as a tail position or a brand name. Review alt text for important pages, as you would with any AI tool. It does not identify people, read long text reliably or know product names.
Does it work for pages built with JavaScript? It reads the HTML the server sends. Images that only appear after JavaScript runs (some galleries and infinite-scroll pages) are not found. In that case, scrape the image URLs with another Actor and pass them in imageUrls or datasetId.
What about SVG, icons and tracking pixels? SVGs are skipped. Images smaller than 32 px (change this with minImageSidePx) are skipped for free.
Is "high" quality worth it? It analyses the image at 768 px instead of 512 px. It helps with busy scenes and small details, but it takes about 1.8 times the CPU, so it costs an extra $0.003. For alt text, standard is enough in most cases.
How fast is it? At 4 GB, about 30 images per minute. More memory gives more CPU cores and faster runs at the same price per image.
Can I keep my images private? Images are downloaded and processed inside your Apify run and never sent to an external AI API.
Use with AI agents / Apify MCP
The Actor works as a tool in the Apify MCP server (gazidev/image-captioner), so Claude, ChatGPT, Cursor and other MCP clients can call it. Agents can pass data:image/...;base64, URIs in imageUrls. A typical call:
{"imageUrls": ["https://example.com/product.jpg"], "captionDetail": "alt"}
You can also call it from the API, from Make, n8n or Zapier, or chain it after an image scraper with datasetId.