AI Image Caption & Alt Text Generator (Images + Video) avatar

AI Image Caption & Alt Text Generator (Images + Video)

Pricing

from $3.60 / 1,000 images

Go to Apify Store
AI Image Caption & Alt Text Generator (Images + Video)

AI Image Caption & Alt Text Generator (Images + Video)

Generate image captions, detailed descriptions, accessibility/SEO alt text and keyword tags for images and video frames with an open-source AI model (Florence-2) - no API key. Video files also get a timed scene list and a summary. Chains with Video Frame Extractor. Failed images are free.

Pricing

from $3.60 / 1,000 images

Rating

0.0

(0)

Developer

Kanto Labs

Kanto Labs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

What does AI Image Caption & Alt Text Generator do?

AI Image Caption & Alt Text Generator writes an image caption, a detailed image description and ready-to-use alt text for every image you give it, plus keyword tags and, if you want, the text written in the image (OCR). It also works on video files: frames are sampled, repeated shots are skipped for free, and you get a caption per scene, a timed scene list and a one-paragraph video summary. It runs an open-source vision-language model (Microsoft Florence-2, MIT licence) inside the Actor, with no API key and no images sent to a third-party AI service.

Give it image links (your shop, CMS, S3, a CDN, Dropbox, Google Drive) or the dataset of a Video Frame Extractor run, and get clean JSON back: one row per image.

Why use this image captioning API?

  • Three texts per image, for one price: a short caption, a detailedCaption (up to 3 sentences: subject, clothing, colours, setting) and altText that fits the 125-character screen-reader guideline, written without "image of" filler.
  • Reads screenshots, slides and charts, not only photos: "A screenshot of a code editor window in Visual Studio Code", "A graphic representation of the Wikimania Nairobi Onboarding Issue".
  • Video too: a caption per scene with its time, a timeline and a summary paragraph - frames that look like the previous one are skipped and not charged.
  • You only pay for captioned images. Broken links, web pages, unsupported files, blank images and skipped video frames are free, each with a plain-language reason.
  • Private and predictable: the model runs inside the Actor; no OpenAI/Google key, no per-token bills, the same image gives the same text every time.
  • Built for automation: n8n, Make, Zapier, the Apify API, schedules and webhooks. Chains with Video Frame Extractor.

Use cases

  • Alt text for SEO and accessibility (WCAG): fill missing alt attributes on a website, blog or shop catalogue in bulk.
  • E-commerce product images: first-draft product image descriptions and tags for listings and on-site search.
  • Digital asset management: searchable captions and keywords for photo libraries, CMS media and stock folders.
  • Video indexing: what is on screen in each scene of a video, with timestamps, for search, chapters or an LLM.
  • Dataset labelling: quick captions for image datasets before human review.
  • Content moderation pre-screening: a text description of each image to route or filter.

How to generate captions and alt text for images

  1. Paste direct image links into Image URLs (JPG, PNG, WEBP, GIF, BMP, TIFF), one per line. Remove the two sample photos.
  2. Optional: add Video URLs, or pick a Video Frame Extractor dataset.
  3. Choose the detailed caption length (detailed = up to 3 sentences, paragraph = up to 5) and the alt text max length.
  4. Click Start. Results appear in the Captions & alt text view; videos also get a row in the Videos view.

Pages of social and video platforms (Instagram, Pinterest, X, Facebook, YouTube, TikTok, Vimeo...) are refused politely, free of charge: their terms forbid downloading. Use files you are allowed to process.

Input example

{
"imageUrls": [
"https://example.com/shop/products/red-sneaker.jpg",
"https://example.com/blog/team-offsite.png"
],
"detailLevel": "detailed",
"altTextMaxLength": 125,
"includeTags": true,
"readImageText": false
}

Video: put file links into Video URLs (MP4, MOV, WEBM, MKV...). Frames are looked at every 2 seconds by default; only frames that look different from the last captioned one are captioned.

Output example

One row per image (real output for the built-in sample photo):

{
"type": "image",
"source": "image",
"imageUrl": "https://api.apify.com/v2/key-value-stores/.../records/sample-caption-football.jpg",
"fileName": "sample-caption-football.jpg",
"width": 1024,
"height": 683,
"status": "ok",
"caption": "A young boy playing soccer on a dirt field.",
"detailedCaption": "A young boy playing soccer on a dirt field. He is wearing a red t-shirt, black shorts, and black sneakers. The boy is in mid-air, kicking a white soccer ball with his right foot.",
"altText": "A young boy playing soccer on a dirt field.",
"altTextLength": 43,
"tags": ["boy", "soccer", "black", "dirt", "field", "red", "t-shirt", "shorts", "sneakers", "mid-air", "white", "ball"],
"imageText": null,
"processingTimeMs": 2148
}
  • caption: a short headline (at most ~70 characters, cut at a natural break).
  • altText: the first sentence of the description without "image/photo of", shortened to Alt text max length. Often the same as caption; it differs when the first sentence is long.
  • detailedCaption: the full description. tags: keywords from it. imageText: lines of text read in the image (only with Also read text in the image).

