{"id":312596,"date":"2026-07-15T20:27:48","date_gmt":"2026-07-15T20:27:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ezalt-ai-automated-image-seo-accessibility\/"},"modified":"2026-07-15T20:27:24","modified_gmt":"2026-07-15T20:27:24","slug":"altmagic-ai-image-alt-text","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/altmagic-ai-image-alt-text\/","author":23454448,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.8","stable_tag":"1.2.8","tested":"7.0.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"EzAlt AI \u2013 Automated Image SEO & Accessibility","header_author":"Lidor Asulin","header_description":"Automatically generate SEO-friendly and accessibility-focused alt text for WordPress images using AI.","assets_banners_color":"","last_updated":"2026-07-15 20:27:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ezalt.ez-site.com\/","header_author_uri":"https:\/\/profiles.wordpress.org\/lidor132\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.8":{"tag":"1.2.8","author":"lidor132","date":"2026-07-15 20:27:24"}},"upgrade_notice":{"1.2.8":"<p>Fixes fatal error on activation (Freemius require.php bootstrap).<\/p>","1.2.7":"<p>Fixes Freemius SDK fatal error on plugin activation.<\/p>","1.2.6":"<p>Fixes credit purchase flow and version alignment for WordPress.org review.<\/p>","1.2.3":"<p>WordPress.org review fixes: text domain, Freemius dependency isolation, secure webhooks.<\/p>","1.2.2":"<p>WordPress.org review compliance: Media submenu, full external services docs, Media Library integration.<\/p>","1.2.1":"<p>Fixes credit delivery after Freemius purchases.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.8"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"EzAlt AI dashboard under Media menu","2":"Credits remaining and missing alt count","3":"Bulk generation progress bar","4":"Per-image generate button in Media Library"}},"plugin_section":[],"plugin_tags":[1953,2353,17214,163,186],"plugin_category":[34,50,55],"plugin_contributors":[271761],"plugin_business_model":[],"class_list":["post-312596","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ai","plugin_tags-alt-text","plugin_tags-images","plugin_tags-seo","plugin_category-accessibility","plugin_category-media","plugin_category-seo-and-marketing","plugin_contributors-lidor132","plugin_committers-lidor132"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/altmagic-ai-image-alt-text.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>EzAlt AI<\/strong> (by <a href=\"https:\/\/profiles.wordpress.org\/lidor132\/\">Lidor Asulin<\/a>) helps improve website SEO and accessibility by automatically generating descriptive alt text for images using AI.<\/p>\n\n<p>All plugin features are included and fully functional. AI generation uses an external service with a free starter credit; optional credit packs add service quota \u2014 they do not unlock hidden plugin code.<\/p>\n\n<p><strong>What makes EzAlt AI different:<\/strong><\/p>\n\n<ul>\n<li>Context-aware alt text \u2014 sends parent post title, content type, and taxonomy terms for sharper descriptions (e.g. WooCommerce products)<\/li>\n<li>Per-image generation from the Media Library attachment screen<\/li>\n<li>Purchase-intent routing so bought credits reach the correct WordPress site<\/li>\n<li>Idempotent API requests \u2014 retries never double-charge credits<\/li>\n<li>Background bulk processing via WordPress cron (no Action Scheduler required)<\/li>\n<\/ul>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Bulk optimize images missing alt text in your Media Library<\/li>\n<li>Generate alt text for a single image from the attachment edit screen<\/li>\n<li>Optional automatic alt text generation on image upload<\/li>\n<li>Real-time bulk progress bar<\/li>\n<li>Does not overwrite existing alt text<\/li>\n<li>Credits deducted only after successful generation<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin relies on external services to generate alt text. By activating or using this plugin, you agree to the terms and privacy policies listed below.<\/p>\n\n<h4>EzAlt Proxy API<\/h4>\n\n<p>The plugin sends requests to the EzAlt proxy API hosted at <strong>https:\/\/ezalt.ez-site.com<\/strong>.<\/p>\n\n<p><strong>Used for:<\/strong> AI alt text generation, credit balance sync, and purchase-intent registration.<\/p>\n\n<p><strong>Data sent and when:<\/strong><\/p>\n\n<ul>\n<li><strong>On alt text generation<\/strong> (bulk, auto-upload, or Media Library button): base64-encoded image content (HTTPS), image filename, MIME type, site URL, Freemius install ID (when available), unique request ID, site language, and optional parent-post context (title, categories).<\/li>\n<li><strong>On credit sync<\/strong> (admin dashboard load and periodic polling): site URL and Freemius install ID.<\/li>\n<li><strong>On \u201cBuy Credits\u201d click only<\/strong> (before Freemius checkout opens): site URL, Freemius user ID, Freemius install ID (when available), and selected plan ID. No payment or card data is sent by the plugin.<\/li>\n<\/ul>\n\n<p><strong>Service URL:<\/strong> https:\/\/ezalt.ez-site.com\/ezalt-api\/<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/ezalt.ez-site.com\/privacy-policy<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/ezalt.ez-site.com\/terms<\/p>\n\n<h4>OpenRouter API (AI Image Analysis)<\/h4>\n\n<p>Image data received by the EzAlt proxy is forwarded to OpenRouter, which routes requests to vision AI models (e.g. gpt-4o-mini) to produce descriptive alt text.<\/p>\n\n<p><strong>Data sent:<\/strong> Image content and generation parameters forwarded by the EzAlt proxy during alt text requests only.<\/p>\n\n<p><strong>Service URL:<\/strong> https:\/\/openrouter.ai<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/openrouter.ai\/privacy<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/openrouter.ai\/terms<\/p>\n\n<h4>Freemius (Checkout for Optional Credit Packs)<\/h4>\n\n<p>Freemius handles checkout for optional one-time credit packs. Freemius is not required to use the plugin\u2019s free starter credit or built-in features.<\/p>\n\n<p><strong>Data sent:<\/strong> Standard Freemius licensing\/checkout data when you interact with credit purchase flows.<\/p>\n\n<p><strong>Service URL:<\/strong> https:\/\/freemius.com<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/freemius.com\/privacy\/<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/freemius.com\/terms\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/ezalt-ai\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Open <strong>Media \u2192 EzAlt AI<\/strong><\/li>\n<li>Use your free starter credit or run bulk generation<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20any%20feature%20locked%20behind%20a%20paid%20plan%3F\"><h3>Is any feature locked behind a paid plan?<\/h3><\/dt>\n<dd><p>No. Bulk generation, auto-upload, and Media Library generation are built in and work with the free starter credit. Optional credit packs add quota for the external AI service only (WordPress.org Guideline 6 serviceware).<\/p><\/dd>\n<dt id=\"does%20it%20generate%20alt%20text%20automatically%20on%20upload%3F\"><h3>Does it generate alt text automatically on upload?<\/h3><\/dt>\n<dd><p>Yes. Enable \u201cAutomatic generation on upload\u201d under <strong>Media \u2192 EzAlt AI<\/strong>. Works with available credits \u2014 not gated by a license check.<\/p><\/dd>\n<dt id=\"does%20it%20overwrite%20existing%20alt%20text%3F\"><h3>Does it overwrite existing alt text?<\/h3><\/dt>\n<dd><p>No. Images that already have alt text are skipped.<\/p><\/dd>\n<dt id=\"how%20do%20purchased%20credits%20reach%20my%20site%3F\"><h3>How do purchased credits reach my site?<\/h3><\/dt>\n<dd><p>Click a Buy Credits button on <strong>Media \u2192 EzAlt AI<\/strong> before completing Freemius checkout. This registers a purchase intent so credits are applied to the correct site.<\/p><\/dd>\n<dt id=\"can%20i%20generate%20alt%20text%20for%20one%20image%3F\"><h3>Can I generate alt text for one image?<\/h3><\/dt>\n<dd><p>Yes. Open an image in the Media Library and use the <strong>Generate alt text<\/strong> button in the EzAlt AI field.<\/p><\/dd>\n<dt id=\"does%20bulk%20generation%20require%20action%20scheduler%20or%20woocommerce%3F\"><h3>Does bulk generation require Action Scheduler or WooCommerce?<\/h3><\/dt>\n<dd><p>No. EzAlt AI uses WordPress built-in cron.<\/p><\/dd>\n<dt id=\"are%20images%20sent%20to%20an%20external%20server%3F\"><h3>Are images sent to an external server?<\/h3><\/dt>\n<dd><p>Yes. See the External Services section for full disclosure.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Fix Freemius bootstrap: load start.php directly; require require.php in vendor-prefixed<\/li>\n<li>Guard Freemius calls when SDK is unavailable<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Fix fatal error on activation: include missing Freemius require.php in vendor-prefixed\/<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fix credit purchase when Freemius opt-in was skipped (checkout uses site URL)<\/li>\n<li>Document thank-you redirect URL for Freemius (ezalt.ez-site.com)<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Fix credit purchase when Freemius opt-in was skipped \u2014 checkout uses site URL<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Deferred Freemius and plugin bootstrap to plugins_loaded to prevent activation output warnings<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Freemius SDK managed via Composer and loaded from prefixed vendor-prefixed\/ path<\/li>\n<li>Webhook handler: Freemius HMAC verification, idempotency, server-authoritative credit sync<\/li>\n<li>Privacy\/Terms URLs verified at https:\/\/ezalt.ez-site.com<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Moved admin page under Media menu (WordPress admin hierarchy best practice)<\/li>\n<li>Removed inline CSS; all styles enqueued via admin.css<\/li>\n<li>Added Media Library per-image generation<\/li>\n<li>Clarified Guideline 6 serviceware model: all features included, credits are external service quota<\/li>\n<li>Expanded External Services documentation in readme<\/li>\n<li>Auto-upload enabled by default for new installs (uses free starter credit)<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Rebranded to EzAlt AI<\/li>\n<li>Fixed credit delivery after Freemius checkout<\/li>\n<li>Improved admin error messages and automatic credit sync<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Purchase intent + webhook credit sync<\/li>\n<li>REST endpoint for server-push cache invalidation<\/li>\n<li>HMAC webhook verification<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed credit balance sync after bulk processing<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Improved queue handling and API validation<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Automatically generate SEO-friendly and accessibility-focused alt text for WordPress images using AI.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/312596","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=312596"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lidor132"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=312596"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=312596"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=312596"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=312596"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=312596"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=312596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}