Describewright Pro
1. Install
- In WordPress, go to Plugins → Add New → Upload Plugin and upload the plugin zip as it is (do not unpack it):
describewright-pro-1.0.11-marketplace.zipfrom WPBay, Pluggable, PlugNest or CodeGrape, ordescribewright-pro-1.0.11.zipfrom Gumroad. From itch.io or Payhip you getdescribewright-pro-1.0.11-package.zip: unpack that one first, and upload thedescribewright-pro-1.0.11.zipinside it. - Click Activate. If the free Describewright plugin is installed, Pro takes over automatically and keeps all your descriptions and settings.
- Open Media → Audio description.
Requirements: WordPress 6.5 or later and PHP 7.4 or later. To create descriptions you need a current Chrome, Edge or Firefox, because the video is read in your browser. Visitors can use the Audio description button in any browser.
2. Licence key and updates
Bought on a marketplace: no key needed
If you bought Describewright Pro on WPBay, Pluggable, PlugNest, CodeGrape, itch.io or Payhip, you have the marketplace build. It needs no licence key: every Pro feature is active as soon as you activate the plugin, and it never contacts a licence server.
Updates: the marketplace build does not check for updates by itself. When we release a new version, the marketplace makes the new zip available in your account (on WPBay under My Account → My Downloads; on Payhip through the link in your receipt). To install it, go to Plugins → Add New → Upload Plugin, choose the new zip and click Replace current with uploaded. Your descriptions and settings are kept.
Bought on Gumroad: enter your licence key
Open Media → Audio description, scroll to Describewright Pro licence, paste the key from your Gumroad receipt (it is also in your Gumroad Library) and click Activate. A 1-site licence can be activated twice, so you can move a site or reinstall without asking us; the 10-site licence works the same way for ten sites. New versions are added to your Gumroad Library.
For Gumroad licences: if a licence ends, your saved descriptions, the Audio description button, the transcripts and the free features keep working. The queue, extended description and translation need an active licence. Marketplace copies have no expiry.
3. Choose an AI service
Describewright needs an AI model that can look at images. You pay that service directly for what you use; there is no per-minute fee from us. Open Settings at the bottom of Media → Audio description:
| Service | What to do |
|---|---|
| WordPress AI | On WordPress 7.0 or later, set up a provider under Settings → Connectors and choose WordPress AI here. No key is needed in Describewright. |
| Google Gemini | Create a key in Google AI Studio, paste it, save. Gemini 3.5 Flash-Lite is filled in for you. |
| OpenAI | Create a key at platform.openai.com, paste it, save. GPT-6 Luna, OpenAI's model for high-volume work, is filled in for you. |
| Anthropic Claude | Create a key at console.anthropic.com, paste it, save. Claude Haiku 5.5 is filled in for you. |
| OpenRouter | Create a key at openrouter.ai, paste it, save. GPT-6 Luna is filled in; click Load models to pick another model that accepts images. |
| Custom or local | Any other OpenAI-compatible service (for example Groq or Mistral), or a vision model in LM Studio or Ollama on your own computer: enter its address ending in /v1 and the model name. |
Click Test the connection. It sends one small test image and tells you whether the model can see it.

What it costs: a video is sent as still frames (JPEG, at most 512 pixels wide, a few per pause), never as a video file, so a low-cost vision model is enough. Our estimate from the published prices in October 2026 is a few cents for a 10-minute video with GPT-6 Luna or Gemini 3.5 Flash-Lite. Your provider's bill is what counts, and most providers show your usage per day.
4. Your first audio description
- Click Describe next to a video.
- Optional: write Notes for the AI: the names of the people, the organisation, what the slides are about. For example "Riverside city council. The speaker is not on screen; read the slide text." The notes are saved with the video.
- Choose the language of the descriptions and the style: Concise gives only what matters most, Detailed adds more when the pause allows it.
- Click Create audio description and keep the tab open. Describewright listens for the pauses in the speech, finds the scene changes, picks still frames and asks the AI for one description per pause.
If Captionwright has captions for the video, Describewright uses them instead of listening: the pauses are more precise and the AI also knows what is said, so it does not repeat it.
5. Check and edit
Every description appears as a card with the frame it describes, its start and end time and a word budget: how many words the voice can read between the description's start and end at the Speaking rate you set under Settings: about 2.6 words per second × the rate, minus a 0.4-second margin, and at least 2 words. A faster rate fits more words, a slower one fewer. The budget never counts past the start of the next description, because the reading would run into it. For descriptions just generated in the editor it also stops where the speech starts again; that point is not stored in the saved file, so after the descriptions are saved and opened again, the description's own end time is its limit. The budget turns red when a description is too long to fit; hover over it to see which limit applies.
- Change the text directly. The budget updates as you type.
- Change a time by typing it (for example
1:05.2). The budget follows at once, while you type: moving the start towards the end lowers it, more time raises it. Times before the start or after the end of the video are corrected to fit it. - Play from here plays the video from that description. With Read the descriptions aloud while the video plays ticked, you hear each description with the browser's voice, as your viewers will.
- Add a description here adds one at the current video time; Remove deletes one.
- Name in the player is what viewers see in the language picker.
- Save descriptions publishes them. Download .vtt gives you the standard WebVTT file.

