AI Auto Alt Text Generator
AI Auto Alt Text Generator is a lightweight, privacy-conscious plugin that uses OpenAI vision-capable models (defaulting to GPT-5.4 nano, with GPT-5.4 mini and legacy GPT-4o mini options) to create meaningful, screen-reader-friendly alt text and SEO-friendly titles for your images. Whether you add a single image, bulk-process your library, or just want a one-click fix in the Media Library, the plugin handles it all – no manual effort required. This solution is far cheaper than many alternatives because it cuts out the middle-person. You’ll just need to bring your own OpenAI API key. ✨ Key features Automatic alt text on upload – set-and-forget accessibility. Optional automatic image titles – improve SEO with descriptive titles. One-click manual generation – “Generate Alt Text & Title” button in the Media Library. Bulk update tool – batch-process existing images, including those that only have filename-based alt text, with a configurable pause between batches. Prompt fine-tuning – supply site-wide context and optionally include the image file name. Model selection – default to GPT-5.4 nano (fastest & cheapest) or switch to GPT-5.4 mini for higher quality; legacy GPT-4o mini and GPT-5 mini/nano remain available. Image size & detail control – choose the resolution and level of visual detail sent. Developer-friendly – filters and actions to customise prompts, models and output, plus optional outgoing webhooks. WordPress Abilities API – registers a generate-alt-text ability (WordPress 6.9+/7.0) so core AI, agents and automation tools can generate alt text. No extra servers – data flows only between your site and OpenAI; nothing is stored off-site. Multilingual output – choose English (UK), English (US) or other popular languages. (English US is the default.) 🧭 Where to find the bulk tool Tools → Bulk Alt Text Update Media → Bulk Alt Text Update (shortcut that redirects to the Tools page) Settings → Alt Text Generator includes a button linking straight to the bulk page 🧠 How it works When an image is uploaded (or manually chosen), the plugin creates a temporary public URL for that image. It sends the image – plus optional context such as the parent post title, your custom site context and the file name – to your selected OpenAI vision model. OpenAI returns a concise description. Alt text is stored in WordPress’ native _wp_attachment_image_alt field. (Optional) The returned title is stored as the attachment post title. Nothing is cached or stored on OpenAI’s side; only the final strings live in your database. Settings overview OpenAI API Key – Required to connect to OpenAI. OpenAI Model – GPT-5.4 nano (default), GPT-5.4 mini, or legacy GPT-4o mini / GPT-5 mini / GPT-5 nano. Image Size to Send – Thumbnail, Medium, Large, or Full. Image Detail Quality – ‘Low’ or ‘High’ (Low uses fewer tokens). Bulk batch size – Number of images per batch (lower values reduce rate-limit risk). Site Context – Optional free-form prompt guidance (brand voice, niche, etc.). Send Image File Name – Include file name in the prompt for extra context. Automatically Generate Title – Add descriptive titles alongside alt text. Use full context for image titles – When enabled, title generation includes site context and file name (uses more tokens). Bulk optimiser delay (seconds) – Pause between batches during bulk runs. OpenAI request timeout (seconds) – Max wait time for OpenAI responses (10–120s) to reduce timeout failures on slower hosts. Output Language – Default English (US). Choose English (UK) for British spellings or another popular language; outputs (alt text and titles) will be generated in the selected language. Webhook URL & signing secret – Optionally POST generated alt text/titles to an external endpoint (with an optional HMAC-SHA256 signature) for automation and logging. Developers The plugin is extensible via standard WordPress hooks, an outgoing webhook, and the WordPress Abilities API. Filters aatg_alt_text_prompt ( $prompt, $post_ID, $context ) – customise the alt-text prompt. aatg_image_title_prompt ( $prompt, $post_ID, $context ) – customise the title prompt. aatg_openai_request_payload ( $payload, $context, $messages ) – customise the full OpenAI request (model, messages, reasoning effort). aatg_generated_alt_text ( $alt_text, $post_ID ) – filter alt text before it is saved. aatg_generated_title ( $title, $post_ID ) – filter the title before it is saved. aatg_is_low_quality_alt ( $is_low, $alt, $post_ID ) – control which existing alt text the bulk tool regenerates. aatg_webhook_payload ( $payload, $post_ID, $result ) – customise the outgoing webhook body. aatg_supported_image_extensions ( $extensions ) – customise which image formats are sent to OpenAI (default: PNG, JPEG, GIF, WebP). Actions aatg_after_alt_text_generated ( $post_ID, $alt_text ) aatg_after_title_generated ( $post_ID, $title ) aatg_after_generation ( $post_ID, $result ) Outgoing webhook Set a Webhook URL under Settings → Integrations & Webhooks to receive a non-blocking JSON POST after each generation. If a signing secret is set, requests include an X-AATG-Signature: sha256=… header (HMAC-SHA256 of the body) so your endpoint can verify authenticity. WordPress Abilities API On WordPress 6.9+ the plugin registers the ability ai-auto-alt-text/generate-alt-text (input: attachment_id) so WordPress core AI, agents, MCP servers and automation tools can generate alt text programmatically. Execute it with wp_get_ability( 'ai-auto-alt-text/generate-alt-text' )->execute( array( 'attachment_id' => 123 ) ). External services This plugin connects to the OpenAI API to generate alt text and (optionally) image titles. Endpoint: https://api.openai.com/v1/chat/completions When called: On image upload (automatic) Via “Generate Alt Text & Title” button in Media Library (manual) Via Tools → Bulk Alt Text Update (bulk) Data sent: image URL, optional file name, optional site context, optional parent post title Terms: https://openai.com/policies/terms-of-use Privacy: https://openai.com/policies/privacy-policy If you configure a Webhook URL, generated alt text/titles (and the image URL) are also sent to that endpoint you control.
Top keywords
- alt28×3.03%
- alt text25×2.71%
- text25×2.71%
- image19×2.06%
- openai18×1.95%
- title15×1.63%
- post14×1.52%
- aatg11×1.19%
- bulk11×1.19%
- context11×1.19%
- id10×1.08%
- gpt-59×0.98%
Toolbelt
A collection of simple addons that provide every day functionality with privacy and speed. There’s very few options, and no unnecessary filler. It does exactly what it needs to do and nothing else. Toolbelt takes a privacy first approach to adding features. Everything happens on your server. No data is sent to third party servers without your explicit consent. No data is loaded from third parties (for example social sharing scripts). Taking inspiration from Jetpack I want to rebuild the features I use the most and make them as simple and fast as possible. Toolbelt has been featured on The WordPress Tavern in an interview with me. You can read more about the creation of the plugin and my desire for a more private internet. Gutenberg Blocks Some of the Toolbelt modules include blocks to make working with the generated content easier. The available blocks are: Contact Form – The simplest way to have people get in touch. Works with the spam module. Post Categories – A category content list for magazine and newspaper themes. Simple Slider – A fast, CSS powered slider. No JavaScript and easy to edit. Projects Grid – to list a collection of projects. These can be filtered by project category. Testimonials Grid – to list a group of testimonials. Great for showing off! 🙂 Markdown – for those who like a simpler writing experience. Sitemap – Easily list all posts, pages, Categories and Projects. Star Rating – Rate things with a simple visual interface. Breadcrumbs – for full site editing. Related posts – for full site editing. All Features Toolbelt has a lot of features. The complete list is below. Admin Interface Tweaks – Small CSS changes to make the interface nicer to use. Avatars – Algorithmicly generated private avatars that are consistent across websites. Breadcrumbs Contact Form – Gutenberg compatible & private. Supports the spam blocker module. Cookie Banner CSP Header Disable Comment Urls – Removes comments urls from your site. Disable REST API – Disable the REST API from public usage. Fast 404 – Stops WordPress from loading the full 404 page for images and other content. Reduces server usage. Footnotes Get Image – Find a featured image for posts that do not have one assigned. Heading Anchors – Add anchor names to headings so that they can be linked to. Iframe Privacy Shield – Remove iframes and add a clickable screen so that they load when the user wants to see them. Infinite Scroll Jetpack Dev Mode – Disable Jetpacks connection so that only local functions are enabled. Lazy Loading Layout Grid – A nicer columns block. Markdown Monetization – Enable Coil Web Monetization. OEmbed – Add additional OEmbed providers. Optimization – Remove WordPress features that are rarely used. Portfolio – Portfolio custom post type and blocks. Post Category – A post category block. Random Redirection – Randomly redirect to a blog post. Related Posts Remove IP Addresses – Remove IP addresses from comments for user privacy (spam protection still works). Responsive Videos Search Redirect – If there’s a single search result redirect to it instead of displaying the restuls. Sitemap – Sitemap block. Slider – JavaScript free CSS slider block. Social Menu – Replace social links with icons in navigation blocks. Spam Blocker – Privacy focused spam blocker. Static Social Sharing – Link to social sharing pages, and don’t load social network content on your site. Stats – Enable privacy focused analytics providers like Fathom. Testimonials – Testimonials Custom post types and blocks. Tidy Notifications – Move plugin and theme notifications to a sidebar. Typographic Widows – Remove widows in post titles. Widget Display – Set rules for widget visibility. Toolbelt is Private Every week there’s a new story about Facebook (or Google, or Amazon, or whoever) tracking people inappropriately, or selling user details. Or some security breach that leaks users passwords or credit card info. Privacy is a big topic and frankly, it’s scary how much big corporations like Google, Facebook, and Twitter know. To ensure Toolbelt is as privacy focused as possible it: Does not phone out. No data is shared with third parties. Does not use standard social sharing javascripts (loaded from social networks servers). Does not track your usage of the plugin. Does not add generator comments, or secret promotional comments to your site html. Toolbelt is Fast Slow websites make me sad. I don’t want to add anything to Toolbelt that will impact site load speed. My Google Pagespeed score should not move from 100. Why? Faster sites are shown to increase conversions and time on site. Google loves fast sites and improves their search rankings. In addition fast sites are great for people with slower internet access, or on mobile data, and use less resources to generate the page. So many benefits! To be fast Toolbelt: Doesn’t use jQuery or any other javascript framework. All javascript is vanilla js, and minified. Minifies all assets (JS and CSS). Loads all assets inline. They are already small, and loading them directly on the page means there are no server requests. Only loads things when they are needed. JS and CSS are only loaded for activated modules. Very few options. There’s one main database option, an array that stores what modules are active. And another that stores settings for some modules. Uses the minimum code possible. Minimum Javascript and PHP. Less code means more speed, and fewer bugs. All options are disabled by default. You enable only the ones you need. Built for developers Toolbelt is built with developers in mind. It has a collection of hooks and filters to enable you to make the modules work the way you want. If you’re intersted to jump in the project, there are opportunities for developers at all levels to help out. Contribute to Toolbelt on GitHub and join the party. 🎉 The code can be found on Github Documentation with code examples can be found on the wiki You can reach out to me with questions or problems on Twitter