Generate alternative texts for images.
Project description
interaktiv.alttextgenerator
Generate alternative texts for images.
This add-on helps editors provide meaningful alt texts for images using AI, improving both accessibility and SEO. By ensuring that all images have descriptive alternative texts, the website becomes more usable for people using assistive technologies and more discoverable by search engines.
Prerequisites
Tested for Plone 6.0.15.
This add-on requires interaktiv.aiclient for its AI capabilities and
interaktiv.alttexts to provide the alt text behaviour.
Currently, this add-on only works out of the box with Volto. Therefore, you should also install the according Volto plugin volto-interaktiv-alttextgenerator.
Features
In the controlpanel, you may configure the
- system prompt
- user prompt
- batch size for migrations
- allowed image types
- blacklisted paths
Remember to configure the AI client inside its own controlpanel as well, since otherwise the generation won't work. Once you configured everything, you're all set.
To verify that the add-on works as intended, upload an image either from the toolbar directly or inside an image block. Toasts visually support uploads from image blocks, whereas uploads from the toolbar are silent.
The generated alt text can look like this:
Image by Drosera74 via Pixabay
Iridescent blue and green hummingbird hovering with outstretched wings as it feeds from a bright purple flower against a soft green leafy background. (OpenAI: GPT-5.1, 2025-12-15)
The alt text is generated by AI and includes the model used and the generation date at the end. This metadata is appended only for AI-generated alt texts, which can be identified via the corresponding checkbox in the image’s schema. If the alt text is manually edited, the checkbox is automatically disabled to indicate that the alt text is no longer AI-generated.
Language
All alt texts are generated in the site's language. This behaviour is specified
in the default user prompt. If you specify {language} inside your user prompt,
it will be replaced with the site language internally. If you wish to use a
specific language for the alt texts, you can leave out {language} and specify
your own language directly inside the user prompt.
Blacklisting paths
To blacklist a path, you can specify a glob pattern. For every request, the
image path is matched against the specified patterns. If it matches any pattern,
the generation of alternative texts is skipped.
For describing patterns, the term segment must first be defined:
A segment is used to describe a sequence of characters, that follows after a /
and is interrupted by a /. Given a URL www.github.com/plone/volto and looking
at its path /plone/volto, two such segments can be identified (plone and
volto).
Now all patterns can be described precisely:
?- This matches exactly one character inside a segment.*- This matches zero or more characters inside a segment.**- This matches one or more segments.
Examples
| Pattern | Path | Matches? | Explanation |
|---|---|---|---|
/images/* |
/de/images/logo.png |
✅ | * matches any file directly in /images/. |
/images/* |
/de/images/icons/logo.png |
❌ | Only matches a single segment under /images/. |
/images/** |
/de/images/icons/logo.png |
✅ | ** matches files in nested folders. |
/media/photo?.jpg |
/de/media/photo1.jpg |
✅ | ? matches exactly one character in the filename. |
/media/photo?.jpg |
/de/media/photo12.jpg |
❌ | ? matches only a single character. |
/private/** |
/private/user/data/file.png |
✅ | Matches any file under /private/. |
** |
/de/user/profile.png |
✅ | Deactivates generation globally. |
Migrate existing images
Chances are, you already have a few images on your Plone site and want to generate alt texts for them as well.
To generate alt texts for existing images without alt texts, you can run the
Interaktiv Alt Text Generator: Migration profile from the Zope Management
Interface. Beware, this will update every image, so this process may take a
while.
The images are processed in batches, the size of which can be configured in the control panel. The speed is determined by the number of concurrent requests to the OpenRouter API, which can be configured in the AI Client control panel. Changes are committed after a batch was processed successfully. In case of a conflict error, the entire batch is aborted and changes are rolled back. In this case, the image batch will not be processed again until another migration run is triggered.
The logger will keep you up to date with the current progress of the migration.
...
INFO [interaktiv.alttextgenerator:89][waitress-3] Processing 10 images.
INFO [httpx:1740][waitress-3] HTTP Request: POST https://openrouter.ai/api/v1/chat/completions "HTTP/1.1 200 OK"
...
INFO [interaktiv.alttextgenerator:94][waitress-3] Committed changes to 10 images.
INFO [interaktiv.alttextgenerator:99][waitress-3] Processing 8 images.
INFO [httpx:1740][waitress-3] HTTP Request: POST https://openrouter.ai/api/v1/chat/completions "HTTP/1.1 200 OK"
...
INFO [interaktiv.alttextgenerator:104][waitress-3] Committed changes to 8 images.
INFO [interaktiv.alttextgenerator:106][waitress-3] 108 of total 108 images migrated.
Adding this add-on to your project
Install the add-on using pip:
pip install interaktiv.alttextgenerator
or if you're using uv:
uv pip install interaktiv.alttextgenerator
Install from source
You can also install the add-on from the source. In your mx.ini file, add:
[interaktiv.alttextgenerator]
url = git@github.com:interaktivgmbh/interaktiv.alttextgenerator.git
rev = v2.0.1
extras = test
Or using https:
[interaktiv.alttextgenerator]
url = https://github.com/interaktivgmbh/interaktiv.alttextgenerator.git
rev = v2.0.1
extras = test
Contribute
License
The project is licensed under GPLv2.
Credits and acknowledgements 🙏
Generated using Cookieplone (0.9.10) and cookieplone-templates (eae593d) on 2025-11-21 12:25:50.251349. A special thanks to all contributors and supporters!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file interaktiv_alttextgenerator-2.0.1.tar.gz.
File metadata
- Download URL: interaktiv_alttextgenerator-2.0.1.tar.gz
- Upload date:
- Size: 343.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01c9715b889f3eac3a7fa87d70ebd8a5815d410fc605a1f542482d2e380b78f6
|
|
| MD5 |
69ae5e0908c1ae05c15cc392575df12f
|
|
| BLAKE2b-256 |
8ee4816d40dc535af2f6b8ffb6b8a5763a3136e6f93029d54ecbf0210f24aa38
|
File details
Details for the file interaktiv_alttextgenerator-2.0.1-py3-none-any.whl.
File metadata
- Download URL: interaktiv_alttextgenerator-2.0.1-py3-none-any.whl
- Upload date:
- Size: 40.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38ec13c3b4c645a0648817e31f088b651bb4874f1e51eb8c46947093145ee68b
|
|
| MD5 |
deddd24ea1e04bd716078f7848a24feb
|
|
| BLAKE2b-256 |
edb1f938b607dfda3fc93e3bca7176ed49dfdcb57f2e53bb684688dbe38d03a5
|