No automatic description is perfect. For accessibility compliance the descriptions must convey the important visual information correctly, so read every one next to the video before you save.
6. What your viewers get
- An Audio description button under every described video in the core Video block and the
[video]shortcode. Nothing to add. It works with the keyboard and remembers the viewer's choice. - When it is on, each description is read aloud with the browser's voice at the right moment, the video sound is lowered while it speaks, and screen-reader users hear it announced.
- The description also appears as text under the video while it is read, for viewers who follow along by sight. You can turn this off in the settings.
- With several languages, a language picker appears next to the button.
- Described transcript: add the Described transcript block and pick the video, or tick Add a described transcript below every described video block in the settings. It lists the descriptions (and the speech, if Captionwright has captions) in time order; clicking a time jumps the video there. Shortcode:
[describewright_transcript id="123"], with optionallang="sv",collapsed="no"andtimes="no".

7. Describe the whole library
In Queue: describe many videos, choose the language and click Describe every video without audio description. Videos that already have descriptions in that language are skipped. Descriptions are saved automatically so they work right away; review them later with Edit.
Stop after this video pauses the queue, and Resume continues it, even after reloading the page. If a video fails (for example, the browser cannot read its sound, or the AI service is unreachable), the queue moves on and keeps the failed video in a list with the reason. Click Retry failed videos to process only those; videos that were described are never processed again.

8. Extended audio description
Some videos have no pauses long enough: a talk that never stops, or slides that change while someone speaks. Tick Extended description in the settings. Then:
- When you create descriptions, Describewright also adds descriptions at important scene changes that have no pause. They are marked Extended in the editor.
- In the player, the video waits while an extended description is read, and continues when it is done. A normal description that runs past its pause also makes the video wait instead of talking over the speech.

9. Translate descriptions
In the editor, open Translate into other languages, tick the languages and click Translate the saved descriptions. Each language becomes its own description track with the same timing, and viewers choose it next to the Audio description button. Translation uses the same AI service as the descriptions. Check the translations in the editor like any other descriptions.

