Skip to content

Alt Text Generation

Let AI draft the alt text for an image, so screen reader users know what is in it.

Deckyard can look at an image and write a short description of it. The generated text lands in the media library alongside the image, so every slide that uses that image starts from the same alt text.

This is a drafting aid, not an accessibility guarantee. The text still needs your eyes: only you know what the image is doing on the slide.

Alt text generation needs OpenAI as the default vendor. The AI needs to look at the image, and the vision path is written against OpenAI’s API.

A configured OpenAI key is not enough on its own: the feature only switches on when OpenAI is also the resolved default vendor, so an instance with both OPENAI_API and CLAUDE_API set and LLM_VENDOR=claude will not show the generate buttons. See AI Setup for how the default is resolved.

The buttons are also hidden when AI is switched off, and the endpoints refuse in demo and sandbox mode.

Alt text is generated in the media library, not in the slide form. Open the image picker from any image field and you will find the button in two places:

  • Adding a new image - in the upload panel, next to the alt text fields: Generate alt text (AI)
  • An image already in the library - in its detail panel, same button

The ImageKit picker has its own version of the button, labelled Generate ALT (AI), which writes a single language rather than the full set.

The slide’s own Alt text field is a plain text field with a Translate button and no generate button:

Slide editor showing Image role toggle between Meaningful and Decorative, Alt text field with guidance, and expanded Accessibility section with title and summary fields

What you type there overrides the library’s alt text for that slide. The field asks for roughly 120 to 180 characters.

There is no automatic generation. Nothing happens on upload, and there is no setting that turns alt text into a background job.

What you get instead is a prompt at the moment it matters. Use an image whose alt text is still empty, and Deckyard asks: Alt text is empty. Generate it with AI now? (Recommended). Decline, and it asks whether to use the image anyway. Generate over alt text that already exists, and it asks first: Overwrite existing alt text with AI-generated text?

There is no bulk path: one image per run, always started by you.

One run writes alt text for every deck language your instance has switched on, in a single call, not just the language you are working in. A workspace running Dutch, English and German gets three fields filled at once.

Which languages those are is an admin setting (Settings > Admin > Admin: supported slide languages), out of the box Dutch and British English. Codes outside Deckyard’s twelve deck languages are ignored.

The ImageKit picker is the exception: it asks for one language, the one you are working in.

The image goes to the model together with whatever context is available:

  • The presentation title
  • The slide type and slide title
  • The image’s library description
  • The photographer or credit
  • The image’s tags

The instructions it gets are deliberately narrow: six to eighteen words per language, no “Image of” or “Photo of” opener unless it genuinely helps, and an empty string when the image carries no meaning. The result is capped at 220 characters per language.

Uploaded or local imagesImages from a public URL
SizeUp to 4 MBNo limit applied
FormatsPNG, JPEG, WebP, GIFSame detection by extension

Local images are read from disk and embedded in the request; a public URL is passed to OpenAI to fetch. The format is read from the file extension, not from the file’s contents.

An image in an unsupported format, an SVG for instance, does not fail. The model is asked without the image and writes from the title, description and tags alone. That text is a guess about a picture nobody looked at, so treat it as a placeholder.

Every image field carries an Image role toggle:

  • Meaningful (needs alt text) - the image carries information, so it needs a description
  • Decorative (no alt) - the image is there for looks; it renders with an empty alt and aria-hidden, and screen readers skip it

Setting the role to decorative hides the alt text field: there is nothing to write. This is also what the prompt honours, returning empty strings for an image it judges decorative.

Publishing enforces this. A deck with an image that is not marked decorative and has no alt text anywhere - not on the slide, not in the library, not as the item’s heading - is refused, naming the images that need attention. So the choice is explicit: describe it, or declare it decorative.

Read every generated alt text before you publish. The model saw the pixels, not your point.

  • Accuracy - is that actually what the image shows?
  • Purpose - does it say what the image is doing on this slide?
  • Brevity - is it a sentence, not a paragraph?

Do:

  • Describe what matters in the image, not the slide title
  • Say the thing the image is there to say
  • Include text that is visible in the image when it carries the point
  • Keep it to a sentence

Don’t:

  • Open with “Image of” or “Picture of”
  • Describe decorative elements; mark the image decorative instead
  • Repeat the slide title
  • Leave a meaningful image without alt text

The model describes what it sees, which is exactly the problem for images whose meaning is not visual:

ImageWhat the AI writesWhat it should say
Chart”A bar chart with four coloured bars of different heights”The finding: which region led, by how much
Screenshot”A software interface with a sidebar and a form”Which setting is shown and what state it is in
Photo of people”A group of people sitting around a table in an office”Who they are and why the slide shows them

The pattern: a chart, a screenshot or a diagram needs the conclusion, not an inventory of shapes. Dense text in an image, a diagram with many relations and a very abstract picture are the other cases where you should expect to rewrite.

Generating alt text sends the image itself to OpenAI, plus the context listed above. Uploaded images are inlined in the request; images on a public URL are fetched by OpenAI from that URL.

Deckyard keeps nothing extra: what stays behind is the alt text, stored with the image in your own media library. What OpenAI does with the request is governed by its data policy, which is worth reading before switching this on for sensitive material. There is no other vendor to fall back on for this one feature.