{"id":367713,"date":"2026-09-23T15:24:18","date_gmt":"2026-09-23T15:24:18","guid":{"rendered":"https:\/\/ru.wordpress.org\/plugins\/alt-text-ai-autopilot\/"},"modified":"2026-09-23T15:24:08","modified_gmt":"2026-09-23T15:24:08","slug":"fluffalt","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/fluffalt\/","author":18398186,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"5.3","requires_php":"7.4","requires_plugins":null,"header_name":"FluffAlt \u2014 Auto Alt Text for Images","header_author":"avsalexandra","header_description":"AI alt text for images. Bring your own OpenAI-compatible API key (OpenAI, OpenRouter, Cloudflare Workers AI, or a custom endpoint). Auto-generate on publish and bulk-generate in the background \u2014 for SEO and accessibility.","assets_banners_color":"c8d4e2","last_updated":"2026-09-23 15:24:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/fluffalt","header_author_uri":"https:\/\/github.com\/avs-alexandra","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"avsalexandra","date":"2026-09-23 15:24:08","revision":3709584}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3709584,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3709584,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3709584,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3709584,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3709584,"resolution":"1","location":"assets","locale":"","width":1760,"height":1320},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3709584,"resolution":"2","location":"assets","locale":"","width":1760,"height":1320},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3709584,"resolution":"3","location":"assets","locale":"","width":1760,"height":1320}},"screenshots":{"1":"Generate alt text button in Gutenberg and the WordPress Media Library.","2":"Settings page: provider, API key, model.","3":"Bulk generation with a category or tag filter and progress bar."}},"plugin_section":[],"plugin_tags":[1953,2353,17214,6357,186],"plugin_category":[34,55],"plugin_contributors":[242983],"plugin_business_model":[],"class_list":["post-367713","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ai","plugin_tags-alt-text","plugin_tags-image-seo","plugin_tags-seo","plugin_category-accessibility","plugin_category-seo-and-marketing","plugin_contributors-avsalexandra","plugin_committers-avsalexandra"],"banners":{"banner":"https:\/\/ps.w.org\/fluffalt\/assets\/banner-772x250.jpg?rev=3709584","banner_2x":"https:\/\/ps.w.org\/fluffalt\/assets\/banner-1544x500.jpg?rev=3709584","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fluffalt\/assets\/icon-128x128.png?rev=3709584","icon_2x":"https:\/\/ps.w.org\/fluffalt\/assets\/icon-256x256.png?rev=3709584","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fluffalt\/assets\/screenshot-1.jpg?rev=3709584","caption":"Generate alt text button in Gutenberg and the WordPress Media Library."},{"src":"https:\/\/ps.w.org\/fluffalt\/assets\/screenshot-2.jpg?rev=3709584","caption":"Settings page: provider, API key, model."},{"src":"https:\/\/ps.w.org\/fluffalt\/assets\/screenshot-3.jpg?rev=3709584","caption":"Bulk generation with a category or tag filter and progress bar."}],"raw_content":"<!--section=description-->\n<p>FluffAlt automatically generates the alt text (the <code>alt<\/code> attribute) for your images using a vision AI model, so every picture on your WordPress site has a meaningful text description. Better image SEO, better accessibility (WCAG), and you never have to write alt text by hand again.<\/p>\n\n<p>It can fill in alt text the moment you publish a post, right after you upload an image, or in bulk for hundreds of images you uploaded before. It also adds a one-click \"Generate alt text\" button to the Media Library and the Gutenberg Image block.<\/p>\n\n<p>You bring your own API key. The plugin talks to any OpenAI-compatible chat API, so you can pick the option that fits your budget:<\/p>\n\n<ul>\n<li><strong>OpenAI<\/strong> \u2014 <code>gpt-4o-mini<\/code> and other vision models. The most reliable quality; pay-as-you-go.<\/li>\n<li><strong>OpenRouter<\/strong> \u2014 a single key for many models, including <strong>free<\/strong> vision models. Set the model to <code>auto-free<\/code> and the plugin picks a working free one.<\/li>\n<li><strong>Cloudflare Workers AI<\/strong> \u2014 a <strong>free tier<\/strong> with the open LLaVA model. Simpler alt text, no card needed to start.<\/li>\n<li><strong>Custom URL<\/strong> \u2014 any other OpenAI-compatible endpoint (self-hosted models, regional proxies, and so on).<\/li>\n<\/ul>\n\n<p>Every request sends only a downscaled copy of the image plus a short prompt, and asks for a low-detail reading, so the token cost per image stays tiny.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li><strong>One-click generation<\/strong> \u2014 a \"Generate alt text\" button in the Media Library and in the Gutenberg Image block, right under the alt field.<\/li>\n<li><strong>On publish<\/strong> \u2014 when a post goes from draft to published, the plugin scans the content and orders alt text only for the images that actually ended up in the article. You pay only for what you use.<\/li>\n<li><strong>On upload<\/strong> (optional) \u2014 generate as soon as an image is added to a post.<\/li>\n<li><strong>Bulk generation<\/strong> \u2014 a settings-page tool for sites that already have hundreds of images: choose a post type, category or tag, see how many images have no alt text, and run the job in the background (Action Scheduler or WP-Cron). You can close the tab, come back later, watch progress, or stop it.<\/li>\n<li><strong>Error log with retry<\/strong> \u2014 failed images are listed on the settings page with \"Retry\" and \"Dismiss\" buttons.<\/li>\n<li><strong>Fill attachment fields<\/strong> (optional) \u2014 put the same text into the attachment title, caption and description.<\/li>\n<li><strong>Language setting<\/strong> \u2014 pick the output language from a dropdown (English, Russian, German, French, Spanish and more; defaults to the site language). Works regardless of the prompt language.<\/li>\n<li><strong>Skip decorative images<\/strong> \u2014 by minimum size, or by filename fragment (<code>icon-<\/code>, <code>logo<\/code>, <code>sprite<\/code>, and so on).<\/li>\n<li><strong>Delay for auto-generation<\/strong> \u2014 authors add and remove images while writing; the plugin waits a configurable number of minutes before generating.<\/li>\n<li><strong>Clean uninstall<\/strong> (optional) \u2014 a checkbox to remove all plugin settings and internal data when the plugin is deleted. The alt text on your images is standard WordPress data and always stays.<\/li>\n<li><strong>Translation-ready<\/strong> \u2014 English by default, with a Russian translation bundled (<code>ru_RU<\/code>).<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends images to a third-party AI service to generate alt text. No request is made until you enter an API key and choose a provider, and a request happens only when alt text is generated (manually, on upload, on publish, or in bulk).<\/p>\n\n<p>For each generation the plugin sends: a downscaled copy (or URL) of the image, and a short text prompt. It receives back the generated alt text. No personal data, post content, or user information is sent.<\/p>\n\n<p>The provider is whichever one you select in the settings:<\/p>\n\n<ul>\n<li><strong>OpenAI<\/strong> \u2014 https:\/\/api.openai.com \u2014 <a href=\"https:\/\/openai.com\/policies\/terms-of-use\/\">Terms<\/a> \u00b7 <a href=\"https:\/\/openai.com\/policies\/privacy-policy\/\">Privacy<\/a><\/li>\n<li><strong>OpenRouter<\/strong> \u2014 https:\/\/openrouter.ai \u2014 <a href=\"https:\/\/openrouter.ai\/terms\">Terms<\/a> \u00b7 <a href=\"https:\/\/openrouter.ai\/privacy\">Privacy<\/a><\/li>\n<li><strong>ProxyAPI<\/strong> \u2014 https:\/\/proxyapi.ru \u2014 <a href=\"https:\/\/proxyapi.ru\/\">Terms<\/a> \u00b7 <a href=\"https:\/\/proxyapi.ru\/\">Privacy<\/a><\/li>\n<li><strong>Cloudflare Workers AI<\/strong> \u2014 https:\/\/api.cloudflare.com \u2014 <a href=\"https:\/\/www.cloudflare.com\/website-terms\/\">Terms<\/a> \u00b7 <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Privacy<\/a><\/li>\n<li><strong>Custom URL<\/strong> \u2014 the endpoint you enter yourself.<\/li>\n<\/ul>\n\n<h3>Compatibility<\/h3>\n\n<p>Tested with PHP 7.4, 8.0, 8.1, 8.2, 8.3. Tested with WordPress up to 7.1.<\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPLv2 or later.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin from <strong>Plugins \u2192 Add New<\/strong> (search for \"FluffAlt\"), or upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>Settings \u2192 FluffAlt<\/strong>, choose a provider and paste your API key.<\/li>\n<li>Generate alt text from the Media Library, from the Gutenberg Image block, on publish, or with the bulk tool on the settings page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20automatically%20add%20alt%20text%20to%20images%20in%20wordpress%3F\"><h3>How do I automatically add alt text to images in WordPress?<\/h3><\/dt>\n<dd><p>Install the plugin, add your API key on the settings page, and choose when auto-generation runs (on publish or on upload). From then on new images get alt text automatically. For images you already have, use the bulk tool.<\/p><\/dd>\n<dt id=\"can%20i%20generate%20alt%20text%20for%20all%20my%20existing%20images%20at%20once%3F\"><h3>Can I generate alt text for all my existing images at once?<\/h3><\/dt>\n<dd><p>Yes. On the settings page, open \"Bulk alt text generation\", pick a post type (and optionally a category or tag), and start the job. It runs in the background in batches, so you can close the tab and come back later to see progress.<\/p><\/dd>\n<dt id=\"do%20i%20need%20my%20own%20api%20key%3F\"><h3>Do I need my own API key?<\/h3><\/dt>\n<dd><p>Yes. The plugin does not include an API key. Create one with your chosen provider (OpenAI, OpenRouter, ProxyAPI or Cloudflare) and paste it into the settings.<\/p><\/dd>\n<dt id=\"how%20much%20does%20it%20cost%3F\"><h3>How much does it cost?<\/h3><\/dt>\n<dd><p>You pay your own provider per request. Check the real spend in your provider's dashboard. With <code>gpt-4o-mini<\/code> it is usually a fraction of a cent per image. OpenRouter has free vision models and Cloudflare Workers AI has a free tier.<\/p><\/dd>\n<dt id=\"it%20says%20%22access%20denied%20by%20security%20policy%22%20or%20a%20403%20error.\"><h3>It says \"Access denied by security policy\" or a 403 error.<\/h3><\/dt>\n<dd><p>Your provider is blocking requests from your server's region. Try a different provider, or enter a custom endpoint that is reachable from your host.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20alt%20text%20i%20wrote%20myself%3F\"><h3>Will it overwrite alt text I wrote myself?<\/h3><\/dt>\n<dd><p>No. Existing non-empty alt text is never overwritten by automatic generation.<\/p><\/dd>\n<dt id=\"can%20i%20generate%20alt%20text%20in%20another%20language%3F\"><h3>Can I generate alt text in another language?<\/h3><\/dt>\n<dd><p>Yes. Pick the language in <strong>Settings \u2192 FluffAlt<\/strong>. It defaults to the site language and works regardless of the prompt language.<\/p><\/dd>\n<dt id=\"does%20deleting%20the%20plugin%20remove%20the%20alt%20text%20from%20my%20images%3F\"><h3>Does deleting the plugin remove the alt text from my images?<\/h3><\/dt>\n<dd><p>No. The alt text is stored in <code>_wp_attachment_image_alt<\/code>, a standard WordPress field, and is never touched. Only the plugin's own settings and internal data are removed, and only if you tick \"delete all plugin data\" in the settings before deleting the plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>First public release.<\/p>\n\n<ul>\n<li>Generate alt text on demand (Media Library button and Gutenberg Image block).<\/li>\n<li>Auto-generation on publish: scans the published content and generates alt text only for images that actually ended up in the article.<\/li>\n<li>Auto-generation on upload (optional), with a configurable delay.<\/li>\n<li>Bulk generation as a background job (Action Scheduler \/ WP-Cron): close the tab and it keeps going; reopen to see progress or stop it.<\/li>\n<li>Two-step scope picker for bulk and a searchable category\/tag picker for auto-generation.<\/li>\n<li>Providers: OpenAI, OpenRouter, Cloudflare Workers AI, ProxyAPI, or a custom OpenAI-compatible URL.<\/li>\n<li>Output language dropdown, independent of the prompt language.<\/li>\n<li>Skip decorative images by minimum size or filename fragment.<\/li>\n<li>Optionally fill the attachment title, caption and description.<\/li>\n<li>Error log with one-click retry.<\/li>\n<li>Optional \"delete all plugin data on uninstall\" \u2014 the image alt text itself is never removed.<\/li>\n<li>Fully translation-ready; English source strings with a bundled Russian (ru_RU) translation.<\/li>\n<\/ul>","raw_excerpt":"Automatically generate image alt text with AI: on publish, on upload, or in bulk. Bring your own API key. Better image SEO and accessibility.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=367713"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/avsalexandra"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367713"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367713"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367713"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367713"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367713"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}