10. Writing good descriptions
The AI follows these rules, and they are worth keeping when you edit:
- Describe what is shown, not what is said. If the speaker says "the library opens on Sundays", the description does not repeat it; it gives what the viewer would otherwise miss, like the opening hours on the slide.
- Read on-screen text word for word: titles, names under speakers, phone numbers, web addresses, figures in charts.
- Present tense, plain words, most important first. Who, what, where.
- Do not interpret. "She frowns" rather than "she is angry". Describe what anyone could see.
- Use names once they are known (from the notes or on screen), otherwise describe the person briefly.
- Fit the pause. If something important does not fit, shorten the rest or use extended description.
"A slide is shown on the screen with some text about the library."
"Slide: open Sundays, 10 AM to 4 PM."
11. Settings reference
| Setting | What it does |
|---|---|
| Service, API key, model | The AI that writes the descriptions. Leave the key field empty to keep the saved key; tick Remove the saved key to delete it. |
| Default language | Two-letter code for new descriptions, for example en, sv, de. |
| Style | Concise or Detailed. |
| Shortest pause | Seconds of silence before a description fits (0.8–5). Lower it for fast speakers. |
| Reading | Read aloud with the browser's voice (and announce to screen readers), or only announce to screen readers. |
| Speaking rate | 0.7–1.6. How fast the browser's voice reads the descriptions in the player. The word budgets in the editor and the word limits given to the AI follow it: about 2.6 words per second × the rate, minus a 0.4-second margin, at least 2 words. Reload the editor after changing it. |
| Turn audio description on by default | The button starts on for viewers who have not chosen yet. |
| Show each description as text under the video | The text line under the player while a description is read (on by default). |
| Add a described transcript below every described video block | Adds the transcript automatically. |
| Extended description (Pro) | Adds descriptions where there is no pause, and lets the player wait while they are read. |
12. Troubleshooting
| Message or problem | Solution |
|---|---|
| "The sound of this video could not be analysed" | The browser could not decode the sound track, so the pauses in the speech are unknown. Add captions with Captionwright, try another browser, or click Describe without speech timing if the video has no speech. Nothing is generated or saved until you choose. |
| "There are no pauses in the speech long enough for a description" | Lower Shortest pause, or turn on extended description (Pro). |
| "This browser could not open the video" | Use Chrome, Edge or Firefox, or upload an MP4 (H.264/AAC) or WebM version. |
| "The video stopped loading: no data arrived for 30 seconds" | The server or CDN stopped sending the video file. Check that the video plays in the Media Library and try again. In the queue the video is listed as failed and the queue goes on with the next one; Retry runs the failed ones again. While the tab is in the background the time limit waits, because browsers do not load video in a hidden tab. |
| "The browser cannot jump within this video because the server does not allow range requests for it" | The server sends the video only from the start (some private-media or download plugins do this), so the frames at the pauses cannot be read. Ask your host to allow HTTP range requests for media files, or serve the uploads directly. |
| "The video did not show its first picture within 3 minutes" | The video arrives too slowly. Try again on a faster connection, or upload a smaller MP4 (H.264) version. |
| "The thumbnails could not be made: …" | The frames for the cards could not be read; the descriptions themselves are fine. Reopen the editor to try again. |
| Frames are black, or the video cannot be read | Your media is on another domain (CDN or cloud storage). Allow cross-origin requests (CORS) from your site on that storage. |
| "The AI service rejected the API key" | Paste a new key; leaving the field empty keeps the saved one. |
| The test says the model cannot see images | Choose a model that accepts images (vision). Load models lists what your key can use. |
| No button under the video | The video must use the core Video block or the [video] shortcode with a file from the Media Library, and have saved descriptions. Clear page caches after saving. |
| No voice, only screen-reader announcements | The viewer's browser or system has no voice for that language, or Reading is set to screen readers only. |
| "This key has already been activated the allowed number of times" | Contact us through the store where you bought Pro and we will reset it. |
13. Privacy and external services
- Data is sent only when you click Create audio description (or run the queue), Translate the saved descriptions, Test the connection or Load models, and only to the AI service you chose. The request goes from your server; your API key never reaches the browser.
- Create audio description sends still frames from the video (JPEG, up to 512 pixels wide, each labelled with its time), the video's title, your notes for that video, the pauses (start and end times and a word limit), the language and style you chose, up to four descriptions written earlier in the same video (so the AI does not repeat them) and, if Captionwright has captions for the video, the words spoken in and around that part of the video, with their times.
- Translate sends the text of the saved descriptions and the names of the two languages. Test the connection sends a built-in 32×32 red test image and a fixed question. Load models sends only your API key. Every request carries your API key.
- Nothing is sent to Karelia Labs. Gumroad copies check the licence key with Gumroad when you activate it and once a day; marketplace copies never contact a licence server.
- Visitors: the Audio description button uses the browser's built-in voice. No data leaves the visitor's browser, and the only thing stored is their on/off choice in the browser.
- Description files are stored as WebVTT in
wp-content/uploads/describewright/. They are public files, like your videos.
14. Deactivating, deleting and your description files
- Deactivating removes nothing. Your descriptions and settings are back when you activate it again.
- Updating (replacing the plugin with a new zip) keeps everything.
- Deleting Describewright Pro under Plugins → Delete:
- If the free Describewright plugin is still installed, only the Pro licence data is removed. All descriptions and settings stay, because the free plugin uses them.
- Otherwise everything Describewright created is removed: the description files in
wp-content/uploads/describewright/, the records and notes attached to your videos, the settings and the licence data. Videos then play without the Audio description button.
- Your videos in the Media Library are never changed or deleted.
Want to keep your descriptions? Click Download .vtt in the editor for each video, or copy the folder wp-content/uploads/describewright/ (one .vtt file per video and language) before deleting the plugin. They are standard WebVTT files that other players and tools can use.
Support
Contact us through the store where you bought Describewright Pro: on WPBay, open a ticket from your account; on Pluggable, PlugNest, CodeGrape or itch.io, message us there; for Gumroad and Payhip, reply to your receipt.
Describewright is made by Karelia Labs. Licensed under the GPL v2 or later.