I test 20 images before paying for 2,000 alt texts
Start with the page context, not just the image folder
A folder of 2,000 images looks like a straightforward automation job: send each image to a model and save its description. The expensive mistake is discovering afterward that those descriptions do not fit the pages where the images appear. Alt text communicates an image’s purpose in context, rather than cataloging everything visible.
Begin with an inventory that pairs each image with its page, nearby text, and intended use. Include a stable identifier so every result can be matched to its source. Group similar work together, such as product photographs, tutorial screenshots, and editorial illustrations. These groups will need different instructions.
Separate images that need descriptions from those that do not
Before making paid requests, identify decorative images and images whose information is already fully conveyed by nearby text. Decorative images generally need an empty alt attribute, not a generated description. Record that decision explicitly so an empty value is not mistaken for unfinished work.
Flag linked images, charts, and screenshots for extra attention. A linked image may need text describing its destination or action. A complex chart may need a short alternative plus a fuller explanation elsewhere on the page. Do not ask a single sentence of alt text to replace an accessible data table.
Build a small test set before choosing your settings
Select about 20 images that represent the collection, including awkward examples: tiny labels, similar products, busy scenes, and images with uncertain purpose. Use an image-capable model and verify that the selected model and API route accept image input before planning the full run. Gemini 2.5 Flash is one candidate to evaluate if image input is supported through your chosen route.
MyRelay gives you one key and one budget across supported providers, with request-level token and cost records. Create a MyRelay account to run your sample and inspect what those requests actually cost. Treat the sample as a measurement, not a promise that every image will cost the same.
Write instructions that leave little room for invention
Give the model the image, its purpose, relevant surrounding text, and a clear output requirement. Ask for concise English alt text that conveys the information needed on that page. Tell it not to infer identities, materials, locations, or other details that the image and supplied context do not establish.
Avoid a universal character limit. A simple product photograph may need only a short phrase, while a tutorial screenshot may require more detail. Ask the model to omit introductory wording such as “image of” unless the medium itself matters. Have it return an uncertainty flag separately from the proposed alt text, rather than inserting review notes into published content.
Measure the sample and set a stopping point
Review all sample outputs before scaling. Look for useful distinctions between similar images, unnecessary repetition of nearby captions, and invented details. Revise the instructions once, then retest the difficult examples instead of repeatedly processing the entire sample.
Divide the sample’s total cost by the number of processed images to estimate an average. Multiply that figure by the remaining image count, then allow room for retries and manual corrections. Image size, input handling, and output length can change charges, so use the estimate as a budget checkpoint rather than a fixed quote.
Process manageable groups and save every result
Run the collection in small groups so you can pause after inspecting both quality and spending. Bulk processing does not have to mean placing every image in one request. Processing images individually often makes matching outputs, handling failures, and retrying selected items simpler.
Save each result with its image identifier, review status, and processing status. Skip completed records when restarting. Limit simultaneous requests, respect service limits, and cap retries so a temporary failure cannot create an open-ended bill. Check MyRelay’s request costs after the first production group before continuing.
Publish only after checking the actual pages
Review uncertain outputs and a sample from every image group. Check meaningful text against the original image, and inspect functional images in their page context. Then import the approved values and verify that decorative images remain empty and descriptions attach to the correct images. Keep approved results so future runs process only new images or changed contexts. The cheapest useful workflow avoids paying twice for work you already trust.