Video frames have source: "video-frame" plus videoUrl, timestampSeconds and timecode, and imageUrl points to the stored frame. Each video also gets one row with type: "video":

{
"type": "video",
"fileName": "product-demo.mp4",
"status": "ok",
"durationSeconds": 30.03,
"framesRead": 16,
"framesCaptioned": 7,
"framesSkippedSimilar": 9,
"summary": "A 30-second video. It opens with ... Then ... It ends with ...",
"timeline": [
{ "startSeconds": 0, "endSeconds": 4, "timecode": "00:00:00.000", "caption": "...", "framesCaptioned": 1, "frameUrl": "https://..." }
],
"tags": ["..."]
}

How much does it cost to caption images?

Pay per event: $0.004 per captioned image ($4 per 1,000 images), plus Apify's tiny actor-start fee. Store discounts: Silver and Gold $0.0036 per image. The same price covers the paragraph length and the OCR option.

Free: links that fail (404, private, timeout), web pages and other non-image files, unsupported formats (SVG, HEIC), blank single-colour images, refused platform links, video frames skipped as similar, and anything over your Max cost per run.

Worked examples:

JobImages chargedCost
1,000 product photos1,000$4.00
20 mixed images (the quality test below)20$0.08
30-second explainer video, a frame every 2 s (16 looked at, 9 similar skipped)7$0.028
Video Frame Extractor run of 2 videos (24 frames)24$0.096

Max cost per run is respected exactly: captioning stops when the budget is reached and the remaining images get a free skipped row. Max captioned frames per video (default 60) caps the cost of one video.

Accuracy - what to expect

Measured on 20 varied real images (people, products, food, screenshots, slides, a chart, landscapes, night and low-light scenes, video frames), every output checked by eye against the image:

  • 9 of 20 fully correct, 10 partly wrong, 1 wrong. The caption / alt text named the main subject on every image; on 4 it also stated a wrong detail (a head count, a website's name, the city of a night street, what a chart shows).
  • The detailed caption gets the scene right, but its 2nd-3rd sentences contained a wrong detail on about half of the images (a count, "creamy" for a tomato sauce, a streetcar called a double-decker bus). Review descriptions before publishing them where exact facts matter.
  • Charts and infographics are recognised as such, but what the chart shows can be misread (our 1 "wrong"). Turn on Also read text in the image to get the real labels and numbers.

The paragraph option writes more, and its later sentences are more often guesses.

Tips

  • Alt text for a website: keep Alt text max length at 125 and use altText as is; use detailedCaption for a longer description (aria-describedby, product copy drafts).
  • Screenshots, slides, posters, packaging: turn on Also read text in the image to get the words exactly as written in imageText.
  • Long videos: raise Video: look at a frame every to 5-10 s, or lower Video: max captioned frames per video.
  • Video Frame Extractor first if you want exact scene-cut frames or thumbnails: pick its dataset here and its frames are captioned with their timestamps.

Limits

  • English output only.
  • The model does not identify people (it describes them) and does not know brand names unless the brand is written on the product.
  • Images up to 40 MB / 200 megapixels; SVG and HEIC are not supported (convert to JPG/PNG/WEBP).
  • Videos up to 120 minutes / 2 GB by default (raise up to 600 minutes / 4 GB).
  • Speed: about 4-5 seconds per image on the default 4 GB memory.
  • Video Frame Extractor - keyframes, scenes, thumbnails and evenly spaced frames from any video file. Caption its frames here.
  • Video OCR - every piece of on-screen text in a video (subtitles, captions, titles) with timestamps and SRT.
  • Video to LLM Context - keyframes per scene + transcript, packaged for an LLM.
  • AI Image Upscaler 4x - sharpen and enlarge small images (Real-ESRGAN) before captioning.

FAQ

Is this free image captioning?

The model is free and open source; the Actor charges $0.004 per captioned image to cover the cloud computer that runs it. Failures are free.

Can I use it for WCAG / accessibility alt text?

Yes - altText is written for screen readers (no "image of", at most 125 characters by default). Like any AI caption, review alt text for images where the exact meaning matters (charts, legal or medical images).

Does it send my images to OpenAI or Google?

No. The Florence-2 model runs inside the Actor on Apify's servers. Your images are only downloaded from the links you give.

Which languages?

Captions are written in English. Text in the image (OCR) is read best for English and other Latin-script text.

Can I caption Instagram or YouTube content?

No. Those platforms forbid downloading in their terms. Use your own files or files you are allowed to process.

Does it work from n8n, Make or Zapier?

Yes. Run the Actor (or a saved task) through the Apify integration and read the dataset; each row has caption, altText, detailedCaption and tags.

Something went wrong?

Every problem (404, a web page instead of an image, too large, unsupported format) gets a clear error in its row and is free. If a caption is clearly wrong, open an Issue with the image link and we will look at it.